SD读写流程

一、1bit-4bit数据传输对比

      CPU/EDMA与SD的数据传输可以设置为1bit或4bit模式,1bit模式仅使用DAT0数据线,4bit模式使用DAT3-DAT0四位数据线。例如,传输512字节的数据,传输的数据格式如下图所示:

 

二、读写命令

      读写分为单块读写和多块读写。

CMD16:SET_BLOCKLEN,用于设定每次读写的块大小,对于标准容量卡standard SD,默认块大小为512字节,可以通过该命令改变CSD寄存器值从而改变读写块大小;而对高容量卡SDHC,块大小固定为512字节,不可以改变。

CMD17:READ_SINGLE_BLOCK,单块读取,每次读取一个数据块,命令参数附加有地址信息,实现读取SD卡某个地址的数据。

CMD18:READ_MULTIPLE_BLOCK,多块读取,每次读写多个数据块,命令参数同样包含地址信息。

      与之对应的CMD24(WRITE_BLOCK)、CMD25(WRITE_MULTIPLE_BLOCK)可以实现单块与多块写操作。

      对于标准容量卡,读写命令参数argument值为字节地址,读取时对第n个扇区,地址为512*n;对于高容量卡,读写命令参数argument值为扇区地址,读取时第n个扇区地址即为n。

三、单块多块读写时序图

 

 

      读写过程,首先发送读写命令,接收到命令发送成功的response后发送或接受数据,如果为单块读写命令,发送或接收单块数据后即完成;如果为多块读写命令,直到收到停止操作的命令(CMD12)数据传输结束。

四、读写状态转换图


      CMD3(SEND_RELATIVE_ADDR)完成后,host得到RCA,由卡识别模式进入数据传输模式。

1、  主机发送CMD9(SEND_CSD)命令获取卡的CSD信息。从CSD寄存器中可以获得最大读写的块长度等信息。

2、  发送CMD7(SELECT/DESELECT_CARD),命令参数为RCA,可以选中某个RCA地址的卡,同时断开与其他卡的连接;命令参数RCA=0时,host断开与所有卡的连接。该命令使卡由Stand by状态转到Transfer状态。当一个已经处于transfer状态的卡再次接收到CMD7命令时,卡会由transfer状态回到stand by状态,释放DAT总线。

3、  在transfer状态下,可以发送CMD24、CMD25,CMD17、CMD18对卡进行写读。所有这些命令都可以由CMD12命令停止。

4、  在transfer状态也可以发送命令CMD16(SET_BLOCKLEN)来设置读写的块大小。

       以TMS320C6747DSP中MMCSD控制器为例,单块数据传输部分流程图如下。

 

posted on 2013-10-24 16:08  追星之子  阅读(2117)  评论(0编辑  收藏  举报