外存——S5PV210的外部存储器(nandflash与inand的介绍)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

参考内容

关于iNand ,oneNand,moviNAND的区别——大家一起来扫盲 - 嵌入式系统 

 

总结

本文首先介绍了目前主流的外存设备有哪些。

然后介绍了NandFlash芯片的接口、结构、常见操作,以及NandFlash控制器相关的内容。

接着介绍了SD卡和inand芯片的接口,以及SD/MMN/iNand控制器相关的内容。

最后利用代码进行说明与验证。

一、主流的外存设备介绍

我们一般把RAM(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫做内存;把ROM(read only memory,只读存储器,特点是掉电不丢失,不能随机地址访问,只能以块为单位来访问)叫外存。

1、软盘、硬盘、光盘、CD、磁带等

这类型的存储设备的存储原理大部分为磁存储

优点是技术成熟、价格便宜,缺点是读写速度慢、可靠性不好等。

这些存储设备广泛使用在桌面电脑中,但是在嵌入式设备中几乎很少使用。

2、纯粹的Flash:NandFlash、NorFlash

现代存储的发展方向是Flash存储,即闪存技术。

闪存技术是利用电学原理来存储1和0,所以闪存设备没有物理运动,读写速度可以很快,且无物理损耗。

闪存技术分为NAND技术、NOR技术、DINOR技术、UltraNAND技术等,大致分为两类,即NAND技术和NOR技术。采用这两种技术制成的Flash芯片就叫做NandFlash、NorFlash芯片。

最原始的NandFlash、NorFlash芯片由Flash颗粒组成,芯片外部只做了最基本的读写接口。使用这种存储芯片时,需要SoC为它提供Flash读写控制器,以及对Flash进行读写的时序。

这种存储芯片的缺陷是:读写接口时序比较复杂;内部无坏块处理机制,需要SoC自己来管理Flash的坏块;各家厂家的Flash接口不一致,甚至同一个厂家的不同型号、系列的Flash接口都不一致,这就造成产品升级时很麻烦。

换言之,这种存储芯片就相当于最原始的存储容器,它的外观造型是芯片。

3、卡化的Flash:SD卡、MicroSD、MMC卡与TF卡等

(1)这些卡片式的存储器,内部是NandFlash存储颗粒,与NandFlash芯片相比,多了统一的外部封装和标准接口。比如SD卡都遵照SD规范来发布。它规定了SD卡的读写速度、读写接口时序、读写命令集、卡大小尺寸、引脚个数及定义,因此不同厂家的SD卡可以通用。

(2)换言之,这类存储器类似于把NandFlash芯片做成卡片,并添加统一的外观与标准接口。

(3)这些卡遵循MMC协议或者SD协议,SD协议兼容MMC协议。

4、iNand、MoviNand等

(1)电子产品如手机、相机等,前些年的趋势是用SD卡/TF卡等外部扩展来扩展存储容量,但近些年的趋势是直接在电子产品内部设置大容量的Flash芯片,比如iNand、MoviNand等等。

(2)这些存储器内部依然由NandFlash存储颗粒构成,内置了块设备管理模块(提供了诸如坏块管理的功能),综合了SD卡为代表的各种卡的优势(有统一的接口标准,比如引脚定义、物理封装、接口时序等,不同厂家的SD卡可以通用),以及原始的NandFlash芯片的优势(以芯片的方式来发布而不是以卡的方式,因为外部扩展卡时间长了其卡槽可能会接触不良)。

(3)换言之,这类存储器类似于将SD卡芯片化,同时内置有块设备管理模块。

(4)这些芯片遵循EMMC协议。这里的E是embedded,是内嵌的意思,意味着芯片化后焊接到开发板上。相对于MMC协议,EMMC协议多了一个字母E,就是指芯片化后焊接到到开发板中。平常我们说的emmc芯片,一般指iNand或者moviNand。(moviNAND是三星的产品,iNand是sandisk的产品,都符合emmc协议。)

5、SD卡的进一步介绍

(1)SD卡与其他存储器的对比

SD卡与MMC卡的关系

MMC标准比SD标准早,SD标准兼容MMC标准。

MMC卡可以被SD读卡器读写,而SD卡不可以被MMC读卡器读写。

SD卡和Nand、Nor等Flash芯片差异

SD卡/MMC卡等卡类有统一的接口标准,而Nand芯片没有统一的标准。

SD卡与MicroSD的区别

体积大小区别而已,传输与原理完全相同。

SD卡与TF卡的区别
外观上,SD卡大而TF卡小。

用途上,SD卡用于数码相机等,而TF卡广泛用于手机、GPS等。

时间上,SD卡1999年推出,TF卡于2004年推出。

SD卡由日本松下、东芝与美国SanDisk共同推出,而TF卡由Motorola与SanDisk共同推出。

SD卡有写保护而TF卡没有,TF卡可以通过卡套转成SD卡使用。

SD卡与iNand的区别

SD卡是卡片式的存储器,而iNand可以简单理解为将SD卡芯片化。

(2)SD卡的编程接口

SD卡的物理接口

SD卡由9个针脚与外界进行物理连接,这9个脚中有2个地,1个电源,6个信号线。

SD协议与SPI协议

SD卡与SRAM/DDR/SROM之类的东西的不同,SRAM/DDR/SROM之类的存储芯片是总线式的,只要连接上并初始化好之后就可以由SoC直接以地址方式来访问;而SD卡不能直接通过接口给地址来访问,它的访问需要按照一定的接口协议(时序)来访问。

SD卡虽然只有一种物理接口,但是却支持两种读写协议:SD协议和SPI协议。

SPI协议特点(低速、接口操作时序简单、适合单片机)

SPI协议是单片机中广泛使用的一种通信协议,并不是为SD卡专门发明的。

SPI协议相对SD协议来说速度比较低。

SD卡支持SPI协议,就是为了单片机方便使用。

SD协议特点(高速、接口时序复杂,适合有SDIO接口的SoC)

SD协议是专门用来和SD卡通信的。

SD协议要求SoC中有SD控制器,运行在高速率下,要求SoC的主频不能太低。

二、NandFlash芯片的接口

1、NandFlash芯片的型号

以K9F2G08芯片为例,K9F表示是三星公司的NandFlash系列,2G表示Nand的大小是2Gbit(256MB),08表示Nand是8位的(即数据线有8根)。

2、NandFlash芯片的数据位

Nand有8位数据位的,也有16位数据位的。Nand是并行接口。

Nand的数据线上传递的不一定全部是有效数据,也可能有命令、地址等。

3、NandFlash芯片的功能框图

(1)NandFlash的结构

可以看作一个矩阵式存储器。被分成一个个小块,每一小块可以存储一个bit位。

(2)Page(页)

NandFlash中可以被单次访问的最小单元叫做Page,即NandFlash进行一次读写至少要读写这么多内容,或者是这么多内容的整数倍。K9F2G08芯片中,Page的大小是2KB+64B,这说明要读写K9F2G08,每次至少要读写2KB或者n*2KB,即使只需要其中的一个字节。其中2KB是真正用来存储的,而64B是用来存储ECC数据、块坏标志。这就是我们说的典型的块设备,不过现在有些块设备为了方便,提供了一种random read模式,可以只读取1个字节。

(3)Block(块)

页往上还有一个“块”的概念,1个块等于若干个页,比如K9F2G08中1个块等于64页。

(4)Device

块往上是整个Nand芯片,叫做Device。一个Device有很多个Block,比如K9F2F08有2028个block,所以整个Device大小为2048×64×2K = 256MB。

(5)page与block的意义

块设备不能完全按字节访问而必须块访问,这是物理上的限制,而非人为设置的障碍。对于我们做软件的来说,只能去想办法适应硬件,不是想着超越硬件。在NandFlash中,Page是读写NandFlash的最小单位,Block是擦除NandFlash的最小单位。

(6)Nand芯片的组成:Nand存储颗粒+Nand接口电路

Nand存储颗粒就是纯粹的采用Nand原理的存储单元,类似于仓库;Nand接口电路用来管理存储颗粒,并且给外界提供一个统一的、Nand接口规格的访问接口。

(7)Nand中有许多存储单元,每个单元都有自己的地址,所以Nand的地址是编排精确到字节的,但是实际读写却只能精确到页,所以Nand的很多操作都要求给的地址是页对齐的,比如2K、4K、512K等这样的地址,不能给3000B这样的地址。Nand读写时地址传递是通过IO线发送的,因为地址有32位而IO只有8位,所以需要多个cycle才能发送完毕。一般的Nand都是4cycle或者5cycle发送地址(从这里把Nand分为了4cycle Nand和5cycle Nand)。

(8)总结

Nand芯片内部有存储空间,并且有电路来管理这些存储空间,向外部提供统一的Nand接口的访问规则。外部的SoC可以使用Nand接口时序来读写这个Nand存储芯片。理论上,外部SoC可以直接模拟Nand接口来读写Nand芯片,但因为nand接口对时序要求非常严格,而且时序很复杂,所以SoC一般都是通过专用的Nand控制器来操控Nand芯片。

三、NandFlash芯片的结构

1、NandFlash芯片的单元组织:page与block

(1)Nand的页和块设备(比如硬盘)的扇区是类似的。

扇区最早在磁盘中是512字节,后来也有些高级硬盘扇区不是512字节而是1024字节/2048字节/4096字节等。Nand也是一样,不同的Nand的页的大小是不同的,也有512字节/1024字节/2048字节/4096字节等。Nand:页——>块;块设备:扇区——>块。

(2)不同的Nand芯片中,一个block等于多少page也是不定的。

(3)Nand的组织架构挺乱的,接口时序也不同,导致不同厂家的Nand芯片,或者同一个厂家的不同系列型号的nand接口也不一样。一旦升级容量或者换芯片系列则硬件要重新做,软件也要重新移植。

2、带内数据和带外数据

(1)带内数据和带外数据

Nand的每个页由2部分组成,这2部分各自都有一定的存储空间。比如K9F2G08中为2K+64字节。2K字节属于带内数据,是我们真正的存储空间,将来存储在Nand中的有效数据就是存在这2K范围内的(平时计算nand的容量时只考虑这2KB)。64字节的带外数据不能用来存储有效数据,它是作为别的附加用途的,比如用来存储ECC数据、存储坏块标志等……

(2)ECC(error correction code,错误校验码)

Nand的稳定性不够好,因而nand存储的出错(即位反转)概率高。将有效信息存储到Nand中的同时,按照一定的算法(譬如CRC16等校验算法)计算出ECC信息,然后存储到Nand这个页的带外数据区。读取数据时,对数据用同样的算法再计算一次ECC,并且和从带外数据区读出的ECC进行校验。如果校验通过则证明Nand的有效数据可信,如果校验不通过则证明这个数据已经被损坏,只能丢弃或者尝试修复。

(3)坏块标志

Nand芯片在用一段时间后,某些块可能会坏掉(无法擦除或者无法读写),类似于硬盘的坏道。坏块是不可避免的,而且随着Nand的使用坏块会越来越多。当坏块还不太多的时候,这个Nand都可以用,当坏块太多了使用不划算时才会换新的。

为了管理Nand,发明了一种坏块标志机制。Nand的每个页的64字节的带外数据中,文件系统定义了一个固定位置(比如定位第24字节)来标记这个块是好的还是坏的。当某个块已经坏了,文件系统将该块标记为坏块,以后访问nand时直接跳过这个块。

3、NandFlash芯片的地址时序

Nand读写时地址传递是通过IO线发送的,因为地址有32位而IO只有8位,所以需要4cycle或者5cycle发送地址。寻址的最小单位是字节,但是读写的最小单位是页。

在写代码时,Nand读写时的地址要按照Nand要求的时序和顺序去依次写入。

4、NandFlash芯片的命令码

外部SoC要想通过Nand控制器来访问Nand接口,就必须按照Nand接口规定的内容,给Nand接口发送命令、地址、数据等信息来读写Nand。

Nand芯片内部的接口电路本身可以接收外部的命令,然后根据这些命令来读写Nand内容,实现与外部SoC的交互。所以我们对nand进行的所有操作(擦除、读、写……)都要有命令、地址、数据的参与才能完成,而且必须按照Nand芯片规定的流程来做。

四、NandFlash芯片的常见操作

1、坏块检查

Flash设备使用之前要先以块为单位进行擦除,擦除后里面全是1,因此读出来的值是0xff。

检查坏块的思路:先进行块擦除,然后将整块读出来,依次检测各字节是否为0xff,如果是则表明不是坏块,不是则表明是坏块。

2、页写操作(program)

往Flash中写入数据的过程就叫做编程(program)。写Flash之前先确保这个页被擦干净,然后SoC通过命令线、IO线依次发送写命令、写页地址、写数据等进入NandFlash。

(1)写操作的过程

SoC通过内部的Nand控制器和外部的Nand芯片完成顺序对接,然后按照时序要求将一页数据发给Nand芯片内部的接口电路。

Nand芯片内部的接口电路先将数据放到自己的缓冲区,然后再集中写入Nand芯片的存储区域中。

Nand芯片内部的接口电路将一页数据从缓冲区中写入Nand存储区域中需要一定的时间,这段时间内Nand芯片不能再响应SOC发过来的其他命令,所以SoC要等待Nand芯片内部的接口电路忙完。

SoC通过不断读取状态寄存器的状态位(这个状态寄存器有2种情况:一种是SoC的Nand控制器自带的,另一种是SoC通过发命令从命令响应得到的),得知页数据是否已经写完。

(2)ECC校验

Nand的读写可能出错,为了安全进行ECC校验。

软件式校验

Nand芯片手册上推荐的方式是将刚才写入的1页数据读出来,和写入的内容进行逐一对比。如果读出的和写入的完全一样,说明刚才的写入过程正确完成了;如果读出来的和写入的不完全一样那就说明刚才的写入有问题。

硬件式ECC

一般情况下,SoC内部的Nand控制器会提供硬件式ECC,即Nand控制器中有一个硬件模块专门做ECC操作。

在写入Nand芯片时,打开ECC生成开关,则在写入Nand芯片的过程中,Nand控制器的ECC模块会自动生成ECC数据,并放在相应的寄存器中,然后将ECC数据写入Nand芯片的带外数据区。

在读取Nand芯片时,打开硬件ECC开关,则在读取Nand芯片的过程中,硬件ECC会自动计算读进来的一页数据的ECC值,并放到相应的寄存器中。然后读取带外数据区中原来写入时存入的ECC值,和这会读取时得到的ECC值进行校验,校验通过则说明读写正确,校验不通过则说明读写不正确。

3、擦除操作(erase)

擦除时必须给块对齐的地址。如果给了不对齐的地址,结果是不可知的(有些Nand芯片没关系,它内部会自动将其对齐,而有些Nand会返回地址错误)。

读写时给的地址也是一样,要求是页对齐地址。如果给了不对齐的,结果是不可知的。

4、页读操作(read)

待写。

五、S5PV210的NandFlash控制器

1、Nand控制器的作用

Nand芯片本身通过Nand接口电路来存取数据,Nand接口电路和SOC之间通过Nand接口时序来通信。但Nand接口时序相对复杂,如果完全用软件来实现Nand接口时序,则难以保证时序正确与稳定,代码很难写。解决方案是在SoC内部集成一个Nand控制器,其实质是一块硬件电路,其完全满足Nand接口时序的操作,然后将接口时序的操作寄存器化。

在SoC没有Nand控制器时,需要SoC来处理接口时序,编程很麻烦,需要程序员看Nand芯片的接口时序图,严格按照接口时序图中编程。在SoC有Nand控制器时,SoC只需要编程操控Nand控制器的寄存器即可,Nand控制器内部硬件会根据寄存器值来生成合适的Nand接口时序和Nand芯片通信。因此读写Nand芯片时不用再关注Nand接口时序,只要关注SoC的Nand控制器的寄存器,编程变得简单。

扩展来说,现在的技术趋势是硬件加速。目前几乎所有的外设在SoC内部都有对应的控制器来与其通信。SoC内部集成的各种控制器越多,则SoC硬件能完成的功能越多,使用此SoC来完成相应任务时,软件编程越简单。比如图形处理和图像处理领域,现在大部分的应用级别的SoC都集成有内部编码器,像S5PV210就有,更复杂的比如4418、6818也有。利用这些硬件编码器来进行快速编解码,软件工作量和大大难度降低。

2、NandFlash控制器结构框图

S5PV210的NandFlash控制器结构框图,位于数据手册Section 5内的第4节,第693页。

(1)特殊功能寄存器SFR

这是后续编程的关键,编程时就是通过读写SFR来产生Nand接口时序以读写Nand芯片的。

(2)Nand interface

这是NandFlash控制器的硬件接口,将来和Nand芯片的相应引脚进行连接

(3)ECC生成器

3、NandFlash控制器的主要寄存器

NandFlash控制器的主要寄存器有NFCONF、NFCONT、NFCMMD、NFADDR、NFDATA、

NFMECCD0、NFMECCD1、NFSECCD、NFSTAT。

六、NandFlash操作代码解析

1、擦除函数

待写。

2、页读取函数

待写。

3、页写入函数

待写。

4、总结

(1)NandFlash这类芯片,一般通过专用的接口时序和SoC内部的控制器相连。这种连接方式是非常普遍的,像LCD、DDR等都是类似的连接。这种接法和设计,对我们编程来说,关键在于两点:SoC的控制器的寄存器理解、Nand芯片本身的文档和流程图等信息。

(2)学习NandFlash要注意的是:
第一,要结合SoC的数据手册、Nand芯片的数据手册、示例代码三者来理解。
第二,初学时不要尝试完全不参考自己写出Nand操作的代码,初学时应该是先理解实例代码,知道这些代码是怎么写出来的,必要时对照文档来理解代码。代码理解之后去做实践,实践成功后以后再考虑自己不参考代码只参考文档来写出nand操作的代码。

七、iNand的结构与接口

1、MMC卡、SD卡、iNand的关联

(1)最早出现的是MMC卡。它是卡片式结构,按照MMC协议设计。相较于NandFlash芯片来说,MMC卡有2个优势:第一是卡片化,便于拆装;第二是统一了协议接口,兼容性好。

(2)后来出现的SD卡,兼容MMC协议。SD卡较MMC有一些改进,比如写保护、速率、容量等。SD卡遵守SD协议,有多个版本。多个版本之间向前兼容。

(3)iNand在SD卡的基础上发展起来。较SD卡的区别就是将SD卡芯片化,解决了卡的接触不良问题,便于设备迷你化。eMMC是一种协议,iNand是Sandisk公司符合eMMC协议的一种芯片系列名称。

2、iNand的结构框图 

和NandFlash结构特性类似,iNand内部也是由存储系统和接口电路构成,不同之处在于接口电路功能不同。iNand的接口电路更复杂,功能更健全。

(1)提供eMMC接口协议,和SoC的eMMC接口控制器通信对接。

(2)提供块的ECC校验相关的逻辑,也就是说iNand本身自己完成存储系统的ECC功能,SoC使用iNand时不用写代码来进行ECC相关操作,大大简化了SoC的编程难度。

(3)iNand芯片内部使用MLC Nand颗粒,所以性价比很高。(NandFlash分2种:SLC和MLC,SLC更稳定,但是容量小价格高;MLC容易出错,但是容量大价格低)。

(4)iNand接口电路还提供了cache机制,所以inand的操作速度很快。

3、iNand的物理接口

S5PV210芯片本身支持4通道的SD/MMC,在X210中实际是在SD/MMC0通道接了iNand芯片,而SD/MMC2接了SD卡(SD/MMC3也接了SD卡)。

对比inand和SD卡接线,发现这两个接线几乎是一样的,唯一的区别就是SD卡IO线有4根,而iNand的IO线有8根。在实际操作iNand芯片时和操作SD卡时几乎是一样的(物理接线几乎一样,软件操作协议几乎一样)。iNand/eMMC其实就是芯片化的SD/MMC卡,软件操作和SD卡相同。分析iNand芯片的操作代码时,其实就是以前的SD卡的操作代码。

一些细节的区别就是为了区分各种不同版本的SD卡、iNand的细节差异。

八、SD卡/iNand芯片操作

从上面的分析可知,操作iNand芯片和操作SD卡,几乎是一样的,所以这里混为一说。

1、硬件接口:DATA、CLK、CMD

(1)iNand芯片的IO线有8根,支持1、4、8线并行传输模式;SD卡IO线有4根,支持1、4线并行传输模式。

(2)CMD线用来传输命令,CLK线用来传输时钟信号。

(3)工作时,主机SoC通过CLK线传输时钟信号给SD卡/iNand芯片。这说明SD卡/iNand芯片是同步的,SD卡/iNand芯片的工作速率是由主机给它的CLK频率决定的。

2、“命令+响应”的操作模式

SD协议事先定义很多标准命令(CMD0、CMD1……),每个命令都有它的作用和使用条件和对应的响应。在一个命令周期中,主机先发送CMD给SD卡,接着SD卡解析这个命令并且执行这个命令,然后SD卡根据结果回发给主机SoC一个响应(有些命令不需要响应,这时SD卡不会给主机回发响应,主机也不用等待响应)。标准的“命令+响应”的周期中,主机发完一个命令后应该等待SD卡的响应而不是接着发下一条命令。

3、SD/iNand的体系结构

SD卡内部有一个接口控制器,类似于一个单片机,功能是通过CMD线接收外部主机SoC发给SD卡的命令码,然后执行这个命令并回发响应给主机SoC。这个单片机处理命令及回发响应遵循的就是SD协议。这个单片机同时可以控制SD卡内部的存储单元,可以读写存储单元。

4、SD/iNand的寄存器

这里说的是SD卡内部的寄存器,而不是主机SoC内部的SD控制器的寄存器。很多外置芯片内部都是有寄存器的,这些寄存器可以按照一定的规则访问,访问这些寄存器可以得知芯片的一些信息。

SD卡内部的寄存器,最重要的是RCA寄存器,即相对地址寄存器。我们在访问SD卡时,实际上SD卡内部每个存储单元的地址没有绝对数字,都是使用相对地址。相对地址由SD卡自己决定的,就存放在RCA寄存器中。

5、SoC的SD/MMC/iNand控制器简介

 S5PV210的SD卡控制器在Section8.7部分。不同的SoC可能在SD/MMC/iNand等支持方面有差异,但都通过内部提供SD控制器来支持。

九、SD/iNand代码实战分析

1、命令码CMD和ACMD

SD卡工作在“命令+响应”的模式下。

SD协议的命令分2种:CMDx和ACMDx。CMD是单命令命令,就是单独发一个CMD即可表示一个意思。ACMD是一种扩展,就是发2个CMD加起来表示一个意思。可以认为ACMDx = CMDy+CMDz(y一般是55)

2、卡类型识别

MMC协议、SD协议、eMMC协议本身是一脉相承的,所以造成了一定的兼容性。连接到主机SoC上的可能是一个MMC卡,SD卡,或者iNand芯片。主机SoC需要识别这个卡的类型。

SoC如何区分卡的类型?因为不同卡的内部协议不同的,所以对命令的响应也不同。SoC通过发送一些命令,然后听取响应,就可以根据不同的响应判定卡的版本。

3、SD卡状态

SD卡内部的接口控制器类似于一个单片机,这个单片机其实是一个状态机。所以SD卡任何时候都处于某一种状态(空闲状态、准备好状态、读写状态、出错状态等等,这些状态都是事先定义好的),在这种状态下能够接受的命令是一定的(如果主机发过来的命令和当前状态不符,状态机就不会响应),接受到命令之后执行操作,然后根据操作结果会跳转为其他状态。

4、SD卡回复类型
一般来说,SD卡的工作模式是“命令+响应”,但也有极少数的SD卡命令是不需要回复的。

SD卡对命令的回复有R1、R7等8种类型,每种回复类型都有自己的解析规则。SD卡在特定状态下对特定命令回复哪种类型,都是SD协议事先规定好的,详细细节要查阅协议文档。

5、linux内核风格的寄存器定义

定义一个基地址,然后定义要访问的寄存器和基地址之间的偏移量,则寄存器的地址就等于基地址+偏移量。这里的的代码中宏定义是不完整的,很多宏定义只能从字面意思来理解,对应,无法通过语法完全获得。这样写代码的好处是可以见名知意,就算代码不全都能读。

6、SD/iNand相关的GPIO初始化
GPG0相关的GPIO初始化,参考LED部分的设置技术。

时钟设置参考裸机第六部分,设置时使用到了位操作技巧,参考C高级第二部分。

要求能够在两三分钟之内完全看懂这些代码涉及到的知识,要能够在数据手册、原理图中找到相对应的点,要能够瞬间明白代码中涉及到的C语言语法技巧,这样才叫融会贯通。

7、SD/iNand的时钟设置
SD卡本身工作需要时钟,但是它又没有时钟发生单元,依靠主机SoC的控制器(通过SD接口中的CLK线)传一个时钟过来给SD卡内部使用。所以主机SD卡控制器先初始化好自己的时钟,然后将自己的时钟传给SD卡。

主机SoC刚开始和SD卡通信时,因为不清楚SD卡属于哪个版本(高版本和低版本的SD卡的读写速率不同,高版本的可以工作在低版本的速率下,低版本的SD卡不能工作在高版本速率下),所以先给SD卡发400KHz的低速率时钟,SD卡拿到这个时钟后就能工作了。然后主机SoC在与SD卡进一步通信时,会识别SD卡的版本号,然后再根据SD卡的版本进一步给它更合适的时钟。


8、命令发送函数解析


9、卡类型识别操作时序及代码分析


10、卡读写时序及代码分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uboot中关于LCD的代码分析

以下内容源于朱有鹏《物联网大讲坛》课程的学习,如有侵权,请告知删除。 1、在uboot-jiuding/board.c中,init_sequence中的display_banner中的open_backlight函数中,给GPF3_5输出高电平。 注释掉这一句uboot的LCD显示照样正常的&am…

寒假自助游之济南

以前很少去旅行,主要原因是孩子年龄比较小,再就是经济方面的考虑。如今孩子渐渐长大了,行路与读万卷书同等重要,遂决定以后无论寒暑假都应陪孩子到处走一走。我不喜欢那种走马观花式的跟团游,因而自助游便是最佳选择。…

与fastboot相关的知识

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。 一、fastboot的基本知识 1、什么是fastboot (1)fastboot是android使用的一种刷机方法。 android系统设计了2种刷机方式:fastboot和recovery。 &#xf…

Android中Activity启动模式详解

在Android中每个界面都是一个Activity&#xff0c;切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。 Android总Activity的启动模式分为四种&#xff1a; Activity启动模式设置&#xff1a; <activity and…

第一次软工作业展示——潘学

第一次软工作业完成啦&#xff01; 回首这个作业的完成过程&#xff0c;我是很有收获。这个作业有几个难点&#xff1a;1、在给定目录下读取TXT文件的内容&#xff1b;2、从读到的内容中分析出单词&#xff1b;3、统计单词的出现频率并输出。 我之前只学习过C和java&#xff0c…

uboot源码——命令体系

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 参考资料&#xff1a;http://www.cnblogs.com/biaohc/p/6394710.html 一、uboot命令体系基础 1、使用uboot命令 uboot启动后进入命令行环境&#xff0c;在此输入命令按回车结束&#xff0…

XMPP文件传输(XEP-0096协议说明)

XMPP XEP-0096协议是XMPP中的文件传输协议。 关于文件传输&#xff0c;在xmpp协议中有不少协议可以实现&#xff0c;而XEP-0096协议是其中非常简单的一个协议。由于邮件被删&#xff0c;我的代码demo丢失&#xff0c;因此只能在这里给大家讲一下其中的逻辑实现&#xff0…

uboot源码——环境变量

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 参考资料&#xff1a;http://www.cnblogs.com/biaohc/p/6398515.html。 一、uboot的环境变量基础 1、环境变量的作用 在不改变源码、不用重新编译的情况下&#xff0c;可以通过设置环境变量…

Linq To Sql进阶系列 -目录导航

博客园CLR基础研究团队|CLR团队精品系列|C# 3.0专题 [Linq To Sql进阶系列] 目录导航 1 Linq To Sql进阶系列&#xff08;一&#xff09;-从映射讲起 本系列&#xff0c;或多或少&#xff0c;直接或间接依赖入门系列知识。但&#xff0c;依然追求独立成章。因本文作者水平有限&…

uboot源码——mmc驱动分析

以下内容源于朱有鹏《物联网大讲坛》课程的学习&#xff0c;以及博客http://www.cnblogs.com/biaohc/p/6409197.html的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 一、uboot与linux驱动 1、uboot是裸机程序 狭义的驱动的概念&#xff1a;操作系统中用来具体操控硬…

RDIFramework.NET(.NET快速开发框架) 答客户问(2014-02-23)

1、框架的部署安装&#xff0c;服务器端和客户端 答&#xff1a;开发版以上版本支持SOA模式&#xff0c;也即真正的面向服务端的模式&#xff0c;在实际使用过程中&#xff0c;可根据项目的实际需要&#xff0c;来选择性的进行部署&#xff08;直连模式或SOA模式&#xff09;&a…

I2C通信——I2C通信的基础介绍

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除 。 参考博客 SPI、I2C、UART&#xff08;即串口&#xff09;三种串行总线详解_天糊土的博客-CSDN博客_串口总线 s5pv210 I2C通信详解 - biaohc - 博客园 嵌入式常用技术概览之IIC(I2C)_C_XianRen的博…

IBM SOA[ESB,BPM,Portal等]基础架构图解

最近公司对众多的异构系统进行SOA化&#xff0c;产品选型为IBM的Websphere系列产品的WMB&#xff0c;BPM&#xff0c;Portal&#xff0c;LDAP等技术&#xff0c;根据具体的描述&#xff0c;连猜带蒙的画了个系统协作图&#xff0c;有不对的地方欢迎大家拍砖....谢谢。 SOA详细技…

css3图标悬停导航菜单

纯css3制作的图标悬停导航菜单&#xff0c;包含9中不同的悬停风格&#xff0c;干净大气。转载于:https://blog.51cto.com/jimanyu/1362823

I2C通信——S5PV210的I2C通信简单案例

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 I2C子系统详解3——I2C总线驱动层代码分析_天糊土的博客-CSDN博客 一、S5PV210的I2C控制器 1、为什么需要控制器&#xff1f; 通信双方通过时序协调工作&#xff0c;但是时序比较复杂而…

POJ 2718

题意&#xff1a;给出最多10个数字&#xff0c;将它们划分为两个整数&#xff0c;求差异值最小的值&#xff08;除非只有一位数&#xff0c;否则不允许出现先导0&#xff09; 题解&#xff1a;很显然如果总共有n个数&#xff0c;必然有一个整数长n/2,另一个长n-n/2&#xff0c;…

HDUOJ---1879 继续畅通工程

继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11473 Accepted Submission(s): 5026 Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通&#xff08;但不一…

动态载入树 (ASP+数据库)

ASPACCESS 在数据量达100万条记录下&#xff0c;载入速度仍然惊人.... // 网上转载. 忘了作者... : ) //********************** Index.asp ************************// 1<%LANGUAGE"VBSCRIPT"CODEPAGE"936"%>2<%OptionExplicit%>3<htm…

ADC——S5PV210的ADC的理论与操作

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 s5pv210 AD转换 - biaohc - 博客园 一、ADC的相关概念 1、量程&#xff08;模拟量的输入范围&#xff09; ADC只能输入电压信号&#xff0c;其他种类的模拟信号要经过传感器的转换&#x…

【洛谷 2661】信息传递

题目描述 有 nn 个同学&#xff08;编号为 11 到 nn &#xff09;正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象&#xff0c;其中&#xff0c;编号为 ii 的同学的信息传递对象是编号为 T_iTi​ 的同学。 游戏开始时&#xff0c;每人都只知道自己的生日。之…