SDIO(Secure Digital Input/Output)是一种基于 SD 卡协议的通信接口,专为可扩展设备设计,除存储功能外还支持外部设备(如 Wi-Fi、蓝牙模块)的连接。以下从协议架构、通信流程、数据传输模式等方面详细解析其通信原理:
主机 从设备(SD卡/SDIO设备) | | |-- 发送≥74个CLK周期 --> | (复位设备,进入IDLE状态) | | |-- 发送CMD0 (GO_IDLE_STATE) -->| (切换至SPI或SD模式) | |<-- 响应R1 (IDLE位=1) |-- 发送CMD8 (SEND_IF_COND) -->| (检查电压支持和版本) | |<-- 响应R7 (电压范围+电气特性) |-- 循环发送CMD55+ACMD41 --> | (初始化卡,等待退出IDLE状态) | |<-- 响应R1 (IDLE位=0表示就绪) |-- 发送CMD2 (ALL_SEND_CID) -->| (获取卡识别码) | |<-- 响应R2 (CID数据块) |-- 发送CMD3 (SEND_REL_ADDR) -->| (分配相对地址RCA) | |<-- 响应R1 (RCA值)
主机 从设备 | | |-- 发送CMD17 (READ_SINGLE_BLOCK) -->| | 参数:块地址 | | |<-- 响应R1 (无错误) | | | |<-- 发送数据令牌 (0xFE) | |<-- 发送数据块 (512字节) | |<-- 发送CRC校验 (16位) |-- 发送ACK (通过CLK) --> |
主机 从设备 | | |-- 发送CMD24 (WRITE_SINGLE_BLOCK) -->| | 参数:块地址 | | |<-- 响应R1 (无错误) |-- 发送数据令牌 (0xFE) --> | |-- 发送数据块 (512字节) --> | |-- 发送CRC校验 (16位) --> | | |<-- 响应数据响应令牌 | | (0x05=成功,其他=错误) | | (随后进入写状态,直到忙结束)
所有命令均由主机发送,格式为:
模式 | 时钟频率 | 数据位宽 | 理论最大带宽 |
---|---|---|---|
标准模式 | ≤25MHz | 1 位 | 25Mbps |
高速模式 (HS) | ≤50MHz | 1/4 位 | 50/200Mbps |
UHS-I SDR104 | ≤52MHz | 4 位 | 208Mbps |
UHS-II DDR50 | ≤50MHz | 8 位 | 400Mbps |
特性 | SD 卡(存储) | SDIO 设备(功能扩展) |
---|---|---|
功能 | 数据存储 | 提供额外功能(如 Wi-Fi、GPS) |
命令集 | 支持存储相关命令(如读 / 写块) | 支持功能扩展命令(如 FBR、IO_RW_DIRECT) |
寄存器结构 | 包含 CSD、CID 等存储参数寄存器 | 包含功能寄存器(如 GPIO 控制、中断状态) |
电源管理 | 支持睡眠 / 唤醒 | 支持更细粒度的功能模块电源控制 |
SDIO 通过分层协议设计和灵活的数据传输模式,实现了高速、可靠的设备通信。其核心在于命令 - 响应机制和多线并行传输能力,既支持大容量存储,也支持功能扩展设备。理解 SDIO 通信原理对开发嵌入式系统、物联网设备及消费电子产品至关重要。
下一篇:没有了!