tag 标签: TF卡nand

相关帖子
相关博文
  • 2024-11-13 15:27
    0 个评论
      前言:   随着国内市场对芯片的需求日益增加,国产中高端芯片在不断的占领国内市场甚至在国际市场都有一部分,越来越多的企业开始研究自己的芯片,这个芯片的种类繁多,功能性强大,也有一些芯片占有着很大的市场份额,有着不可取代的地位。   随着芯片的发展存储芯片的趋势也开始不甘落后,有着越来越多的新型的芯片问世,这里就要提起SD NAND芯片了,市面上主流的生产厂家就是雷龙。 SD NAND 的简单介绍:   什么是SD NAND?很简单顾名思义就是内部集成了SD卡或TF卡(这里有必要说明SD卡和TF卡除了大小不同,引脚不同之外驱动,功能等内容都是一样的使用SD协议)功能的NAND存储芯片。   当然,他和主流的存储芯片不太一样,它是遵循SD协议的芯片,下图就是SDNAND的引脚图。   下图是SD卡的引脚图。   仔细观察就不难发现他们的引脚功能相似,SD NAND芯片在引脚上遵循SD卡的协议, SD NAND可以理解为是一种可以直接焊接在PCB上的SD卡。   常见存储芯片的类别:   下面就要讨论关于常见存储芯片的主要用途作,和优缺点,在这里会从芯片的功能和实际使用情况来分析,如果只想了解SDNAND可以直接跳转到“SD NAND存储芯片”的目录中。   在这里会以存储芯片做比较,不和RAM存储器比较,以比较性能和使用环境,使用协议为主。   EEPROM存储芯片:   EEPROM存储芯片在1978年就诞生了,在这之前经过了ROM(只读存储器)EPROM(紫外线可擦除存储器)的演化,虽然现在不能成为主流的存储芯片,但是在存储一些简单的数据上还是可以看到它的身影,在单片机的开发上会对简单的数据进行存储。   这里就以AT24C256存储芯片来举例,下图是该芯片的内部结构图 。   可以看出主要是以IIC进行数据传输的(在主流的EEPROM市场中还有一小部分是以SPI作为数据传输的),引脚排列较少,价格较为便宜,但是他们的传输速度较慢,存储空间不是很大,但仍有很多的地方见到它的身影比如说主板的BIOS芯片,主要是在数据暂存,掉电保存重要数据等用途。要是和其他种类的存储芯片比较传输速度和存储空间很显然EEPROM就有些力不从心了。   NAND类存储芯片:   NAND Flash全名为Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),基于浮栅(Floating Gate)晶体管设计,通过浮栅来锁存电荷,这NAND存储芯片指的是使用这个存储结构的芯片,他们和EEPROM有不同的一点是存储数据量较大内部集成度较高,记住NAND并不是存储芯片的一种,而是芯片内部使用存储单元的结构(统称为NAND类存储芯片)。   NAND类存储芯片经常和FLASH联系在一起,或者可以说NAND是FLASH的一种,在实际应用中很常见,下图是SD卡简单化的内部结构。   SD卡存储单元是使用的FLASH,FLASH存储器一般会采用NAND的存储结构,NAND存储芯片有很多优点读写速度快,存储密度更高,擦写速度更快,使用寿命更长。   一般来说NAND存储芯片的连接通讯接口很多,比如SPI,IIC,多数据并行接口等,这个主要取决于它使用使用什么样的控制器来对它进行存储,另外NAND存储技术在国内已经很成熟了,在市场上使用的较为广泛,更是在硬件和PCB系统设计中成为了主流选择。   EMMC存储芯片:   说到NAND类存储芯片就要提到EMMC芯片了,虽说EMMC只是NAND类存储类的一种,但是EMMC芯片在PCB系统设计中却是一个拥有很强性能的芯片,主要是针对手机平板等微型内嵌存储芯片,从内部结构就可以看出有着更强大的控制器,有很多的EMMC都是采用NAND存储结构。   当然强大的传输速度需要很强大的处理器进行连接,因此在芯片的接口上就要比普通的存储芯片复杂很多,下面的这一张图是EMMC存储芯片的引脚图。   从引脚上看Power(供电)就需要两种不同的电压,数据传输DAT 端口至少需要8个端口,CMD负责控制,CLK引脚来提供时钟信号(最快的EMMC时钟信号可以达到200MHZ),这种存储器如果用性能一般点的单片机来控制会有点吃力,当然它通常是BGA封装,所使用的引脚是很多的。 EMMC 存储芯片无论是在传输速度上,在存储容量上,它的的性能都是很强大的,但同时需要很复杂的连接驱动才能使用,所以经常出现在一些较高端的电子产品上使用比如手机,平板,电脑等。   SD NAND存储芯片:   了解了EEPROM存储芯片和NAND芯片以及EMMC存储芯片他们都有各自的有点,比如说现在需要一款芯片是拥有较大的存储空间和较为简单的存储驱动什么样的芯片适合呢?答案是:SD NAND。   SD NAND有着很好的一点是拥有EEPROM那样的简单的外部布局,使无需通过复杂的连接完成存储功能,还拥有着EMMC的大容量存储空间,下图就是雷龙的CSNP4GCR01-AOW(SD NAND)芯片的内部结构图。   通过结构图可以看出内部主要是由SD NAND作为存储,在芯片的输入输出接口部分使用的引脚和SD卡使用的是相同的协议,控制原理基本大差不差,下图是SD卡的内部结构图,引脚相同,控制也相同。   SD NAND芯片使用的数据传输协议相对来说较为简单(和EMMC比起),存储空间较大(和EEPROM比起),或者理解为集成了EMMC和EEPROM的优点,但它的传输性能远不如EMMC那么快(这里根据EMMC协议主时钟最高200MHZ和SD协议主时钟最高50MHZ来定)。   因此SD NAND更适合用于一些用于并不是很复杂的设备开发中,比如单片机数据存取,简单的数据保存和一些轻量化的系统,针对一些掌上电脑,手机,平板等高智能化的产品还是觉得EMMC芯片更能符合这一类的环境。   SD卡测试:   下面就来使用XC7Z020芯片对SD卡进行读写TXT文本实验,就是SD卡而不是SD NAND具体原因在SD卡测试下面会说明,具体实验步骤如下。本次使用的是SD卡。   创建Vivado工程文件,选择对应的芯片型号和内容   本次实验使用的是FPGA内部自带的IP核和对应的硬件串口来实现,所以在IP核的配置中只使用DDR端口和内存端口,IP核其他的多余引脚全部删除。   上图是IP核设定的界面这个对应的SD接口,这个接口是开发板硬件连接决定的,本次实验使用的是SD0,同时还要使能串口外设。   同时不要忘记设定需要的DDR控制器,以便来使用,下一步就要保存生成数据文件。   已经生成好的数据文件要把设定好的导出后,然后就可以进行SDK开发了。   正在启动的SDK开发平台。   在SDK开发平台创建开发工程。   由于本次实验需要添加FATS文件系统,在SDK开发平台上没有默认自带该库函数,因此需要手动添加库文件。   点击左上角的Modify this BSP's Settings 按钮,添加库函数。   选择上图中的库函数,这个库函数是FAT系统库函数,里面包含很多的库函数完全够本次实验使用。   继续把use_lfn这个选项的值改成true,这个选项的作用是使能长文件名,这样就可以针对长文件名进行操作。   在库函数下有一个新加入的库函数这个就是本次实验使用的库。 /***************************** Include Files *********************************/ #include "xparameters.h"/* SDK generated parameters */ #include "xsdps.h"/* SD device driver */ #include "xil_printf.h" #include "ff.h" #include "xil_cache.h" #include "xplatform_info.h" /************************** Function Prototypes ******************************/ int FfsSdPolledExample(void); /************************** Variable Definitions *****************************/ static FIL fil;/* File object */ static FATFS fatfs; static char FileName = "Test.txt"; static char *SD_File; char DestinationAddress ; const char SourceAddress = "hello mizar !"; #define TEST 7 int main(void) { int Status; xil_printf("SD Polled File System Example Test \r\n"); Status = FfsSdPolledExample(); if (Status != XST_SUCCESS) { xil_printf("SD Polled File System Example Test failed \r\n"); return XST_FAILURE; } xil_printf("Successfully ran SD Polled File System Example Test \r\n"); return XST_SUCCESS; } int FfsSdPolledExample(void) { FRESULT Res; UINT NumBytesRead; UINT NumBytesWritten; u32 BuffCnt; BYTE work ; int FileSize = strlen(SourceAddress); TCHAR *Path = "0:/"; //初始化文件系统 Res = f_mount(&fatfs, Path, 0); if (Res != FR_OK) { return XST_FAILURE; } //格式化SD卡 Res = f_mkfs(Path, FM_FAT32, 0, work, sizeof work); if (Res != FR_OK) { return XST_FAILURE; } //打开一个文件,如果文件不存在,则创建一个文件,该文件的权限为可读写 SD_File = (char *)FileName; Res = f_open(&fil, SD_File, FA_CREATE_ALWAYS | FA_WRITE | FA_READ); if (Res) { return XST_FAILURE; } //指针指向文件开头 Res = f_lseek(&fil, 0); if (Res) { return XST_FAILURE; } //向文件中写入数据 Res = f_write(&fil, (const void*)SourceAddress, FileSize, &NumBytesWritten); if (Res) { return XST_FAILURE; } //指针指向文件开头 Res = f_lseek(&fil, 0); if (Res) { return XST_FAILURE; } //从SD卡中的文件读出数据 Res = f_read(&fil, (void*)DestinationAddress, FileSize, &NumBytesRead); if (Res) { return XST_FAILURE; } //比较写入的数据与读出的数据是否相同 for(BuffCnt = 0; BuffCnt < FileSize; BuffCnt++){ if(SourceAddress != DestinationAddress ){ return XST_FAILURE; } } //关闭文件 Res = f_close(&fil); if (Res) { return XST_FAILURE; } return XST_SUCCESS; }   以上是本次实验使用到的部分代码,里面包含了外设,标准的打印函数和SD卡控制器的功能,在程序中先进行格式化SD卡为FAT32格式。   数据上传到FPGA中创建SD卡内部内容。   提示该信息说明创建完成,这个数据是由串口发送的,下载完成就把SD卡通过读卡器连接在电脑上就可以查看刚才创建的文件了,   在SD卡下创建好的文件。   或许在这里会有疑问为什么用FPGA对SD卡进行测试而不是SD NAND进行测试呢?答案很简单就是驱动问题,如果把SD NAND进行和上面SD卡测试相同的实验会发现最后查看Test文件无法完成,因为SD卡在Windows系统上(包括SD卡的读卡器)它的驱动很完善有着很强大的能力,但是把SD NAND芯片单独放到该体统中会显得有一些缺点,但是就并不能否定SD NAND在其他硬件比如单片机中的优点。   像刚才我说的如果在Windows系统中直接拿SD卡和SD NAND来比较性能就有点太欺负人了,因为在驱动层面有着很大的不同,所以说明SD NAND存储芯片要想做U盘就需要很完善的驱动才能进行,因此更适合在嵌入式单片机,FPGA内部程序开发等。   总结:   总的来说SD NAND是内部集成了SD卡协议的芯片,有着和SD卡相同的功能,在实际使用的时候使用的正是SD卡的协议,SD NAND可以焊接在线路板上完成一体化设计,建议使用在并不是需要强大性能的处理器上作为系统存储,因为作为强大系统的存储使用EMMC较好,SD NAND存储芯片多数使用在较为轻量化的系统中。 本次实验使用的是雷龙CSNP32GCR01和 CSNP4GCR01 芯片进行测试的,建议使用在嵌入式系统开发。
  • 热度 4
    2024-3-7 18:04
    476 次阅读|
    0 个评论
    前言 NAND Flash 和 NOR Flash是现在市场上两种主要的闪存技术。Intel于1988年首先开发出 NOR Flash 技术,彻底改变了原先由 EPROM 和 EEPROM 一统天下的局面。紧接着,1989年,东芝公司发表了 NAND Flash 结构,后者的单元电路尺寸几乎只是 NOR 器件的一半,可以在给定的芯片尺寸内提供更高的容量,也就相应地降低了价格。 1.NAND Flash ROM NAND Flash ROM 应该是目前最热门的存储芯片了。因为我们生活中经常使用的电子产品都会涉及到它。比如你买手机,肯定会考虑64GB,还是256GB?买笔记本是买256GB,还是512GB容量的硬盘呢?(目前电脑大部分采用了基于 NAND Flash 产品的固态硬盘)。 2.NOR Flash ROM NOR Flash ROM 的特点是以字节为单位随机存取。这样,应用程序可以直接在 Flash ROM 中执行,不必再把程序代码预先读到 RAM 中。NOR Flash ROM 的接口简单,与通常的扩展存储器一样,可以直接连接到处理器的外围总线上。 与 NOR Flash ROM 相比, NAND Flash ROM 以页(行)为单位随机存取,在容量、使用寿命和成本方面有较大优势。但是它的读出速度稍慢,编程较为复杂,因此大多作为数据存储器使用。嵌入式产品中包括数码相机、MP3 随身听记忆卡、体积小巧的U盘等均采用 NAND Flash ROM 。 在存储结构上,NAND Flash 内部采用非线性宏单元模式,全部存储单元被划分为若干个块(类似于硬盘的,一般为8 KB),这也是擦除操作的基本单位。进而,每个块又分为若干个大小为512 B的页,每页的存储容量与硬盘每个扇区的容量相同。也就是说,每页都有512条位线,每条位线连接一个存储元。此时,要修改 NAND 芯片中一个字节,就必须重写整个数据块。当Flash 存储器的容量不同时,其块数量以及组成块的页的数量都将不同。相应地,地址信息包括了列地址、块地址以及相应的页面地址。这些地址通过8位总线分组传输,需要多个时钟周期。当容量增大时,地址信息增加,那么就需要占用更多的寻址周期,寻址时间也就越长。这导致NAND Flash的地址传输开销大,因此并不适合于频繁、小数据量访问的应用。 相比较而言,NAND 型 Flash 存储器具有更高的存储密度、更快的写人速度、更低的价格以及更好的擦写耐用性等优点,非常适用于大量数据的存储。但由于NAND Flash的接口和操作都相对复杂,位交换操作频繁,因此通常还要采用错误探测/错误纠正(EDC/ECC)算法来保护关键性数据。 例如深圳雷龙有限公司的 CSNP32GCR01-AOW 芯片。 一.免驱动使用。SD NAND内置了针对NAND Flash的坏块管理,平均读写,动态和静态的EDC/ECC等算法。 二.性能更稳定。由于NAND Flash内部是先擦后写机制,如果软件处理不当,在突然掉电的时候就会导致数据丢失。而SD NAND内部自带的垃圾回收等机制可以很好的规避这个问题。因此CS创世的二代产品才会通过10K次的随机掉电测试。 三.尺寸更小。目前SD NAND 是68mm 大小,8个pin脚,相比Raw NAND的1220mm大小,48个pin脚,采用SD NAND可以做出更小巧的产品,而且也能节省CPU宝贵的GPIO口(这点对于MCU单片机来说更是重要) 四.SD NAND可选容量更多。目前有128MB/512MB/4GB容量。而SLC 的Raw NAND 主流容量128MB,512MB已经少见,供货周期也很长;单颗4GB的Raw NAND基本都是MLC或者TLC NAND的晶圆,管理起来更复杂。 不用写驱动程序自带坏块管理的 NAND Flash(贴片式TF卡),尺寸小巧,简单易用,兼容性强,稳定可靠,固件可定制,LGA-8 封装,标准SDIO接口,兼容SPI,兼容拔插式TF卡/SD卡,可替代普通 TF卡/SD 卡,尺寸 6.2x8mm ,内置平均读写算法,通过1万次随机掉电测试耐高低温,机贴手贴都非常方便,速度级别Class10(读取速度 23.5MB/S 写入速度 12.3MB/S )标准的 SD2.0 协议普通的SD卡可直接驱动,支持TF卡启动的 SOC 都可以用 SD NAND。 SD NAND原理图如下:
  • 2023-11-23 17:42
    0 个评论
    文章目录 前言 传统SD卡和可贴片SD卡 传统SD卡 可贴片SD卡 实际使用 总结 前言 随着目前时代的快速发展,即使是使用MCU的项目上也经常有大数据存储的需求。可以看到经常有小伙伴这样提问: 大家好,请问有没有SD卡芯片,可以直接焊接到PCB板上的。 项目需要保存900M以上字节,nand flash 比较贵。或者有什么便宜的存储芯片提供。谢谢! 传统做法无非如下几种: 用eMMC芯片,和SD接口基本兼容,细节有区别。一般的操作系统能支持。 东芝还是谁有焊接的嵌入式SD模块,贵。 做TF卡的封装,直接上锡人工焊死。 其实还有一种选择就是可 贴片SD卡 。 传统SD卡和可贴片SD卡传统SD卡 相对于可贴片SD卡,传统SD卡存在一些劣势,包括: 尺寸和体积:传统SD卡相对较大,尺寸较大,占据更多的空间。这在某些紧凑型设备或嵌入式系统中可能会造成问题,因为可贴片SD卡的尺寸更小,更适合于空间受限的应用。 插拔耐久性:传统SD卡需要频繁插拔使用,这可能会导致卡槽和插口的磨损和腐蚀。长期使用后,可能会出现接触不良、断开连接或读写错误的问题。而可贴片SD卡由于直接焊接在PCB上,没有插拔操作,因此在插拔耐久性方面更有优势。 抗震抗振性能:传统SD卡的连接方式是通过卡槽和插口实现的,这种连接方式对于抗震抗振能力较差。在某些震动频繁的应用场景下,传统SD卡可能会出现连接不稳定或数据丢失的问题。而可贴片SD卡由于直接焊接在PCB上,具有更好的抗震抗振性能。 物理保护:传统SD卡的外部没有额外的保护措施,如防水、防尘等功能。在某些恶劣环境中使用时,传统SD卡可能会受到外界因素的影响,导致数据损坏或设备故障。而一些可贴片SD卡提供了防水、防尘和抗静电等功能,以增加物理保护。 传统SD卡和可贴片SD卡在功能和性能上并没有本质的区别,只是封装形式不同。选择哪种类型的SD卡取决于具体的应用需求和设备限制。对于空间受限、插拔频繁或对抗震抗振性能要求较高的场景,可贴片SD卡可能更适合。而对于一般应用,传统SD卡仍然是一种可靠的存储介质。 可贴片SD卡 可贴片SD卡是一种集成电路封装形式的SD(Secure Digital)存储卡。与传统的SD卡相比,可贴片SD卡采用了更为紧凑的封装形式,使其更适合于嵌入式系统和紧凑型设备的应用。 以下是可贴片SD卡的特点和优势: 封装形式:可贴片SD卡采用了表面贴装技术(Surface Mount Technology,SMT)封装,将SD卡的芯片和连接器集成在一个紧凑的封装中,没有外部插口。这种封装形式使得可贴片SD卡可以直接焊接在PCB(Printed Circuit Board)上,节省空间并提高可靠性。 尺寸小巧:可贴片SD卡的尺寸通常比传统的SD卡更小,因此适用于那些对空间要求严格的设备,如嵌入式系统、便携式设备和小型电子产品等。 抗震抗振动:由于可贴片SD卡直接焊接在PCB上,没有外部插口,因此具有更好的抗震抗振动性能。这使得它更适合于应对恶劣环境和振动频繁的应用场景。 可靠性:可贴片SD卡的焊接连接更牢固,减少了插拔引起的接触不良和断开的风险,提高了存储数据的可靠性和稳定性。 实际使用 前主流的存储芯片大致可以分为NOR Flash和 NAND Flash 。NOR Flash容量比较小,所以一般项目对于容量有一定要求的话(512M起步),就会用采用NAND Flash。 一般从成本考虑,多会使用裸的NAND FLASH进行贴片。随着也会带来几个问题: 第一,笔者在项目中经常遇到NAND Flash的坏块问题,即使让厂商增加了出厂检测,仍会有较高的不良率,所以必须要进行坏块管理。 第二,不同品牌之间的NAND Flash,由于Page,Block大小不同,时序不同等。都需要嵌入式工程师重新调试驱动,经常遇到替换供应商后重新添加、修改驱动的问题,费时费力。 笔者所在项目需要再NAND FLASH中存储图片 语音数据,经常因为坏块问题需要去工厂解决问题,编写坏块管理,甚至手动编写平均读写算法……非常的麻烦。之前没有了解到国产有非常优秀的贴片式SD卡产品——雷龙。 自带SD转接测试板,方便在demo阶段直接使用SD卡接口测试。 兼容无压力,在电脑上也可以免驱直接读写,非常方便。 SD NAND 就是这样一款产品。简单来说它的架构如下图。内部使用寿命最长、性能最稳定的SLC NAND Flash晶圆,擦写次数可以达到10万次。另外,内置了特定的Flash控制器和Firmware,硬件对外采用最为通用的SD接口。 完美兼容了基本所有的项目,尺寸小巧,对于开发板甚至核心板这种对于尺寸要求很高的PCB都可以降低成本! SD NAND内置坏块管理,平均读写,动态和静态的EDC/ECC算法等等,除了让产品的质量更稳定,更好的延长寿命,更能减少CPU的负荷。让后续针对NAND Flash的操作,都可以交给SD NAND,CPU可以不用再管了。领导再也不用担心我的NAND Flash驱动了。 总结 实际使用下来感觉非常好,推荐大家在项目初期就考虑使用雷龙的NAND FLASH,可以节约大量硬件成本和人工成本。有兴趣的伙伴,可以随时联系雷龙官方客服。
  • 热度 13
    2023-4-27 17:59
    529 次阅读|
    0 个评论
    目的 验证基于SD NAND卡在正点原子STM32精英V2开发板上的兼容效果 实验材料 正点原子STM32精英V2开发板 TF 卡一片 SD NAND卡一片 实验步骤 1、打开例程【正点原子】精英STM32F103开发板 V2-资料盘(A盘)\4,程序源码\3,扩展例程\4,LVGL例程\LVGL综合实验(800x480)\Projects\MDK-ARM 2、编译后下载到开发板 3、将项目内的SD卡文件分别拷入卡内 SD NAND的写入速度: 编辑 TF卡的写入速度: 编辑 从这样看,SD NAND卡的写入速度比TF卡要快很多。 插入卡后,很快的检测到了SD卡,访问速度也是相当的快。 编辑 编辑 编辑 这次使用的是雷龙 CS创世SD NAND 的32Gbit卡。 编辑 普及一下SD NAND卡与 TF卡的区别 编辑 CS创世SD NAND的卡,写入寿命相当的长久,可以以作为数据存取或者IAP的好介质。
  • 热度 10
    2022-11-15 16:54
    1053 次阅读|
    0 个评论
    目录 上篇: 一.SDIO简介 二.SD卡简介/内部结构 1.SD卡/SD NAND引脚 2.SD卡寄存器 3.FLASH存储器 三.SDIO总线拓扑 中篇: 四.SDIO功能框图(重点) 1.SDIO适配器 2.控制单元 3.命令通道(重点) 4.数据通道 五.命令与响应 1.命令格式 2.命令类型 3.命令描述 4.响应类型 六.SD卡/SD NAND功能描述(重重点) 1.操作条件确认 2.卡识别模式 3.数据传输模式 下篇: 七.SDIO外设结构体 1.SDIO初始化结构体 2.SDIO命令初始化结构体 3.SDIO数据初始化结构体 八.SD卡读写测试实验 1.硬件设计 2.代码讲解 3.实验结果 一.SDIO简介 SDIO (Secure Digital Input and Output)全称安全数字输入/输出接口,在AHB外设总线和多媒体卡(MMC)、SD存储卡、SDIO卡和CE-ATA设备间提供了操作接口。 多媒体卡(MMC) MMC(MultiMedia Card)卡由西门子公司和首推CF的SanDisk于1997年推出多媒体卡(MMC)是一种小型(24x32或18x1.4mm)可擦除固态存储卡,其全称为Multi-Media Card,特别应用于移动电话和数字影像及其他移动终端中。 SD卡:(Secure Digital Memory Card) SD卡是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。 SD卡数据传送和物理规范由MMC发展而来,大小和MMC差不多,但是容纳更大容量的存贮单元。SD卡与MMC卡保持着向上兼容,也就是说,MMC可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。** 应用:SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到SD卡中。因此不少数码相机也开始支持SD卡。 SD I/O 卡 本身不是用于存储的卡,它是指利用 SDIO 传输协议的一种外设。比如 Wi-Fi Card,它主要是提供 Wi-Fi 功能,有些 Wi-Fi 模块是使用串口或者 SPI 接口进行通信的,但 Wi-Fi SDIO Card 是使用 SDIO 接口进行通信的,一般设计 SD I/O 卡是可以插入到 SD 的插槽 CE-ATA设备 CE-ATA 一种基于为了节省接口IO数量,专为轻薄 笔记本硬盘 设计的笔记本硬盘高速通讯接口。 一种使用MMC接口界面,ATA指令集的笔记本电脑 硬盘接口 结论:MMC卡是SD卡的前身,也就是说SD将取代MMC卡的地位,MMC卡也用的越来越少,所以我们后面只讲SD卡. SDIO的主要功能: (关于不是SD卡的就不介绍了) 1.与SD存储卡规格版本2.0全兼容(向前兼容) 2.数据和命令输出使能信号,用于控制外部双向驱动器。 SDIO外设挂载在STM32的AHB总线。 这样一来,STM32(主机),就可以通过AHB总线,控制SDIO外设的寄存器进而控制SDIO外设读/写SD卡,SDIO外设向SD卡传输数据,或者向SD卡接收数据可以使用DMA进行传输(这样可以省去很多繁琐的步骤后面再讲) 当前版本的SDIO在同一时间里只能支持一个SD卡(这是ST公司限制的) 二.SD卡简介/内部结构 SD卡是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。 SD卡数据传送和物理规范由MMC发展而来,大小和MMC差不多,但是容纳更大容量的存贮单元。SD卡与MMC卡保持着向上兼容,也就是说,MMC可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。** 应用:SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到SD卡中。因此不少数码相机也开始支持SD卡。 SD卡采用的是采用了NandFlash存储器,稍后解释NandFlash与NorFlash的区别。 1.卡容量 标准容量 SD 卡,支持最大 2GB 的容量。所有的物理规格文档都会定义这种。 高容量 SD 卡(SDHC),支持超过 2GB 的容量。本文档解释的规格最大为 32GB 容量。只有 SDIO支持 2.0 协议才能够识别这种高容量 SD 卡(而SDIO外设正好最高支持到2.0协议)。 STM32F10x 系列控制器只支持 SD 卡规范版本 2.0,即只支持标准容量 SD 和高容量SDHC 标准卡,不支持超大容量 (大于32GB)SDXC 标准卡,所以STM32可以支持的最高卡容量是 32GB。 2.速度等级 我们定义了 4 个速度等级,来表示卡的最小速率:(实际上目前最高 Class10) ● Class 0 – 这种卡不定义具体性能,代表了这个规范出来之前的所有卡 ● Class 2 – 最小 2MB/s 的性能 ● Class 4 – 最小 4MB/s 的性能 ● Class 6 – 最小 6MB/s 的性能 ● Class 8 – 最小 8MB/s 的性能 ● Class 10 – 最小 10MB/s 的性 SD卡的内部构造: 电源检测单元保证 SD 卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位; 1.SD卡/SD NAND引脚 1)SD卡引脚 SD 卡使用 9-pin 接口通信,其中 3 根电源线、1 根时钟线、1 根命令线和 4 根数据线,具体说明如下: CLK:时钟线,由 SDIO 主机产生,即由 STM32 控制器输出,最高 25MB/s 的接口速度(使用4条并行数据线); CMD:命令控制线,SDIO 主机通过该线发送命令控制 SD 卡,如果命令要求 SD 卡提供应答(响应),SD 卡也是通过该线传输应答信息(即命令响应都是通过CMD命令控制线来串行传输的); D0-3:数据线,传输读写数据;SD 卡可将 D0 拉低表示忙状态; VDD、VSS1、VSS2:电源和地信号。 2.SD卡寄存器 卡控制单元控制 SD 卡的运行状态,它包括有 8 个寄存器,接口驱动器控制 SD 卡引脚的输入输出 SD 卡总共有 8 个寄存器,用于设定或表示 SD 卡信息,这些寄存器只能通过对应的命令访问(STM32主机通过驱动SDIO外设通过CMD命令线向从机SD卡发送命令),SDIO 定义了 64 个命令,每个命令都有特殊意义,可以实现某一特定功能,SD 卡接收到命令后,根据命令要求对 SD 卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现 SD 卡的控制以及读写操作。 1.CID 寄存器(重点了解) 卡识别(CID)寄存器是一个 128 位的寄存器。包含了卡的识别信息,用于卡识别解析(具有唯一性)。每个读/写卡都有一个特殊的识别号。CID 寄存器的结构如下: 2.RCA 寄存器(重点了解) 可写的 16 位SD卡相对地址寄存器,在SD卡的初始化期间,由SD卡向外发布的卡地址。这个地址用于卡初始化进程之后,主机同卡之间的交互寻址。(在主机向SD卡读写数据时,就是发送CMD7选择/取消选择 RCA 地址卡,就是靠RCA来确定主机与哪张卡通信) 为啥不用上面的CID呢 ? 答:因为它太长了128位呢,仅此而已 3.CSD 寄存器(2.0) CSD V2.0 只适用于高容量 4.SCR 寄存器 作为 CSD 寄存器的补充,另一个配置寄存器称为 SD 卡配置寄存器(SCR)。SCR 提供了 SD 卡的特殊功能的信息。SCR 是一个 64bit 的寄存器,这个寄存器应该由 SD 厂家设置。 5.OCR 寄存器(重点了解) 32 位的操作条件寄存器(OCR)存储了卡的 VDD 电压描述。另外,还包括了状态信息位。如果卡的上电程序完成,一个状态位会被设置。寄存器还包括另一个状态位,在设置上电状态位后,用来表明卡的容量状态。 Bit31 – 卡上电状态位(busy),这个状态位在卡的上电流程完成后设置。 Bit30 – 卡容量状态位(CCS),如果是高容量卡,设置为 1,如果是标准卡,设置为 0。 卡容量状态位只有在上电流程完成,且 Bit31 设置为 1 之后才有效。主机可以读取这个状态位来判断卡的种类 上面这些寄存器的只要了解即可,后面用的不多,等后面用到再讲这样就能有个更深刻的认识。 3.FLASH存储器 1)FLASH简介 FLSAH 存储器又称闪存,它与 EEPROM 都是掉电后数据不丢失的存储器,但 FLASH存储器容量普遍大于 EEPROM,现在基本取代了它的地位。我们生活中常用的 U 盘、SD卡、SSD 固态硬盘以及我们STM32 芯片内部用于存储程序的设备,都是 FLASH 类型的存储器。在存储控制上,最主要的区别是 FLASH 芯片只能一大片一大片地擦写,而在“I2C章节”中我们了解到 EEPROM 可以单个字节擦写。 2)NOR FLASH 和 NAND FLASH的区别 FLASH 存储器又分为 NOR FLASH 和 NAND FLASH NOR 与 NAND 的共性是在数据写入前都需要有擦除操作,而擦除操作一般是以“扇区/块”为单位的。 而 NOR 与 NAND 特性的差别,主要是由于其内部“地址/数据线”是否分开导致的。由于 NOR 的地址线和数据线分开,它可以按“字节”读写数据,符合 CPU 的指令译码执行要求,而由于 NAND 的数据和地址线共用,只能按“块”来读写数据,所以不符合CPU指令译码要求。 所以NOR FLASH 一般应用在代码存储的场合,如嵌入式控制器内部的程序存储空间。 而 NAND FLASH 一般应用在大数据量存储的场合,包括SD 卡、U 盘以及固态硬盘等,都是 NAND FLASH 类型的。 总结一句话:NOR FLASH贵而精,NAND FLASH大而便宜 所以我们的SD卡用 NAND FLASH 作为存储单元 存储单元是存储数据部件,存储单元通过存储单元接口与卡控制 单元进行数据传输 三.SDIO总线拓扑 总线上的通信是通过传送命令和数据实现。 在SD卡总线上的基本操作是命令/响应结构(主机发送命令给SD卡,SD卡是否进行响应,主机发生命令和SD卡响应都是通过命令线(CMD)传输的(有一个响应例外等下说)),这样的总线操作在命令或总线机制下实现信息交换。 在SD/SDIO存储器卡上传送的数据是以数据块的形式传输;在MMC上传送的数据是以数据块或数据流的形式传输; SD 卡总线有一个主机,多个SD卡,时钟线(CLK),电源(VDD)和地信号(VSS)是所以卡共用。命令线(CMD)和数据线(DAT0-3)信号是根据每张卡的。 理论上主机可以与多张卡进行数据交互,虽然可以共用总线,但不推荐多卡槽共用总线信号,要求一个单独 SD 总线应该连接一个单独的 SD 卡。 即STM32只能接一张SD卡 SDIO 不管是从主机控制器向 SD 卡传输,还是 SD 卡向主机控制器传输都只以 CLK 时钟线的上升沿为有效。SD 卡操作过程会使用两种不同频率的时钟同步数据: 识别卡阶段:时钟频率 FOD,最高为 400kHz 数据传输模式:时钟频率FPP,默认最高为 25MHz 如果通过相关寄存器配置使 SDIO 工作在高速模式,此时数据 传输模式最高频率为 50MHz 为什么卡识别阶段的频率低? 卡识别的时候为了兼容识别不同版本的SD卡 SD 总线通信是基于命令和数据传输的。通讯由一个起始位(“0”),由一个停止位(“1”)终止,SD 通信一般是主机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如有需要会有数据(Data)传输参与。 SD 数据是以块形式传输的,SDHC 卡数据块长度一般为 512 字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要 CRC 位来校验数据。CRC 位由 SD卡系统硬件生成。STM32 控制器可以控制使用单线或 4 线传输(D0-D3)。 SD 数据传输支持单块和多块读写,它们分别对应不同的操作命令,多块写入还需要使用命令来停止整个写入操作。数据写入前需要检测 SD 卡忙状态,因为 SD 卡在接收到数据后存储到存储区(NandFlash)过程需要一定操作时间。SD 卡忙状态通过把 D0 线拉低表示。 数据传输: 使用 4 数据线(D0~D3)传输时,每次传输 4bit 数据,每根数据线都必须有起始位、终止位以及CRC 位,CRC 位每根数据线都要分别检查,并把检查结果汇总然后在数据传输完后通过D0 线反馈给主机。 SD 卡有两种数据包格式。 1.常规数据(8bit 宽):常规数据发送是先低字节,再高字节的顺序,但是每个字节则是先高位后低位 数据位在四线顺序排列发送,DAT3 数据线发较高位,DAT0 数据线发较低位。 2.宽位数据(SD 存储寄存器):宽位数据从高位开始传输。 对 SD 卡而言宽位数据包发送方式是针对 SD 卡 SSR(SD 状态)寄存器内容发送的,SSR 寄存器总共有 512bit,在主机发出ACMD13 命令后(当然在发送ACMD13 之前需要发送CMD55 ) SD 卡将 SSR 寄存器内容通过数据线发送给主机。 【本文转载自CSDN,作者:rivencode】 全文目录内容分为三篇【上/中/下】原文链接跳转如下: SD NAND 的 SDIO在STM32上的应用详解(上篇): http://www.longsto.com/news/58.html SD NAND 的 SDIO在STM32上的应用详解(中篇): http://www.longsto.com/news/59.html SD NAND 的 SDIO在STM32上的应用详解(下篇): http://www.longsto.com/news/60.html