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 驱动,这通常是项目中的难点之一。
FPGA 实现 SDIO 从设备
在 FPGA 中实现 SDIO 从机逻辑,核心在于理解协议栈。主要模块包括:

