【SDIO】SD2.0协议分析总结(三)-- SD卡相关命令介绍

相关文章

《【SDIO】SDIO、SD卡、FatFs文件系统相关文章索引》

1.命令类型

SD 命令有 4 种类型:

  • 无响应广播命令(bc),发送到所有卡,不返回任务响应;
  • 带响应广播命令(bcr),发送到所有卡,同时接收来自所有卡响应;
  • 寻址命令(ac),发送到选定卡,DAT 线无数据传输;
  • 寻址数据传输命令(adtc),发送到选定卡,DAT线有数据传输。

另外,SD卡主机模块系统旨在为各种应用程序类型提供一个标准接口。在此环境中,需要有特定的客户/应用程序功能。为实现这些功能,在标准中定义了种类型的通用命令特定应用命令(ACMD)常规命令(GEN_CMD)。要使用 SD卡制造商特定的 ACMD命令如ACMD6,需要在发送该命令之前无发送 CMD55 命令,告知 SD卡接下来的命令为特定应用命令。CMD55 命令只对紧接的第一个命令有效,SD卡如果检测到 CMD55 之后的第一条命令为 ACMD 则执行其特定应用功能,如果检测发现不是 ACMD 命令,则执行标准命令。

2.命令描述

SD 卡系统的命令被分为多个类,每个类支持一种“卡的功能设置”。下面表格列举了SD 卡部分命令信息,更多详细信息可以参考《 Physical Layer Specification Version 2.00》文件说明,表中填充位保留位都必须被设置为 0

命令
序号

参数
缩写 描述
基本命令(Class 0)
CMD0 bc [31:0]填充位 - GO_IDLE_STATE 复位所有的卡到 idle 状态。
CMD2 bcr [31:0]填充位 R2 ALL_SEND_CID 通知所有卡通过 CMD 线返回 CID值。
CMD3 bcr [31:0]填充位 R6 SEND_RELATIVE_ADDR 通知所有卡发布新 RCA。
CMD4 bc [31:16]DSR[15:0]填充位 - SET_DSR 编程所有卡的 DSR。
CMD7 ac [31:16]RCA[15:0]填充位 R1b SELECT/DESELECT_CARD 选择/取消选择 RCA 地址卡。
CMD8 bcr [31:12] 保 留 位[11:8]VHS[7:0]检查模式 R7 SEND_IF_COND 发送 SD 卡接口条件,包含主机支持的电压信息,并询问卡是否支持。
CMD9 ac [31:16]RCA[15:0]填充位 R2 SEND_CSD 选定卡通过 CMD 线发送 CSD 内容
CMD10 ac [31:16]RCA[15:0]填充位 R2 SEND_CID 选定卡通过 CMD 线发送 CID 内容。
CMD12 ac [31:0]填充位 R1b STOP_TRANSMISSION 强制卡停止传输
CMD13 ac [31:16]RCA[15:0]填充位 R1 SEND_STATUS 选定卡通过 CMD 线发送它状态寄存器
CMD15 ac [31:16]RCA[15:0]填充位 - GO_INACTIVE_STATE 使选定卡进入“inactive”状态
面向块的读操作 (Class 2)
CMD16 ac [31:0]块长度 R1 SET_BLOCK_LEN 对于标准 SD 卡,设置块命令的长度,对于 SDHC 卡块命令长度固定为512 字节。
CMD17 adtc [31:0]数据地址 R1 READ_SINGLE_BLOCK 对于标准卡,读取 SEL_BLOCK_LEN长度字节的块;对于 SDHC 卡,读取512 字节的块。
CMD18 adtc [31:0]数据地址 R1 READ_MULTIPLE_BLOCK 连续从 SD 卡读取数据块,直到被CMD12 中断。块长度同 CMD17。
面向块的写操作 (Class 4)
CMD24 adtc [31:0]数据地址 R1 WRITE_BLOCK 对于标准卡,写入 SEL_BLOCK_LEN长度字节的块;对于 SDHC 卡,写入512 字节的块。
CMD25 adtc [31:0]数据地址 R1 WRITE_MILTIPLE_BLOCK 连续向 SD 卡写入数据块,直到被CMD12 中断。每块长度同 CMD17。
CMD27 adtc [31:0]填充位 R1 PROGRAM_CSD 对 CSD 的可编程位进行编程
擦除命令 (Class 5)
CMD32 ac [31:0]数据地址 R1 ERASE_WR_BLK_START 设置擦除的起始块地址
CMD33 ac [31:0]数据地址 R1 ERASE_WR_BLK_END 设置擦除的结束块地址
CMD38 ac [31:0]填充位 R1b ERASE 擦除预先选定的块
加锁命令(Class 7)
CMD42 adtc [31:0]保留 R1 LOCK_UNLOCK 加锁/解锁 SD 卡
特定应用命令 (Class 8)
CMD55 ac [31:16]RCA[15:0]填充位 R1 APP_CMD 指定下个命令为特定应用命令,不是标准命令
CMD56 adtc [31:1]填充位[0]读/写 R1 GEN_CMD 通用命令,或者特定应用命令中,用于传输一个数据块,最低位为 1表示读数据,为 0 表示写数据
SD 卡特定应用命令
ACMD6 ac [31:2] 填 充 位[1:0]总线宽度 R1 SET_BUS_WIDTH 定 义 数 据 总 线 宽 度('00'=1bit,'10'=4bit)。
ACMD13 adtc [31:0]填充位 R1 SD_STATUS 发送 SD 状态
ACMD41 Bcr [32] 保 留 位[30]HCS(OCR[30]) [29:24]保留位[23:0]VDD 电 压(OCR[23:0]) R3 SD_SEND_OP_COND 主机要求卡发送它的支持信息(HCS)和 OCR 寄存器内容。
ACMD51 adtc [31:0]填充位 R1 SEND_SCR 读取配置寄存器 SCR

