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 读寄存器:plaintextARG = (1 << 31) | (Function << 24) | (RegisterAddress & 0xFFFFFF) // 例如:读取功能0的0x04寄存器 → 0x80000004
- 
CMD52 写寄存器:plaintextARG = (0 << 31) | (Function << 24) | (RegisterAddress & 0xFFFFFF) | (Data << 8) // 例如:向功能0的0x04寄存器写入0x12345678 → 0x00000004 + (0x12345678 << 8)
- 
CMD53 读多块数据:plaintextARG = (1 << 31) | (1 << 30) | (1 << 29) | (Function << 24) | (RegisterAddress & 0xFFFFFF) // 例如:从功能0的0x100寄存器开始读16块数据 → 0xE0000100
注意事项
- 参数位宽:所有参数均为 32 位,未使用的位通常填 0。
- 寄存器地址:SDIO 设备的寄存器地址空间由厂商定义,通常为 24 位([23:0])。
- 响应类型:不同命令的响应格式(如 R1、R2)不同,需参考具体协议文档。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号