快乐生活^_^飞得更高 https://bbs.21ic.com/?451749 [收藏] [复制] [RSS] 在这里,让我们共同交流,共同学习,共同提高!

日志

S3C2440读写大容量SD卡(一)High Capacity SD Memory Card Rea

已有 3423 次阅读2009-5-22 05:14 |系统分类:嵌入式系统| SD

先了解一下SD卡协议方面的东西

一、SD卡协议概要


命令(Command):在CMD线上,由主机发出


响应(Response):在CMD线上,由被寻址的卡发出。


数据(data):              在数据线上,用DAT0或DAT0~DAT3。


CRC校验响应及忙指示(The CRC status response and Busy indication)只能经过DAT0发送


二、命令格式:








高位,第48位                                                                                                                 低位,第1位


















0



1



contents



CRC7



1



起始位,总为0



传输方向,


1:主机发出


0:设备发出



内容,由具体命令决定



七位CRC



终止位,


总为1


 


响应格式:R1、R3、R6与命令格式同,只是第47位为0;而R2为136位,只是contents与上表的位数多而已。


四条数据线时的传输格式:略


数据经过总线的顺序:高位在前,低位在后。


 


SD卡寄存器:







































名称



宽度



说明



CID



128



Card identification number; 卡标识



RCA



16



Relative card address; 局部地址,在初始化时由主机和卡决定



DSR



16



Driver Stage Register;配置卡的输出驱动



CSD



128



Card Specific Data; 关于卡的操作信息



SCR



64



SD Configuration Register; 卡配置信息



OCR



32



Operation conditions register



SSR



512



SD Status; information about the card proprietary features



CSR



32



Card Status; information about the card status


红色为V2.0曾加的寄存器。绿色为SPI用,蓝色为V1.0用


 


三、命令种类:广播命令、点对点寻址命令。


    操作模式:标识卡模式、数据传输模式。


卡的标识过程:1、复位。上电或发送CMD0使卡进入空闲状态。


                       2、发ACMD41、CMD2、CMD3使之进入数据传输模式的等待状态。


 S3C2440读写大容量SD卡(一)High Capacity SD Memory Card Read and Write by S3C2440 - dontium - dontium的博客


对于大容量的SD卡,在发送ACMD41后要检查CCS是否为1来确定大容量SD卡否。为了能够识别各种卡,最始的时钟设置不能高于400kHz


 


数据传输:


 


 S3C2440读写大容量SD卡(一)High Capacity SD Memory Card Read and Write by S3C2440 - dontium - dontium的博客


 


对大容量SD卡操作的差异


存储器访问命令包括读块命令(CMD17、CMD18)、写块命令(CMD24、CMD25)及块擦除命令(CMD32、CMD33)。


下面是标准容量SD卡和大容量SD卡在存储器访问时的功能差别:


1 . 命令变量


大容量SD卡,存储器访问命令的32位变量是对块寻址的存储器访问(是决定块的块变量)。块的固定大小为512字节。而标准容量的SD卡,32位变量是对字节寻址,块长度由CMD16命令决定。


即:


(a),标准容量的SD卡,变量0001h是对0001h字节单元寻址,而在大容量SD卡中是对0001h块寻址。


(b),标准容量的SD卡,变量0002h是对0002h字节单元寻址,而在大容量SD卡中是对0002h块寻址。


2. 局部寻址和非对齐寻址。在大容量SD卡中,不允许作为块寻址的局部寻址和非对齐寻址(跨跃块边界),只允许对整个块寻址。


3.设置块长度


当使用块寻址模式的存储器读写命令,块长度为512字节,不关心CMD16设置的块长度。块长度设置对存


储器访问命令无效。CMD42不属于存储器访问命令。CMD16指定的数据块大小和块长度,置为512字节。大于


512字节将里将置位BLOCK_LEN_ERROR,且忽略卡容量。


4. 写保护分组


大容量SD卡不支持。发送命令CMD28、CMD29和CMD30将产生ILLEGAL_COMMAND错误


5、读写超时检查


读:对标准容量的SD卡,读超时的时间设定为大于典型读出时间的100倍,或者设置为100mS。卡参数的读时间为:CSD中的TAACT NSAC参数的两倍。


写:对标准容量的SD卡,写超时的时间设定为大于典型编程时间的100倍,或者设置为250mS。卡参数的写时间为:CSD中的R2W_FACTOR


对于大容量卡,CSD中的参数为因定值,因此最好使用>100mS作为读超时,>250mS作为写超时。


 


 


 


四、命令格式


 






































位序



47



46



[45:40]



[39:8]



[7:1]



0



宽度



1



1



6



32



7



1



数值



‘0’



‘1’



x



x



x



‘1’



备注



起始位



1发送、0接收



命令索引



变量



CRC7



终止位


 


 


五、关于命令索引


“命令索引”在SD协议中并没有明确指出,但综合参考三星程序及网上文章,认为这种说法是正确的:“命令索引”中的数字就是其“索引值”。对于ACMD类的命令,可以看作为“复合命令”,即在执行时,前面先执行CMD55,然后再执行“去掉ACMDn前的‘A’的命令”


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)