SD卡SPI模式下

SD卡学习(SDIO和SPI模式)

* * SD卡的操作模式:SD卡模式(SDIO)、SPI模式(默认为SD模式)。

其中SD卡模式的信号线有:CLK、CMD、DAT0-DAT3,6根线。

SPI模式的信号线有:CS、CLK、MISO(DATAOUT)、MOSI(DATAIN),4根线

SD卡只能使用3.3V的I/O电平。SPI模式下信号线要加10-100K的上拉电阻。

SD卡有五个寄存器:总共有8个寄存器

名称 宽度 描述
CID 128 卡标识寄存器
RCA 16 相对地址寄存器(Relative Card Address):本地系统中卡的地址,动态变化,在主机初始化的时候确定,SPI模式中没有。
CSD 128 卡描述数据:卡操作条件相关的信息数据
SCR 64 SD配置寄存器:SD卡特定信息数据
OCR 32 操作条件寄存器

SD卡的命令格式:

命令CMD0就是0,CMD16就是16,以此类推。

 SPI命令格式为6字节构成,高位在前(MSB)。

字节1 字节2-5 字节6
7 6 5-0
0 1 command

字节1的最高2位固定是01,低6位为命令号(CMD0就是0,CMD16就是16,以此类推),字节2-5为命令参数,有些命令是没有参数的;字节6的高7位为CRC,最低位恒为1。

扫描二维码关注公众号,回复: 2569498 查看本文章

SD卡的命令总共有12类,下表为几个比较重要的命令:

命令 参数 回应 描述
CMD0(0X00) NONE R1 复位SD卡
CMD8(0X08) VHS+Check Pattern R7 发送接口状态命令
CMD9(0X09) NONE R1 读取卡特定数据寄存器
CMD10(0X0A) NONE R1 读取卡标志数据寄存器
CMD16(0X10) 块大小 R1 设置块大小(字节数)
CMD17(0X11) 地址 R1 读取一个块的数据
CMD24(0X18) 地址 R1 写入一个块的数据
CMD41(0X29) NONE R3 发送给主机容量支持信息和激活卡初始化过程
CMD55(0X37) NONE R1 告诉SD卡,下一个是特定应用命令
CMD58(0X3A) NONE R3 读取OCR寄存器

SD卡和单片机的通信采用发送应答机制:

R1响应格式
含义

初始化SD卡过程:

SPI操作模式下:在SD卡收到复位命令时,CS为有效电平(低电平),则SPI模式被启用,在发送CMD之前要先发送74个时钟,64个为内部供电上升时间,10个用于SD卡同步;之后才能开始CMD操作,在初始化时CLK时钟不能超过400KHz。

接着我们看看SD卡的初始化,* SD卡的典型初始化过程如下:*

1、初始化与SD卡连接的硬件条件(MCU的SPI配置,IO口配置);

2、上电延时(>74个CLK);

3、复位卡(CMD0),进入IDLE状态;

4、发送CMD8,检查是否支持2.0协议;

5、根据不同协议检查SD卡(命令包括:CMD55、CMD41、CMD58和CMD1等);

6、取消片选,发多8个CLK,结束初始化

这样我们就完成了对SD卡的初始化,注意末尾发送的8个CLK是提供SD卡额外的时钟,完成某些操作。通过SD卡初始化,我们可以知道SD卡的类型(V1、V2、V2HC或者MMC),在完成了初始化之后,就可以开始读写数据了。

SD卡读取数据,这里通过CMD17来实现,具体过程如下:

1、发送CMD17;

2、接收卡响应R1;

3、接收数据起始令牌0XFE;

4、接收数据;

5、接收2个字节的CRC,如果不使用CRC,这两个字节在读取后可以丢掉。

6、禁止片选之后,发多8个CLK;

以上就是一个典型的读取SD卡数据过程,SD卡的写于读数据差不多,写数据通过CMD24来实现,具体过程如下:

1、发送CMD24;

2、接收卡响应R1;

3、发送写数据起始令牌0XFE;

4、发送数据;

5、发送2字节的伪CRC;

6、禁止片选之后,发多8个CLK;

以上就是一个典型的写SD卡过程。关于SD卡的介绍,我们就介绍到这里,更详细的介绍请参考光盘SD卡的参考资料(SD卡2.0协议)。

 

猜你喜欢

转载自blog.csdn.net/fengxiaocheng/article/details/81411117
今日推荐