SD卡SPI模式下的使用

  • Post author:
  • Post category:其他




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 卡读取数据

这里通过 CMD17 来实现,具体过程如下:

1、发送 CMD17;

2、接收卡响应 R1;

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

4、接收数据;

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

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



SD卡写数据

写数据通过 CMD24来实现,具体过程如下:

1、发送 CMD24;

2、接收卡响应 R1;

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

4、发送数据;

5、发送 2 字节的伪 CRC;

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



SD卡指令表

#define CMD0 0 //卡复位

#define CMD1 1

#define CMD8 8 //命令8 ,SEND_IF_COND

#define CMD9 9 //命令9 ,读CSD数据

#define CMD10 10 //命令10,读CID数据

#define CMD12 12 //命令12,停止数据传输

#define CMD16 16 //命令16,设置SectorSize 应返回0x00

#define CMD17 17 //命令17,读sector

#define CMD18 18 //命令18,读Multi sector

#define CMD23 23 //命令23,设置多sector写入前预先擦除N个block

#define CMD24 24 //命令24,写sector

#define CMD25 25 //命令25,写Multi sector

#define CMD41 41 //命令41,应返回0x00

#define CMD55 55 //命令55,应返回0x01

#define CMD58 58 //命令58,读OCR信息

#define CMD59 59 //命令59,使能/禁止CRC,应返回0x00

// SD卡中的响应有许多种,R1为标准响应,最为常用。与R1响应相似的还有R1b、R2和R3。

// R1响应在除SEND_STATUS外其它命令后发送,也是最高位先发送,共1个字节。最高位为0。响应说明如下:

// 0x01:空闲状态

// 0x02:擦除错误

// 0x04:命令错误

// 0x08:CRC通信错误

// 0x10:擦除次序错误

// 0x20:地址错误

// 0x40:参数错误



版权声明:本文为guangsushaonian原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。