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 模块常用命令参数

  1. CMD52 读寄存器:
    plaintext
     
     
    ARG = (1 << 31) | (Function << 24) | (RegisterAddress & 0xFFFFFF)
    // 例如:读取功能0的0x04寄存器 → 0x80000004
    
     
  2. CMD52 写寄存器:
    plaintext
     
     
    ARG = (0 << 31) | (Function << 24) | (RegisterAddress & 0xFFFFFF) | (Data << 8)
    // 例如:向功能0的0x04寄存器写入0x12345678 → 0x00000004 + (0x12345678 << 8)
    
     
  3. 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)不同,需参考具体协议文档。
posted @ 2025-06-24 19:10  tianxincode  阅读(167)  评论(0)    收藏  举报