SDIO 控制器是什么?
SDIO 控制器(Secure Digital Input Output Controller)是嵌入式系统中连接非存储类外设的关键模块。它基于扩展的 SD 主机控制器,遵循 SDIO 协议标准,专门用于与 Wi-Fi、蓝牙、FPGA 或自定义从设备进行数据通信。
与传统存储卡不同,SDIO 面向的是外设设备通信。其通信机制采用 命令(CMD)+ 数据(DAT0~DAT3)+ 时钟(CLK) 的组合,支持中断、寄存器访问及异步数据传输等功能。
在实际项目中,如果你需要比 SPI 或 UART 更高带宽且稳定性更好的通信方式,SDIO 是一个非常值得考虑的方案。下面我们从架构、RK3588 平台配置以及 FPGA 实现三个方面展开说明。
SDIO 通信架构
典型的 SDIO 通信链路如下所示:
+-------------------+ +--------------------+
| RK3588 (Host) | <---->| FPGA (Slave) |
| | | |
| SDIO Controller | | SDIO Slave Logic |
+-------------------+ +--------------------+
- 主设备(Host):通常是 ARM SoC(如 RK3588),负责发起命令和时序控制。
- 从设备(Slave):FPGA 模拟 SDIO 设备,响应命令并返回数据。
- 典型线数:CMD、CLK、DAT0~DAT3,可选中断线。
SDIO 控制器的主要功能
| 功能类型 | 说明 |
|---|---|
| 命令控制 | 向设备发送 CMD0~CMD53 等命令 |
| 块/字节传输 | 支持多块(multi-block)与字节级传输 |
| 总线宽度 | 1-bit / 4-bit 模式可选 |
| 中断支持 | 支持设备发起中断(IRQ)到主控 |
| DMA 支持 | 部分 SoC 支持 DMA,可显著提升吞吐量 |
RK3588 的 SDIO 控制器支持
RK3588 内置多个 SDMMC/SDIO 控制器,部分通道可配置为 SDIO 模式。要在实际工程中跑通,通常涉及三个层面:
1. 硬件连线
确保 CMD、CLK、DAT0~DAT3 正确连接到 FPGA 或 WiFi/BT 模块。如果业务需要,还可以添加 CD(卡检测)和 WP(写保护)引脚。
2. 设备树配置 (Device Tree)
在 DTS 中指定该通道为 sdio 模式,而非默认的 mmc 存储设备模式。同时根据硬件情况启用中断、DMA 和总线宽度参数。
3. Linux 驱动开发
Linux 内核中 SDIO 设备走的是 mmc core 框架。主控通过 mmc host 驱动访问 SDIO 设备。如果 FPGA 侧是自定义设备,你需要配套开发 sdio function 驱动,这通常是项目中的难点之一。