3. 命令响应

响应由 SD卡向主机发出,部分命令要求 SD卡作出响应,这些响应多用于反馈 SD卡的状态。SDIO 总共有 7 个响应类型(代号:R1~R7),其中 SD卡没有 R4、R5类型响应。特定的命令对应有特定的响应类型,比如当主机发送 CMD3命令时,可以得到响应 R6。与命令一样,SD卡的响应也是通过 CMD线连续传输的。根据响应内容大小可以分为短响应和长响应。短响应是 48bit 长度,只有 R2 类型是长响应,其长度为 136bit。各个类型响应具体情况如下表所示。

除了 R3类型之外,其他响应都使用 CRC7 校验来校验,对于 R2类型是使用 CID 和CSD寄存器内部 CRC7。

R1( 正常响应命令)
描述 起始位 传输位 命令号 卡状态 CRC7 终止位
Bit 47 46 [45:40] [39:8] [7:1] 0
位宽 1 1 6 32 7 1
"0" "0" x x x “1”
备注 如果有传输到卡的数据,那么在数据线可能有 busy 信号
R2(CID,CSD 寄存器)
描述 起始位 传输位 保留 [127:1] 终止位
Bit 135 134 [133:128] 127 0
位宽 1 1 6 x 1
"0" "0" "111111" CID 或者 CSD 寄存器[127:1]位的值 “1”
备注 CID 寄存器内容作为 CMD2 和 CMD10 响应,CSD 寄存器内容作为 CMD9 响应。
R3(OCR 寄存器)
描述 起始位 传输位 保留 OCR 寄存器 保留 终止位
Bit 47 46 [45:40] [39:8] [7:1] 0
位宽 1 1 6 32 7 1
"0" "0" "111111" x "1111111" “1”
备注 OCR 寄存器的值作为 ACMD41 的响应
R6( 发布的 A RCA 寄存器响应)
描述 起始位 传输位 CMD3 RCA 寄存器 卡状态位 CRC7 终止位
Bit 47 46 [45:40] [39:8] [7:1] 0
位宽 1 1 6 16 16 7 1
"0" "0" "000011" x x x “1”
备注 专用于命令 CMD3 的响应
R7( 发布的 A RCA 寄存器响应)
描述 起始位 传输位 CMD8 保留 接收电压 检测模式 CRC7 终止位
Bit 47 46 [45:40] [39:20] [19:16] [15:8] [7:1] 0
位宽 1 1 6 20 4 8 7 1
"0" "0" "001000" "00000h" x x x “1”
备注 专用于命令 CMD8 的响应,返回卡支持电压范围和检测模式

4. 参考资料

SDIO参考的资料如下:
在这里插入图片描述
下载地址如下:
https://download.csdn.net/download/ZHONGCAI0901/14975835

猜你喜欢

转载自blog.csdn.net/ZHONGCAI0901/article/details/113694632
今日推荐