tag 标签: tf卡

相关帖子
相关博文
  • 2023-10-13 16:55
    0 个评论
    前言 嵌入式项目中,比较常见的存储扩展方案是使用TF/SD卡或者EMMC或者RAW NAND,各种方案都有其优缺点,而SD NAND相对于上述方案具备很多优势,是目前嵌入式项目中存储扩展方案的一个非常不错的选择,正好一个项目在选择NAND存储方案, 恰巧论坛中联系到雷龙公司申请到了两片SD NAND,所以就进行一下测试评估。 SD NAND是什么? 为什么选择SD NAND? 其与TF/SD卡,EMMC,RAW NAND比有什么优势, 我们可以从深圳市雷龙发展有限公司的官网找到答案http://www.longsto.com/news/。 该公司SD NAND 二代产品介绍可以参考如下地址http://longsto.com/product/list-39.html,有1Gb,4Gb,32Gb,64Gb的容量可选,我这里申请到的是两片32Gb的芯片和测试板. 焊接后如下: 测试过程 申请样品时官方提供了野火版的STM32测试程序,但是手里只有精英STM32F103开发板 V2开发板, 稍微改以下即可使用。 使用工程SDIO模式SD测试例程\\SDIO-HAL库代码\\36-SDIO—SD卡读写测试\\Project\\Fire_F103VE.uvprojx 修改下芯片型号 修改下编译器,我这里使用的是新版本的MDK所以是AC6 选择下对应的仿真器 User\\key\\bsp_key.h中修改下按键,按照开发板原理图改为PE3 #define KEY1_PIN GPIO_PIN_3 #define KEY1_GPIO_PORT GPIOE #define KEY1_GPIO_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE 由于AC6只能使用UTF-8编码,而原来的文件使用GB2312编码,所以需要修改下main.c的编码,用VSCODE打开main.c Save with Encodeing选择UTF8,这样就改为UTF-8格式了。 编译下载按Key1按键, 串口打印测试结果如下 实际上CS SD NAND是完全兼容SD/TF卡的,所以直接使用精英STM32F103开发板 V2开发板的SD卡测试程序也是可以的 使用工程 【正点原子】精英STM32F103开发板 V2-资料盘(A盘)\\4,程序源码\\2,标准例程-HAL库版本.zip\\2,标准例程-HAL库版本\\实验34 SD卡实验 编译下载运行,可以看到串口打印如下 以上测试可以看出,用SD卡的程序完全可以不做任何修改应用于CS SD NAND, 软件可以无缝切换。 总结: CS创世SD NAND相对于TF卡的优势 焊接在PCB稳定,LGA-8封装容易焊接 尺寸小 结构更容易做到防水 内置SLC 擦写寿命长 一致性好 SD NAND与eMMC比具备以下优劣 尺寸小 方便焊接 容量可选多,适合实际应用 PIN脚少 功耗低 擦写寿命长 性能稳定 使用SLC/MLC CS创世 SD NAND相对于Raw NAND具有以下优势 免驱动使用 性能更稳定。 尺寸更小。 SD NAND可选容量更多 SD NAND的读写速度更快 在使用上程序完全兼容TF/SD卡,原来的程序无需任何修改即可使用,无缝切换. 而SD NAND又相对于其他方案具备上述诸多优势,所以是一个非常不错的选择. 综上,还在使用TF卡吗,是时候考虑用SD NAND替换了。
  • 热度 3
    2023-3-8 11:35
    1447 次阅读|
    1 个评论
    1.测试对象 HD-G2L-IOT基于HD-G2L-COREV2.0工业级核心板设计,双路千兆网口、双路CAN-bus、2路RS-232、2路RS-485、DSI、LCD、4G/5G、WiFi、CSI摄像头接口等,接口丰富,适用于工业现场应用需求,亦方便用户评估核心板及CPU的性能。 HD-G2L-CORE系列工业级核心板基于RZ/G2L微处理器配备Cortex®-A55(1.2GHz)CPU、16位DDR3L/DDR4接口、带ArmMali-G31的3D图形加速引擎以及视频编解码器(H.264)。此外,这款微处理器还配备有大量接口,如摄像头输入、显示输出、USB2.0和千兆以太网,因此特别适用于入门级工业人机界面(HMI)和具有视频功能的嵌入式设备等应用。 图1.1HD-G2L-IOT  2.测试目的 为了评估系统对不同类型的TF卡读写的性能和稳定性,以及确定系统是否可以正确地读取和写入数据。这对于需要大量使用TF卡存储数据的应用程序(例如,文件传输、备份和储存等)非常重要。 在测试中,通常会使用各种大小和类型的文件进行读写操作,并记录每个操作的速度和成功率。测试还可能涉及对TF卡进行格式化和写入不同的文件系统类型来测试系统对这些操作的支持。 通过进行TF卡读写测试,开发人员可以找到可能存在的性能和稳定性问题,并对系统进行优化,以最大限度地提高读写速度和可靠性。此外,比较不同品牌和规格的TF卡读写速度的测试结果,可以帮助用户选择最适合其应用程序的TF卡。 该报告适用于使用5种以上不同规格品牌TF卡在HD-G2L-IOT评估板上的读写速度测试。 2.1测试结果 ​表 2.1 从上表测试结果可以看出,在基于HD-G2L-IOT评估板测试9种不同规格品牌的TF中,各品牌规格TF卡可以正常识别使用,其中闪迪&海康威视&金士顿三种品牌的TF卡在评估板上都有较好的读写性能表现,能较大程度满足使用需求,用户可以选择以上TF卡用于HD-G2L-IOT评估板的项目开发。  3.测试原理 3.1 dd命令 1. Linuxdd命令用于读取、转换并输出数据。 2. dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。 3. 测试指令如下: 3.2dd的相关解释 4.测试过程 4.1 硬件准备 HD-G2L-IOT评估板、HD-G2L-COREV2.0核心板、网线、Type-c数据线、12V适配器、UART模块、电脑主机。 4.2 测试准备 准备5种以上不同规格品牌TF卡选取测试,如表4.1所示。 4.3 测试环境 图4.1测试环境 4.4 读写测试 以读写FAT32文件系统为例,写读大小为256MB的文件。 4.4.1 闪迪C10128GB 4.4.2 闪迪C416GB 4.4.3 爱国者U332GB 4.4.4 金士顿C1032GB 4.4.5 金士顿C432GB 4.4.6海康威视C1016GB 4.4.7 闪迪C1032GB 4.4.8 金士顿C1064GB 4.4.9 金士顿C48GB 5.关于HD-G2L-IOT 5.1 硬件参数 HD-G2L-IOT板载的外设功能: 集成2路10M/100M/1000M自适应以太网接口 集成Wi-Fi 集成2路RS-232接口 集成2路RS-485接口 集成2路CAN-bus接口 集成2路USBHost 集成1路USB扩展4G模块接口(集成SIM卡接口) 集成1路USB扩展5G模块接口(集成SIM卡接口) 支持1路TF卡接口 支持液晶显示接口(RGB信号) 支持4线电阻触摸屏与电容屏接口 1路MIPIDSI接口 1路摄像头接口(MIPICSI) 支持音频(耳机、MiC、SPK) 支持实时时钟与后备电池 支持蜂鸣器与板载LED 支持GPIO 1路TTL调试串口 直流+12V电源供电(宽压9~36V) HD-G2L-CORE核心板硬件资源参数: 注:受限于主板的尺寸与接口布局,核心板部分资源在IoT底板上以插针方式引出。
  • 热度 10
    2022-12-15 18:09
    752 次阅读|
    0 个评论
    文章目录 1、存储芯片分类 2、NOR Flash 与NAND Flash的区别 3、什么是SD卡? 4、什么是SD NAND? 5、SD NAND的控制时序 6、FPGA实现SD NAND读写 6.1、设计思路 6.2、仿真结果 6.3、实验结果 1、存储芯片分类 目前市面上的存储芯片,大致可以将其分为3大类: ① EEPROM EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片。EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。 这类产品容量小,读取速度慢,且无法在应用过程中写入数据,十分不便。目前多存在于一些MCU内部,如遥控器,电风扇等各类低端、低速消费类产品。相信你读大学如果玩单片机的话,那么应该是不陌生。 ② NOR Flash NOR Flash由Intel在1988年发明,是市场上两种主要的非易失闪存技术之一。NOR Flash 技术的出现,彻底改变了原先由EPROM和EEPROM一统天下的局面。 NOR Flash可能是目前应用领域最广泛的一种存储芯片了,基本上主流的电子产品里都有使用,比如手机摄像头内部,或者屏幕驱动电路板。主要用来存储代码和一些比较小的数据文件。NOR Flash架构决定了它的容量不能做大,而且读取速度比较慢。好处在于简单易用,其接口可以实现地址寻址,也就意味着可以做到直接对某个地址直接操作,而不需要建立额外的文件系统。 ③ NAND Flash 虽然很多人平常说的Flash 存储器一半默认其就是NOR Flash ,但这无疑是不严谨的。FLASH产品可以分为两个大类:NOR Flash 和 NAND Flash 。 NAND Flash 是市场上两种主要的非易失闪存技术之一,由东芝公司在1989年发明。其强调降低每比特的成本,并拥有更高的性能,可以像磁盘一样可以通过接口轻松升级。 NAND Flash应该是目前最热门的存储芯片了。因为我们生活中经常使用的电子产品都会涉及到它。比如你买手机,肯定会考虑64GB,还是256GB?买笔记本是买256GB,还是512GB容量的硬盘呢?(目前电脑大部分采用了基于NAND Flash产品的固态硬盘) 2、NOR Flash 与 NAND Flash的区别 Flash 闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何Flash 器件的写入操作都只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。 执行擦除时块尺寸的不同进一步拉大了NOR和NAND之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,用户必须权衡以下因素: NOR Flash支持随机访问,所以支持XIP(execute In Place),NAND Flash需要按块进行读取,所以不支持XIP NAND FLASH理论读取速度与NOR Flash相近,实际情况会根据接口不同有些差异 NOR 与 NAND 写入前都需要先擦除,NOR在擦除时以64~128KB的块进行,执行一个写入/擦除操作的时间约5s,NAND在擦除时以8~32KB的块进行,执行一个写入/擦除操作的时间约4ms NAND 理论最大擦除次数比NOR多 NOR 驱动比NAND简单,NAND FLASH需要通过专门的NFI(NAND FLASH Interface)与Host端进行通信,驱动相对复杂 所有Flash 都会有位反转的问题,NAND 位反转概率要比NOR高,NAND Flash 必须要使用ECC NAND的单元尺寸几乎是NOR器件的一半,所以NAND成本更低   NOR 与 NAND 各有特点,应用场景与应用难度也不同,一般来讲,NOR适用于小容量、略低速且需要直接对地址块进行操作的应用,而NADN则适用于大容量的高速应用。SD NAND 在保留了NAND架构优质特性的同时改进了不足之处,内置的控制器能自行管理NAND Flash,无需在外部处理ECC和进行坏块管理,免去了MTD层,不需要写繁琐的驱动代码。 3、什么是SD卡? ①概述 SD卡的英文全称是Secure Digital Card,即安全数字卡(又叫安全数码卡),是在MMC 卡(Multimedia Card,多媒体卡)的基础上发展而来,主要增加了两个特色:更高的安全性和更快的读写速度。 ②容量标准和速度等级 若按照容量 对 SD 卡进行等级划分,SD 卡可分为 4 个等级,SD(Secure Digital Card,安全数字卡) 卡、SDHC 卡(Secure Digital High Capacity,高容量安全数字卡)、SDXC 卡( SD eXtended Capacity,容量扩大化的安全数字卡)和 SDUC(Secure Digital Ultra Capacity,超 容量安全数字卡)。现今,市场的主流 SD 产品是 SDHC 和 SDXC 这两种较大容量的存储 卡,SD 卡因容量过小,已逐渐被市场淘汰,SDUC 则是容量太大,预计会出现在未来市 场。SD 卡的四种容量标准,具体见下图: 不同品牌和厂商生产的 SD 卡在对存取速度上的定义标准不同,这会使用户在选择 SD卡时产生困扰。所以 SD 协会根据视频匀速写入到 SD 卡的最低持续速度来划分不同等级, 每个等级的速率是以每秒传输多少 MB 来衡量的,单位为 MB/S。 SD 协会定义了三种速度等级:速度等级、UHS 速度等级与视频速度等级。三种速度等级的具体传输速度如下图: 4、什么是SD NAND? 上文中提到的SD卡其实更应该叫做TF卡,在日常生活中最常见的应用就是数码相机的存储卡。因为它是可拆卸的,所以这类SD卡最大的优点就是便携方便,但同时也有容易丢失和接触不良等毛病,所以多用于消费类产品。 在工业级应用中,更多见的是一类贴片式的SD NAND产品,俗称贴片式T卡或贴片式SD卡。虽然SD NAND 和TF卡称呼上有些类似,但是SD NAND和TF卡有着本质上的区别: 为什么SD NAND和 TF卡 之间有这么大区别呢?因为 SD NAND是为内置存储而生,是焊接在PCB板上的,是针对工业级应用的产品,所以品质稳定、一致性高、使用稳定性高、同时尺寸也小。而TF卡主要是针对普通消费者,品质和一致性、使用稳定性等相对要求不高,再加上国内鱼龙混杂的市场环境,导致内置存储用TF卡的品质风险高。   NAND Flash产品的一个特质就是它的品质并不是0和1这么简单,有些品质隐患是使用一段时间之后才被发现,如果这个产品已经销往海外,处理起来会变得异常麻烦。使用SD NAND可以为客户产品带来整体品质的提升,提供确定性,是客户产品良好品牌和口碑的稳定基石。而使用TF卡时,产品整机不可控因素会增高,比如常见的卡座老化松动、TF触点氧化、TF卡遗失、抗震性能减退等等。综上所述,虽然SD NAND与TF卡使用的协议相同,但从外观到内在都有区别。正在使用TF卡的客户需要提升产品稳定性及耐用性时,SD NAND 是绝佳选择。 尽管 SD NAND和 TF卡之间有着这么大的区别,但具体到实际应用,其对外接口和驱动程序都是一样了,这说明可移植性非常好。 ① 物理结构 SD NAND从物理结构看包括 5 个部分,分别为存储单元、存储单元接口、电源检测、卡及接口控制器和对外接口,具体见下图。 存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输 存储单元接口是接口控制器与存储单元的数据交互通道 电源检测单元保证 SD NAND工作在合适的电压下,如出现掉电或上电状态时,它会使控制单元和存储单元接口复位 卡及接口控制单元控制 SDNAND的运行状态,它包括 8 个寄存器 对外接口单元控制 SD NAND引脚的输入输出,一般包含SDIO接口和SPI接口 ② 对外接口 SD NAND共有 9 个引脚,其中包括 3 根电源线、1 根时钟线、1 根命令线和 4根数据线。如下: CLK:同步时钟线,由主机产生,即由主控制器(FPGA)输出; 使用 SPI 模式 时,该引脚与 SPI 总线的 SCK 时钟信号相连 CMD:命令控制线, SDIO 主机通过该线发送命令控制 SD NAND,如果命令要求 SD NAND 提供应答(响应), SD NAND也是通过该线传输应答信息; 使用 SPI 模式时,该引脚与 SPI总线的 MOSI 信号相连, SPI 主机通过它向 SD NAND发送命令及数据,但因为 SPI 总线 的 MOSI 仅用于主机向从机输出信号,所以 SD NAND返回应答信息时不使用该信号线; DAT0-3:在 SDIO 模式下,它们均为数据线,传输读写数据, SD NAND可将 D0 拉低表 示忙状态; 在 SPI 模式下, DAT0 与 SPI 总线的 MISO 信号相连, SD NAND通过该信号线向主机发送数据或响应, DAT3 与总线的 CS 信号相连, SPI 主机通过该信号线选择要通讯的 SD NAND。 VDD、VSS1、VSS2:电源和地信号。 ③ 工作模式 SD NAND有两种工作模式:SDIO 模式与SPI模式 在 SDIO 模式下,SD NAND共使用到 CLK、CMD、DAT 6根信号线;SDIO 总线与多个 SD NAND连接时,可以共用 CLK 时钟信号线,对于 CMD、DAT 信号线,每个 SD NAND都要独立连接。SDIO 总线与 SD 卡连接方式,具体见下图。此模式使用IO引脚多,但传输速度高。 在 SPI 模式下,SD NAND共使用到 CS(DAT )、CLK、MISO(DAT )、MOSI(CMD) 4根信号线;SPI 总线与多个 SD NAND连接时,除 CS 片选信号线不可共用外,其他信号均可公用。SPI 总线与 SD NAND连方式,具体见下图。此模式使用IO引脚少,但传输速度慢。 ④ 内部寄存器 SD NAND总共有 8 个寄存器,用于设定或表示 SD NAND信息,寄存器描述具体见下图。 这些寄存器只能通过对应的命令访问,对 SD NAND的控制操作是通过命令来执行的, SD NAND定义了 64 个命令(部分命令不支持 SPI 模式) ,每个命令都有特殊意义,可以实现某一特定功能, SD NAND接收到命令后,根据命令要求对 SD NAND内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现 SD NAND的控制以及读写操作。 内部寄存器就不展开讲了,我们用FPGA实现读写测试也不需要了解那么多寄存器。 5、SD NAND的控制时序 ① 命令与读写时序 SD NAND的通信是基于命令和数据传输的。通讯由一个起始位(“0”)开始,由一个停止位(“1”)终止。SD NAND通信一般是主机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如有需要会有数据(Data)传输参与。SD NAND的基本交互是命令与响应交互, 见下图: SD NAND数据是以块(Block)形式传输的,SDHC 规格数据块长度一般为 512 字节,数据可以从主机到芯片,也可以是从芯片到主机。数据块需要 CRC 位来保证数据传输成功,CRC 位由 SD NAND系统硬件生成。单个数据块的读、写时序分别见下2图: 读写操作都是由主机发起的,主机发送不同的命令表示读或写, SD NAND接收到命令后先针对命令返回响应。在读操作中, SD NAND返回一个数据块,数据块中包含 CRC校验码;在写操作中,主机接收到命令响应后需要先发送一个标志(TOKEN)然后紧跟一个要写入的数据块,SD NAND接收完数据块后会返回一个数据响应及忙碌标志,当 SD NAND把接收到的数据写入到内部存储单元完成后,会停止发送忙碌标志,主机确认 SD NAND空闲后,才可以发送下一个命令。 SD NAND数据传输支持单块和多块读写,它们分别对应不同的操作命令, 结束多块读写时需要使用命令来停止操作。 ② 命令格式 SD NAND命令由主机发出,命令格式固定为 48bit,通过 CMD 信号线连续传输。SD NAND命令格式,具体见下图: 起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为 0,终止位为 1。 传输标志:用于区分传输方向,该位为 1 时表示命令,方向为主机传输到 SD NAND,该位为 0 时表示响应,方向为 SD NAND传输到主机。命令主体内容包括命令、地址信息/参数和 CRC 校验三个部分。 命令号:它固定占用 6bit,所以总共有 64 个命令,每个命令都有特定的用途,部分命令不适用于 SPI 总线,或不适用于 SD NAND操作,只是专门用于 MMC 卡或者 SD I/O卡。 地址/参数:每个命令有 32bit 地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这 32bit 用于指定参数,而寻址命令这 32bit 用于指定目标 SD NAND的地址, 当使用 SDIO 驱动多个 SD NAND时,通过地址信息区分控制不同的SD NAND,使用 SPI 总线驱动时,通过片选引脚来选择不同的SD NAND,所以使用这些命令时地址可填充任意值。 CRC7 校验:长度为 7bit 的校验位用于验证命令传输内容正确性,如果发生外部干扰 导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败, SD NAND不执行命令。 使用 SDIO 驱动时,命令中必须包含正确的 CRC7 校验值;而使用 SPI 驱动时,命令中的 CRC7 校验默认是关闭的,即这 CRC7 校验位中可以写入任意值而不影响通讯,仅在发送 CMD0 命令时需要强制带标准的 CRC7 校验。 ③ 命令内容 SD NAND命令可分为标准命令 (如 CMD0)和特殊应用命令 (如 ACMD41),其中特殊应用命令只有在先写入 CMD55 命令后才能被识别。按照指令类型又可将 SD NAND命令分为基本命令、数据块写命令、数据块读命令、擦除命令等 12 种(class0 ~ class11)。 本次实验将会使用 SPI 模式实现 SD NAND的数据读写操作,所以接下来只列举 SPI 模式下常用的 SD 卡命令,具体见下表: SPI 模式下,上述各命令中,命令 CMD0 的 CRC7 校验为固定的 1001_010;命令CMD8 的 CRC7 校验为固定的 1000_011;其他命令的 CRC7 校验在 SPI 模式下无作用,赋值为 1111_111 即可。 ④ 响应格式 当 SD NAND接收到命令时,会向 SD NAND回传命令响应。SD NAND有 5 种类型的命令响应:R1、R1b、R2、R3、R7;SDIO NAND还支持另外两种命令响应:R4、R5。下文只对部分响应做介绍。 R1 响应格式,具体见下图: in idle state:当该位为 1 时,表示 SD NAND处于空闲状态 erase reset:因为接收到无需擦除操作的命令,擦除操作被复位 illegal command:接收到一个无效的命令代码 com crc error:接收到的上一个命令的 CRC 校验错误 erase sequence error:擦除命令的控制顺序错误 address error:读写的数据地址不对齐(数据地址需要按块大小对齐) parameter error:命令的参数错误 R3 响应格式,具体见下图: R3 响应包括 5 个字节,首先返回的第 1 个字节内容为 R1,剩下的其余字节为 OCR( Operation Conditions Register, 操作条件寄存器)寄存器的内容。 R7 响应格式,具体见下图: R7 响应包括 5 个字节,首先返回的第 1 个字节内容为 R1,R7 位为命令版本,R7 为保留位,R7 为反馈的电压范围,最后 1 个字节为检查模式。 6、FPGA实现SD NAND读写 接下来编写FPGA的Verilog代码实现向SD NAND的指定扇区中写入512个字节的数据,写完后将数据读出,并通过指示灯的方式验证数据是否被正确读写。需要说明的是,后文的读写操作均采用SPI模式。 6.1、设计思路 ① 上电时序 SD NAND同其他的许多芯片一样上电后需要保持一定的时间以便维持电压稳定,这个时间通常是74+个时钟周期,一般实际应用中可设置参数为74~100。只有经过这个过渡时间后,才可以执行后续的SD NAND初始化操作。 ② 初始化时序 SD NAND在正常读写操作之前,必须先对SD NAND进行初始化,使其工作在预期的工作模式。初始化流程如下: 1.SD NAND完成上电后,主机FPGA先对从机SD NAND发送至少74个以上的同步时钟,在上电同步期间,片选CS引脚和MOSI引脚必须为高电平(MOSI引脚除发送命令或数据外,其余时刻都为高电平); 2.拉低片选CS引脚,发送命令CMD0(0x40)复位SD NAND,命令发送完成后等待SD NAND返回响应数据; 3.SD NAND返回响应数据后,先等待8个时钟周期再拉高片选CS信号,此时判断返回的响应数据。如果返回的数据为复位完成信号0x01,在接收返回信息期间片选CS为低电平, 此时SD NAND进入SPI模式,并开始进行下一步,如果返回的值为其它值,则重新执行第2步; 4.拉低片选CS引脚,发送命令CMD8(0x48)查询SD NAND的版本号,只有SD2.0版本才支持此命令,命令发送完成后等待SD NAND返回响应数据; 5.SD NAND返回响应数据后,先等待8个时钟周期再拉高片选CS信号,此时判断返回的响应数据。如果返回的电压范围为4’b0001即2.7V~3.6V,说明2.0版本,进行下一步,否则重新执行第4步; 6.拉低片选CS引脚,发送命令CMD55(0x77)告诉SD NAND下一次发送的命令是应用相关命令,命令发送完成后等待SD NAND返回响应数据; 7.SD NAND返回响应数据后,先等待8个时钟周期再拉高片选CS信号,此时判断返回的响应数据。如果返回的数据为空闲信号0x01,开始进行下一步,否则重新执行第6步。 8.拉低片选CS引脚,发送命令ACMD41(0x69)查询SD NAND是否初始化完成,命令发送完成后等待SD NAND返回响应数据; 9.SD NAND返回响应数据后,先等待8个时钟周期再拉高片选CS信号,此时判断返回的响应数据。如果返回的数据为0x00,此时初始化完成,否则重新执行第6步。 ③ 写操作时序 至此,SD NAND完成了复位以及初始化操作,进入到SPI模式的读写操作。SD NAND读写一次的数据量必须为512字节的整数倍,即对SD NAND读写操作的最少数据量为512 个字节。我们可以通过命令CMD16来配置单次读写操作的数据长度,以使每次读写的数据量为 (n*512)个字节(n≥1),本次SD NAND的读写操作使用默认配置,即单次读写操作的数据量为512个字节。 SD NAND的写操作时序图如下图所示: 拉低片选信号 CS_N,向 SD NAND写入命令 CMD24,命令号为 0x58,携带参数为 4字节的 SD NAND写扇区地址,CRC 校验字节未使用直接写入 0xFF,命令发送完成后 等待 SD NAND返回响应数据 若 SD NAND返回正确响应数据 R1 为 0x00,等待 8 个时钟周期,向 SD NAND写入令牌0xFE,紧随其后写入 512 个字节的数据 数据发送完成后,再向 SD NAND写入 2 个字节的 CRC 校验字节。SPI 模式下不对数据进行 CRC 校验,直接写入两个字节的 0xFF 校验数据发送完成后, SD NAND会有响应数据返回,随后 SD NAND将 Miso 信号拉低进入写忙状态 MISO 信号再次拉高后 SD NAND退出写忙状态,等待 8 个时钟周期后拉高片选信号,SD NAND数据写操作完成,可以执行其它操作 ④ 读操作时序 SD NAND的读操作时序图如下图所示: 1.拉低片选信号 CS_N, 向 SD NAND写入命令 CMD17,命令号为 0x51,携带参数为 4字节的 SD NAND读扇区地址,CRC 校验字节未使用直接写入 0xFF,命令发送完成后 等待 SD NAND返回响应数据 2.若 SD NAND返回正确响应数据 R1 为 0x00,以 SD NAND返回的数据头 0xFE 为标志,接收自 SD NAND读出的 512 字节数据和 2 字节的 CRC 校验字节 3.解析到数据头 0xFE 后,接下来接收 SD NAND返回的 512 个字节的数据 4.数据解析完成后,接下来接收2个字节的 CRC 校验值。 由于 SPI 模式下不对数据进行 CRC 校验,可直接忽略这两个字节 5.CRC 校验字节接收完毕,等待 8 个时钟周期,拉高片选信号 CS_N,一次数据读操作完成 ⑤ 程序设计 通过前面介绍的SD NAND初始化、写操作以及读操作可知,SD NAND的这3个操作是相互独立且不能同时进行的,因此我们可以将SD NAND的初始化、写操作以及读操作分别划分为3个独立的模块,最后将这三个模块例化在SD NAND的控制器模块中,便于在其它工程项目中使用。 下图是系统框图,PLL时钟模块(PLL)为各个模块提供驱动时钟,SD NAND测试数据产生模块产生测试数据写入SD NAND,写完后从SD NAND中读出数据,最终读写测试结果由LED显示模块通过控制LED灯的显示状态来指示。 顶层模块:顶层模块完成了对其它四个模块的例化,SD NAND测试数据产生模块产生的开始写入信号及数据连接至SD NAND控制器模块,数据写完后从SD NAND控制器中读出数据, 并验证数据的正确性,将验证的结果连接至LED显示模块。 PLL时钟模块:PLL时钟模块通过调用锁相环(PLL)IP核来实现,总共输出2个时钟,频率都是50Mhz,但两个时钟相位相差180度。我们知道,SD卡的SPI通信模式为CPOL=1, CPHA=1;即SPI_CLK在空闲时为高电平,数据发送是在时钟的第一个边沿,也就是SPI_CLK由高 电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。为了在程序代码中统 一使用上升沿,我们使用两个相位相差180度的时钟来对SD NAND进行操作。 SD NAND测试数据产生模块:SD NAND测试数据产生模块产生的开始写入信号和数据写入SD NAND控制器模块中,数据写完后从SD NAND控制器中读出数据,并验证数据的正确性,将验证的结果发送给LED显示模块。 SD NAND控制器模块:SD NAND控制器模块例化了SD NAND初始化模块、 SD NAND写数据模块和SD NAND读数据模块。SD NAND初始化模块完成对SD NAND的上电初始化操作;SD NAND写数据模块完成对SD NAND的写操作;SD NAND读数据模块完成对SD NAND的读操作。 由于这三个模块都操作了SD NAND的引脚信号,且这三个模块在同一时间内不会同时操作,所以此模块实现了对其它三个模块的例化以及选择SD NAND的引脚连接至其中某一个模块。 LED显示模块:LED显示模块将SD NAND测试数据产生模块输出的验证结果值, 通过控制LED灯的显示状态来指示。 SD NAND控制器部分代码如下: module sd_ctrl_top( input clk_ref , //时钟信号 input clk_ref_180deg, //时钟信号,与clk_ref相位相差180度 input rst_n , //复位信号,低电平有效 //SD卡接口 input sd_miso , //SD卡SPI串行输入数据信号 output sd_clk , //SD卡SPI时钟信号 output reg sd_cs , //SD卡SPI片选信号 output reg sd_mosi , //SD卡SPI串行输出数据信号 //用户写SD卡接口 input wr_start_en , //开始写SD卡数据信号 input wr_sec_addr , //写数据扇区地址 input wr_data , //写数据 output wr_busy , //写数据忙信号 output wr_req , //写数据请求信号 //用户读SD卡接口 input rd_start_en , //开始读SD卡数据信号 input rd_sec_addr , //读数据扇区地址 output rd_busy , //读数据忙信号 output rd_val_en , //读数据有效信号 output rd_val_data , //读数据 output sd_init_done //SD卡初始化完成信号 ); //wire define wire init_sd_clk ; //初始化SD卡时的低速时钟 wire init_sd_cs ; //初始化模块SD片选信号 wire init_sd_mosi ; //初始化模块SD数据输出信号 wire wr_sd_cs ; //写数据模块SD片选信号 wire wr_sd_mosi ; //写数据模块SD数据输出信号 wire rd_sd_cs ; //读数据模块SD片选信号 wire rd_sd_mosi ; //读数据模块SD数据输出信号 //***************************************************** //** main code //***************************************************** //SD卡的SPI_CLK assign sd_clk = (sd_init_done==1'b0) ? init_sd_clk : clk_ref_180deg; //SD卡接口信号选择 always @(*) begin //SD卡初始化完成之前,端口信号和初始化模块信号相连 if(sd_init_done == 1'b0) begin sd_cs = init_sd_cs; sd_mosi = init_sd_mosi; end else if(wr_busy) begin sd_cs = wr_sd_cs; sd_mosi = wr_sd_mosi; end else if(rd_busy) begin sd_cs = rd_sd_cs; sd_mosi = rd_sd_mosi; end else begin sd_cs = 1'b1; sd_mosi = 1'b1; end end //SD卡初始化 sd_init u_sd_init( .clk_ref (clk_ref), .rst_n (rst_n), .sd_miso (sd_miso), .sd_clk (init_sd_clk), .sd_cs (init_sd_cs), .sd_mosi (init_sd_mosi), .sd_init_done (sd_init_done) ); //SD卡写数据 sd_write u_sd_write( .clk_ref (clk_ref), .clk_ref_180deg (clk_ref_180deg), .rst_n (rst_n), .sd_miso (sd_miso), .sd_cs (wr_sd_cs), .sd_mosi (wr_sd_mosi), //SD卡初始化完成之后响应写操作 .wr_start_en (wr_start_en & sd_init_done), .wr_sec_addr (wr_sec_addr), .wr_data (wr_data), .wr_busy (wr_busy), .wr_req (wr_req) ); //SD卡读数据 sd_read u_sd_read( .clk_ref (clk_ref), .clk_ref_180deg (clk_ref_180deg), .rst_n (rst_n), .sd_miso (sd_miso), .sd_cs (rd_sd_cs), .sd_mosi (rd_sd_mosi), //SD卡初始化完成之后响应读操作 .rd_start_en (rd_start_en & sd_init_done), .rd_sec_addr (rd_sec_addr), .rd_busy (rd_busy), .rd_val_en (rd_val_en), .rd_val_data (rd_val_data) ); endmodule SD NAND控制器模块输出的sd_init_done(SD NAND初始化完成信号)连接至SD NAND测试数据产生模块,只有在SD NAND初始化完成之后(sd_init_done为高电平),才能对SD NAND进行读写测试。SD NAND控制器模块将SD NAND的初始化以及读写操作封装成方便用户调用的接口,SD NAND测试数据产生模块只需对SD NAND控制器模块的用户接口进行操作即可完成对SD NAND的读写操作。 6.2、仿真结果 一般的测试中,我们都需要先进行仿真来观察时序等测试行为。此次实验由于找不到好的SD NAND的Verilog模型,所以仿真测试略。 6.3、实验结果 上文已经说了常用的相机中的TF卡与工业级的SD NAND(贴片式T卡)的区别,所以本次实验我选用的是深圳雷龙公司的一款SD NAND产品----CSNP32GCR01-AOW。 这是一家专业做存储产品的公司,NAND Flash是其主要产品。 该公司专注NAND Flash设计研发13年,在这一块可以说是相当专业。如果你对NAND Flash仍有疑惑的问题,或者你想在你的设计中使用NAND Flash产品,都可以直接联系: 深圳市雷龙发展有限公司 实验结果其实没什么好看的,LED灯常量表明说明从SD NAND读出的512个字节(256个16位数据) 与写入的数据相同,SD NAND读写测试程序下载验证成功。 PS:有个小细节可以说下,雷龙公司的SD NAND开发板还是蛮用心的,封装都是标准的Micro SD的封装,只要你的FPGA开发板上有SD卡座,就可以直接插上使用了,即插即用十分方便,有心了。 ———————————————— 【本文转载自CSDN,作者:孤独的单刀】   亲爱的卡友们,如果看完文章之后还是有疑惑或不懂的地方,请联系我们,自己去理解或猜答案是件很累的事,请把最麻烦的事情交给我们来处理,术业有专攻,闻道有先后, 深圳市雷龙发展 专注存储行业13年,专业提供小容量存储解决方案。
  • 2022-12-8 17:16
    0 个评论
    七.SDIO外设结构体 其实前面关于SDIO寄存器的讲解已经比较详细了,这里再借助于关于SDIO结构体再进行总结一遍。 标准库函数对 SDIO 外设建立了三个初始化结构体,分别为 SDIO 初始化结构体SDIO_InitTypeDef、SDIO 命令初始化结构体 SDIO_CmdInitTypeDef 和 SDIO 数据初始化结 构体 SDIO_DataInitTypeDef。这些结构体成员用于设置 SDIO 工作环境参数,并由 SDIO 相应初始化配置函数或功能函数调用,这些参数将会被写入到 SDIO 相应的寄存器,达到配置 SDIO 工作环境的目的。 至于为什么需要一个命令结构体与数据结构体,就是为了方便我们配置SDIO关于寄存器位,因为发送命令或者数据需要很多参数配置。 1.SDIO初始化结构体 SDIO 初始化结构体用于配置 SDIO 基本工作环境,比如时钟分频、时钟沿、数据宽度等等。它被 SDIO_Init 函数使用。 1) SDIO_ClockEdge:主时钟 SDIOCLK 产生 CLK 引脚时钟有效沿选择,可选上升沿或下降沿。 2) SDIO_ClockBypass:时钟分频旁路使用,可选使能或禁用,如果使能旁路,SDIOCLK (72MHZ )直接驱动 CLK 线输出时钟(不满足最高25HZ的要求),如果禁用,使用 SDIO_CLKCR 寄存器的 CLKDIV 位值分频 SDIOCLK,然后输出到 CLK 线。一般选择禁用时钟分频旁路。 3) SDIO_ClockPowerSave:节能模式选择,可选使能或禁用,它设定 SDIO_CLKCR 寄存器的 PWRSAV 位的值。如果使能节能模式,CLK 线只有在总线激活时才有时钟输出;如果禁用节能模式,始终使能 CLK 线输出时钟。 4) SDIO_BusWide:数据线宽度选择,可选 1 位数据总线、4 位数据总线或 8 为数据总线,系统默认使用 1 位数据总线,操作 SD 卡时在数据传输模式下一般选择 4 位数据总线。它设定 SDIO_CLKCR 寄存器的 WIDBUS 位的值。 5) SDIO_HardwareFlowControl:硬件流控制选择,可选使能或禁用,它设定SDIO_CLKCR 寄存器的 HWFC_EN 位的值。硬件流控制功能可以避免 FIFO 发送上溢和下溢错误。 6) SDIO_ClockDiv:时钟分频系数,它设定 SDIO_CLKCR 寄存器的 CLKDIV 位的值,设置 SDIOCLK 与 CLK 线输出时钟分频系数: CLK 线时钟频率=SDIOCLK/( )。 2.SDIO命令初始化结构体 1) SDIO_Argument:作为命令的一部分发送到卡的命令参数,它设定 SDIO 参数寄存器(SDIO_ARG)的值。 (2) SDIO_CmdIndex:命令号选择,它设定 SDIO 命令寄存器(SDIO_CMD)的 CMDINDEX位的值。 (3) SDIO_Response:响应类型,SDIO 定义两个响应类型:长响应和短响应。根据命令号选择对应的响应类型。SDIO 定义了四个 32 位的 SDIO 响应寄存器(SDIO_RESPx,x=1…4),短响应只用SDIO_RESP1,长响应使用4个(SDIO_RESPx,x=1…4)。 1)命令响应寄存器 2)SDIO响应寄存器1~4 4) SDIO_Wait:等待类型选择,有三种状态可选,一种是无等待状态,超时检测功能启动,一种是等待中断,另外一种是等待传输完成。 5) SDIO_CPSM:命令路径状态机控制,可选使能或禁用 CPSM。它设定 SDIO_CMD 寄存器的 CPSMEN 位的值 只要我们使能的了命令状态机,则下面发送命令和接收响应的过程中的状态转换就不用我们管了 当我们要发送命令,我们只需要配置这个命令初始化结构体的成员,然后调用下图这个函数,则我们配置的参数写入对应的寄存器位中。 3.SDIO数据初始化结构体 1) SDIO_DataTimeOut:设置数据传输以卡总线时钟周期表示的超时周期,它设定 SDIO数据定时器寄存器(SDIO_DTIMER)的值。在 DPSM 进入 Wait_R 或繁忙状态后开始递减,直到 0 还处于以上两种状态则将超时状态标志置 1(详情前面的数据通道小节)。 2) SDIO_DataLength:设置传输数据长度。 3) SDIO_DataBlockSize:设置数据块大小,有多种尺寸可选,不同命令要求的数据块可能不同。 4) SDIO_TransferDir:数据传输方向,可选从主机到卡的写操作,或从卡到主机的读操作。 5) SDIO_TransferMode:数据传输模式,可选数据块或数据流模式。对于 SD 卡操作使用数据块类型。 6) SDIO_DPSM:数据路径状态机控制,可选使能或禁用 DPSM。它设定 SDIO_DCTRL寄存器的 DTEN 位的值。要实现数据传输都必须使能 SDIO_DPSM。 与命令一样使能了数据路径状态机,就不用高那么多麻烦的状态转换了 八.SD卡读写测试实验 我们平时使用的SD 卡都是已经包含有文件系统的,一般不会使用本实验的操作方式读写 SD 卡,但是对学习SD卡的驱动原理非常重要!!! 本实验是进行 SD卡最底层的数据读写操作,直接使用 SDIO 对 SD 卡进行读写,会损坏 SD 卡的文件系统,导致数据丢失,所以做这个实验之前需要备份SD卡数据。 主要是学习SD卡的卡识别过程,以及数据传输工过程,其实就是完全依照前面的两个流程图来实现代码的。 卡识别模式流程图 数据传输流程图 1.硬件设计 原理图: 实物图: 我这里用的是CS创世的贴片式SD卡,也称之为SD NAND , 内部存储单元架构为SLC,适合存代码。直接上板时相比于拔插式SD卡在抗震和抗PIN氧化方面更有优势,对于缩小整板体积也有一定帮助。 详情请参考: 雷龙官网 2.代码讲解 先看主函数: SD_Terst函数: 我们主要讲解的就是SD卡的初始化 SD_Init()函数: /** *函数名:SD_Init *描述:初始化SD卡,使卡处于就绪状态(准备传输数据) *输入:无 *输出:-SD_ErrorSD卡错误代码 *成功时则为SD_OK *调用:外部调用 */SD_ErrorSD_Init(void){ /*重置SD_Error状态*/ SD_Errorerrorstatus=SD_OK; NVIC_Configuration(); /*SDIO外设底层引脚初始化*/ GPIO_Configuration(); /*对SDIO的所有寄存器进行复位*/ SDIO_DeInit(); /*上电并进行卡识别流程,确认卡的操作电压*/ errorstatus=SD_PowerON(); /*如果上电,识别不成功,返回“响应超时”错误*/ if(errorstatus!=SD_OK) { /*!
  • 2022-8-4 17:48
    3 次阅读|
    0 个评论
    SD NAND Flash简介!
         SD NAND Flash是一种特殊形式的NAND Flash,其内部有包含一个SD 控制器及NAND Flash。他的特点主要有封装小,使用方便的特点。目前市面上的SD NAND Flash的容量主要有1Gb,2Gb,4Gb等。封装形式是LGA-8。主要应用于玩具及音频耳机市场。   对于使用者来说,可以把它单纯的看做是一个SD(TF)卡,存储一些数据,图片或音频。也可以把它作为功能更强大的NAND Flash,免去您程序上做ECC校验及坏块管理的麻烦。 感兴趣的卡友,可免费申请样品:http://www.longsto.com/feedback/   很多产品虽然现在使用的是SD(TF)卡,但产品的设计者不希望用户能够更换这些卡,甚至会采用点胶等手段固定住卡,以防卡脱落。因为卡座和卡是通过卡扣固定的。一旦产品跌落,随之SD(TF)卡容易掉落,需要重新找回SD(TF)卡插入卡座。影响客户体验而且可能存在丢失的情况。即使点胶也无法保证SD(TF)卡不脱落。SD NAND Flash则可以认为是焊接在PCB板上T卡,不会出现跌落丢卡的情况,降低了产品的返修率。   另外有些主控芯片不支持并行接口的NAND Flash,但是需要用到1Gb,2Gb,4Gb的容量作为语音、数据信息的存储,或者主控芯片的参考驱动代码只提供了NAND Flash的基本驱动,并未提供ECC的校验及坏块管理部分。   这种情况下使用SD NAND Flash就非常合适,所有关于ECC校验及坏块管理的繁琐驱动都在SD NAND Flash内部进行了处理。主控芯片的驱动会相对简单,使用非常方便。当客户遇到上述问题时,可以使用SD NAND Flash让产品更稳定,更加易用。   亲爱的卡友们,如果看完文章之后还是有疑惑或不懂的地方,请联系我们,自己去理解或猜答案是件很累的事,请把最麻烦的事情交给我们来处理,术业有专攻,闻道有先后,深圳市雷龙发展专注存储行业13年,专业提供小容量存储解决方案。
相关资源
  • 所需E币: 4
    时间: 2020-1-4 12:08
    大小: 767.22KB
    上传者: wsu_w_hotmail.com
    详细介绍九芯电子的语音ic,它支持最大一G的TF卡,可以直接装16K的WAV格式音频,比32K的ADPCM音质还好。控制方式多样,完全可以满足客户的各种需求广州市九芯电子科技有限公司NV020-SD语音模块NV020SD系列语音模块数据手册VersionNumberReverseDateRemark业务电话:020-2232563615384492849网站:http://www.vic18.com广州市九芯电子科技有限公司NV020-SD语音模块1、产品概述NV020SD模块是一款可重复擦写语音内容的大容量存储类型的语音模块,可外挂最大容量为1GB的SD卡存储器。能加载WAV格式语音和AD4格式语音。NV020SD模块以NV020SD语音芯片为主控核心,具有MP3控制模式,按键一对一控制模式(3段语音跟5段语音两种),上电循环播放控制模式以及二线串口控制模式。控制模式是在芯片制样时设置的,在操作过程中不能切换各种控制模式,如需要使用哪种模式进行控制,可向我司订做。2、产品特征产品支持外挂最大1G容量的SD卡;支持播放4BitADPCM格式文件;自……
  • 所需E币: 5
    时间: 2019-12-24 11:05
    大小: 10.61KB
    上传者: 2iot
    SD卡,TF卡,手机卡座封装,有好几种型号,用前自已验证一下尺寸,对号入座哦……