||
一、SD卡协议概要
命令(Command):在CMD线上,由主机发出
响应(Response):在CMD线上,由被寻址的卡发出。
数据(data): 在数据线上,用DAT0或DAT0~DAT3。
CRC校验响应及忙指示(The CRC status response and Busy indication)只能经过DAT0发送
二、命令格式:
高位,第48位 低位,第1位
响应格式:R1、R3、R6与命令格式同,只是第47位为0;而R2为136位,只是contents与上表的位数多而已。 四条数据线时的传输格式:略 数据经过总线的顺序:高位在前,低位在后。
SD卡寄存器:
红色为V2.0曾加的寄存器。绿色为SPI用,蓝色为V1.0用
三、命令种类:广播命令、点对点寻址命令。 操作模式:标识卡模式、数据传输模式。 卡的标识过程:1、复位。上电或发送CMD0使卡进入空闲状态。 2、发ACMD41、CMD2、CMD3使之进入数据传输模式的等待状态。 对于大容量的SD卡,在发送ACMD41后要检查CCS是否为1来确定大容量SD卡否。为了能够识别各种卡,最始的时钟设置不能高于400kHz
数据传输:
对大容量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作为写超时。
四、命令格式
五、关于命令索引 “命令索引”在SD协议中并没有明确指出,但综合参考三星程序及网上文章,认为这种说法是正确的:“命令索引”中的数字就是其“索引值”。对于ACMD类的命令,可以看作为“复合命令”,即在执行时,前面先执行CMD55,然后再执行“去掉ACMDn前的‘A’的命令” |