每一条命令都是从片选信号(CS)的下降沿开始,SD卡接收到指令以后,都需要有一个指令响应时间(NCR),一般需要8个到64个时钟周期。SPI的指令简记为CMD,表示指令内容的十进制值,对于没有参数的指令,参数为内容要用0来填充。下表列出了SPI模式下常用的指令
命令 参数 响应类型 简写 描述
CMD0 0 R1 GO_IDLE_STATE 软件复位
CMD8 (*1) R7 SEND_IF_COND 发送MCU的电压范围,检测SD卡是否满足MCU的电压范围
ACMD41(*2) (*3) R1 SD_SEND_OP_COND 开始SD卡初始化和检测SD卡是否完成初始化
CMD9 0 R1 SEND_CSD 读取CSD寄存器的值
CMD10 0 R1 SEND_CID 读取CID寄存器的值
CMD12 0 R1b STOP_TRANSMISSION 停止读取操作
CMD16 数据块长度[31:0] R1 SET_BLOCKLEN 设置数据块长度(*4)
CMD17 地址[31:0] R1 READ_SINGLE_BLOCK 读取单个数据块
CMD18 地址[31:0] R1 READ_MULTIPLE_BLOCK 读取多个块数据
CMD24 地址[31:0] R1 WRITE_BLOCK 写单个块数据
CMD25 地址[31:0] R1 WRITE_MULTIPLE_BLOCK 写多个块数据
CMD55 0 R1 APP_CMD 定义下一条命令为ACMD命令
CMD58 0 R3 READ_OCR 读取OCR寄存器
- 1 : [31:12]为0,[11:8]为VHS值,[7:0]Check Pattern,可以为任意值,用于检测SD卡通信是否正确的。若该命令的返回值最后一字
节和Check pattern值相同,说明SPI通信成功。 - 2 : 发送ACMD之前需要先发送CMD55命令。
- 3 : [31],[29:0]为0,[30]位为HCS,若MCU支持SDHC或者SDXC卡类型,HCS为0,支持则为1。
- 4 : 对于SDSC卡类型,块长度有CMD16来设定。而对于SDHC和SDXC卡类型,数据块长度始终为512字节,此命令不会影响数据块长度。