SDIO 命令的参数格式(ARG字段)
cmd0~cmd55 命令参数分别是多少
SDIO 命令的参数格式(
ARG字段)因命令而异,通常为 32 位值。以下是 CMD0~CMD55 的参数说明,按功能分类整理:一、基础命令(CMD0~CMD15)
| 命令 | 参数格式 | 主要参数说明 |
|---|---|---|
| CMD0 | 固定为 0 | 无参数,仅用于重置设备。 |
| CMD1 | [31:0]:OCR(操作条件寄存器) |
包含电压范围(如0x00FF8000表示 2.7~3.6V)和 HCS 位(高速容量支持)。 |
| CMD2 | 无参数(ARG=0) |
请求所有设备发送 CID。 |
| CMD3 | 无参数(ARG=0) |
请求设备返回 RCA(相对卡地址)。 |
| CMD4 | [31:0]:DSR 值 |
设置驱动强度(Driver Stage Register)。 |
| CMD5 | [31:8]:OCR 值[7:0]:功能号 |
初始化 SDIO 模式,指定电压范围和目标功能(通常为 0)。 |
| CMD6 | [31:24]:切换模式[23:16]:功能组[15:8]:属性[7:0]:值 |
切换功能或设置总线宽度(如0x00000202表示 4 位总线)。 |
| CMD7 | [31:16]:RCA[15:0]:0 |
选择 / 取消选择设备(RCA=0 表示取消选择)。 |
| CMD8 | [31:12]:保留[11:8]:VHS(电压)[7:4]:保留[3:0]:检查模式 |
检查设备支持的电压(如0x000001AA表示 2.7~3.6V,检查模式 0xAA)。 |
| CMD9 | [31:16]:RCA[15:0]:0 |
请求设备发送 CSD(卡规格数据)。 |
| CMD10 | 同 CMD9 | 请求设备发送 CID。 |
| CMD11 | 无参数(ARG=0) |
停止传输(SD 卡用)。 |
| CMD12 | 无参数(ARG=0) |
强制停止传输(带响应)。 |
| CMD13 | [31:16]:RCA[15:0]:0 |
请求设备发送状态寄存器内容。 |
| CMD15 | [31:16]:RCA[15:0]:0 |
使设备进入非活动状态。 |
二、SD 卡专用命令(CMD16~CMD51)
| 命令 | 参数格式 | 主要参数说明 |
|---|---|---|
| CMD16 | [31:0]:块长度 |
设置数据块长度(如 512 字节 = 0x00000200)。 |
| CMD17 | [31:0]:逻辑块地址(LBA) |
读取单个数据块的起始地址。 |
| CMD18 | 同 CMD17 | 连续读取多个数据块。 |
| CMD24 | 同 CMD17 | 写入单个数据块的起始地址。 |
| CMD25 | 同 CMD17 | 连续写入多个数据块。 |
| CMD27 | 无参数(ARG=0) |
编程 CSD 寄存器(需解锁)。 |
| CMD28 | [31:0]:写保护块地址 |
设置写保护起始块地址。 |
| CMD29 | 同 CMD28 | 清除写保护。 |
| CMD30 | [31:0]:写保护块地址 |
查询写保护状态。 |
| CMD32 | [31:0]:擦除起始块地址 |
设置擦除块的起始地址。 |
| CMD33 | [31:0]:擦除结束块地址 |
设置擦除块的结束地址。 |
| CMD38 | 无参数(ARG=0) |
擦除已设置的块。 |
| CMD51 | [31:16]:RCA[15:8]:功能号[7:0]:0 |
请求发送 SD 配置寄存器(SCR)。 |
三、SDIO 专用命令(CMD52~CMD55)
| 命令 | 参数格式 | 主要参数说明 |
|---|---|---|
| CMD52 | [31]:方向(1 = 读,0 = 写)[30:24]:功能号[23:0]:寄存器地址[31:8]:写入数据(写操作) |
直接读写单个寄存器: - 读:通过地址获取数据 - 写:通过地址写入数据 |
| CMD53 | [31]:方向(1 = 读,0 = 写)[30]:块模式(1 = 块,0 = 流)[29]:传输模式(1 = 多块,0 = 单块)[28:24]:功能号[23:0]:寄存器地址[31:0]:块计数(多块模式) |
读写多个寄存器: - 块模式:固定块大小(如 512 字节) - 流模式:任意长度 |
| CMD54 | 保留 | 未使用。 |
| CMD55 | [31:16]:RCA[15:0]:0 |
指示下一个命令是应用特定命令(ACMD)。 |
四、应用特定命令(ACMDxx,需先发送 CMD55)
| 命令 | 参数格式 | 主要参数说明 |
|---|---|---|
| ACMD41 | [31:0]:OCR 值 |
发送操作条件并初始化 SD 卡(含 HCS 位)。 |
| ACMD61 | [31:24]:保留[23:16]:总线宽度(1=1 位,2=4 位,4=8 位) |
设置总线宽度。 |
| ACMD6 | [31:24]:保留[23:16]:总线宽度(1=1 位,2=4 位) |
设置 SDIO 总线宽度。 |
示例:WiFi 模块常用命令参数
-
CMD52 读寄存器:plaintext
ARG = (1 << 31) | (Function << 24) | (RegisterAddress & 0xFFFFFF) // 例如:读取功能0的0x04寄存器 → 0x80000004 -
CMD52 写寄存器:plaintext
ARG = (0 << 31) | (Function << 24) | (RegisterAddress & 0xFFFFFF) | (Data << 8) // 例如:向功能0的0x04寄存器写入0x12345678 → 0x00000004 + (0x12345678 << 8) -
CMD53 读多块数据:plaintext
ARG = (1 << 31) | (1 << 30) | (1 << 29) | (Function << 24) | (RegisterAddress & 0xFFFFFF) // 例如:从功能0的0x100寄存器开始读16块数据 → 0xE0000100
注意事项
- 参数位宽:所有参数均为 32 位,未使用的位通常填 0。
- 寄存器地址:SDIO 设备的寄存器地址空间由厂商定义,通常为 24 位(
[23:0])。 - 响应类型:不同命令的响应格式(如 R1、R2)不同,需参考具体协议文档。

浙公网安备 33010602011771号