一、简介
SDIO(Secure Digital Input and Output): 安全数字输入输出。是基于 SD(Secure Digital)卡标准 扩展的 通用输入输出接口协议。不仅兼容之前的SD卡协议,还增加了数据传输和外设控制能力。广泛运用在WIFI模块、蓝牙模块、GPS等嵌入式系统中。
二、硬件接口
SDIO有SPI、1-bit、4-bit三种工作模式,4-bit
信号名称 |
SPI模式 |
1-bit 模式 |
4-bit 模式 |
CLK |
时钟信号(主控输出) |
时钟信号(主控输出) |
时钟信号(主控输出) |
CMD |
MOSI(主控输出数据) |
双向命令/响应通道 |
双向命令/响应通道 |
DAT0 |
MISO(设备输出数据) |
双向数据通道(单线传输) |
双向数据通道 |
DAT1 |
未使用或NC |
未使用(保留) |
双向数据通道 |
DAT2 |
未使用或NC |
未使用(保留) |
双向数据通道 |
DAT3 |
片选(CS,主控输出) |
未使用或设备检测(CD) |
双向数据通道 |
VCC |
电源(3.3V或1.8V) |
电源(3.3V或1.8V) |
电源(3.3V或1.8V) |
GND |
地 |
地 |
地 |
最大速度 |
<25 MHz(低速模式) |
≤ 50 MHz(默认模式) |
≤ 208 MHz(UHS-I SDR模式) |
硬件设计关键点:
- CLK长度 ≤ 50mm,远离高频噪声源(如USB、RF天线);源端串联 22Ω电阻 并联6~10pF电容抑制反射提高信号完整性(尤其UHS模式)。
- CMD、DAT0-DAT3以CLK为基准做等长,长度误差控制在3mil以内.
- 使用插拔设备时,DATA3需要上拉用于插入检测,非可插拔设备可不加上拉。在SPI和1-bit模式下未使用的引脚可以悬空也可以上拉(10kΩ),CLK 通常不需要上拉。
三、SDIO上电初始化流程
上电后,SDIO默认是1-bit模式,频率为400KHz,初始化时,Host先查询卡是否支持4线制,如果支持,则通 过CMD命令将总线切换至4线制。
SDIO支持3.3V和1.8V两种电平状态,由于不管是那种电平工作状态,在上电时都默认为3.3V电平状态,所以在使用1.8V时相对3.3V会有电平切换。两种电平工作状态下的初始化具体流程如下:
A:3.3V设备具体初始化流程:
上电→ 复位→ 检查电压兼容性→初始化设备→设置工作模式→进入数据传输模式。
1. 初始上电(3.3V)主机提供3.3V电源(VDD)。时钟(CLK)初始频率设为 ≤400kHz(低速模式)。主机检测DAT3(Card Detect, CD)引脚,判断设备是否插入。
2. 发送复位命令(CMD0)主机发送 CMD0(GO_IDLE_STATE),使设备进入Idle状态。注意:CMD0必须在3.3V下发送,即使设备后续支持1.8V。
3. 检查电压兼容性(CMD8)查询设备是否支持SDIO协议及电压范围。设备返回 OCR(Operating Conditions Register),指示支持的电压(如3.3V)。
4. 初始化设备(ACMD41)协商工作电压和容量类型。
5. 配置总线宽度(ACMD6)切换至 4-bit模式(DAT0-DAT3)。默认情况下,SDIO仅使用 DAT0(1-bit模式)。
6. 进入数据传输模式主机提高时钟频率(如 25MHz 标准模式或 50MHz 高速模式)。
B:1.8V设备的初始化流程(UHS模式)
上电→ 检查电压兼容性→电压切换→ 主机切换至1.8V供电→初始化设备→ 进入数据传输模式。
1. 初始上电(3.3V)必须 先以 3.3V 供电,时钟频率 ≤400kHz。
2. 检查电压兼容性(CMD8 + ACMD41)主机发送 CMD8,设备返回支持的电压范围(如 3.3V & 1.8V)。主机发送 ACMD41,设备在OCR寄存器中设置 Bit24(1.8V支持标志)。
3. 发送电压切换命令(CMD11)请求切换至1.8V。设备返回 R1响应,确认准备切换。
4. 主机切换至1.8V供电主机调整PMIC/LDO,将VDD从 3.3V降至1.8V。关键点:切换期间,CLK必须保持 ≤400kHz。DAT[3:0] 必须保持 低电平(协议要求)。
5. 重新初始化设备主机重新发送 CMD0,确保设备进入正确状态。提高时钟频率至 UHS-I模式(如208MHz DDR)。
6. 进入高速数据传输设备以 1.8V LVCMOS电平 运行,支持更高速度(如SDR104模式)。
四、命令与响应数据包
1、命令
SDIO命令由48位(6字节)组成,结构如下:
位域 |
长度(bit) |
描述 |
Start |
1 |
固定为0,表示命令开始。 |
Trans |
1 |
传输方向:1(主机→设备),固定为1。 |
CMD |
6 |
命令编号(如CMD0=0x00,CMD5=0x05,CMD52=0x34等)。 |
Arg |
32 |
命令参数(具体含义由CMD决定,如地址、数据、控制位等)。 |
CRC7 |
7 |
循环冗余校验(覆盖CMD+Arg),用于检测传输错误。 |
End |
1 |
固定为1,表示命令结束。 |
2、响应
响应分为多种类型(R1、R2、R3等),具体由命令决定。常见响应格式如下:
(1)R1响应(普通命令响应,48位)
位域 |
长度 |
描述 |
Start |
1 |
固定为0。 |
Trans |
1 |
传输方向:0(设备→主机)。 |
CMD |
6 |
响应对应的原命令编号(如CMD5的响应中CMD=0x05)。 |
Status |
32 |
状态寄存器(包含设备状态、错误标志等,详见下表)。 |
CRC7 |
7 |
校验位(覆盖CMD+Status)。 |
End |
1 |
固定为1。 |
R1的Status字段解析(关键位):
位 |
名称 |
说明 |
31 |
READY_FOR_DATA |
设备是否准备好传输数据(1=就绪)。 |
19 |
APP_CMD |
下一条命令是否为应用特定命令(ACMD)。 |
15 |
ILLEGAL_CMD |
上一条命令是否非法(1=错误)。 |
8 |
IDLE_STATE |
设备是否处于Idle状态(1=Idle)。 |
0 |
OUT_OF_RANGE |
地址或块长度是否超限(1=错误)。 |
(2)R2响应(CID/CSD寄存器读取,136位)
用于返回设备的CID(Card ID)或CSD(Card Specific Data)寄存器内容:
- 格式:R1响应(48位) + 额外数据(88位)。
- 无CRC校验,依赖前导R1的CRC7。
(3)R3响应(OCR寄存器读取,48位)
与R1格式相同,但Status字段替换为OCR(Operating Conditions Register):
- Bit24:1表示设备支持1.8V电压(关键UHS模式标志)。
五、 数据传输时序
(1)命令阶段
- 主机在CLK上升沿发送48位命令(MSB优先)。
- 设备在CLK下降沿采样命令。
(2)响应阶段
- 设备在收到命令后,延迟1-8个CLK周期返回响应。
- 主机在CLK上升沿采样响应(MSB优先)。
(3)数据阶段
- 读操作:设备在CLK下降沿输出数据,主机在上升沿采样。
- 写操作:主机在上升沿输出数据,设备在下降沿采样。
六、SDIO特点
多功能接口:SDIO接口不仅支持存储卡功能,还可以连接其他外设,如无线网络模块、摄像头、GPS模块等。
高速数据传输:SDIO接口支持高速数据传输,具有快速读写速度和低延迟特性。
可靠性和安全性:SDIO接口通过校验和错误检测等机制来保证数据传输的可靠性,并支持数据保护和加密功能。