跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C

SDIO 控制器原理、架构及 FPGA 通信应用

综述由AI生成SDIO 控制器是嵌入式系统中连接非存储类外设(如 Wi-Fi、蓝牙、FPGA)的重要模块。 SDIO 通信架构、主要功能及 RK3588 的配置方法,包括硬件连线、设备树设置和 Linux 驱动框架。重点阐述了 FPGA 实现 SDIO 从设备的逻辑模块及关键命令集(CMD52/53)。结论指出 SDIO 相比 SPI/UART 具有更高带宽和稳定性,适合定制设备通信,但需自行实现或移植完整的从机协议栈。

JavaCoder发布于 2026/4/6更新于 2026/5/2232 浏览

什么是 SDIO 控制器?

SDIO 控制器(Secure Digital Input Output Controller)是嵌入式系统中非常重要的一个模块,用于通过 SD 接口连接各种 非存储类外设(如 Wi-Fi 模块、蓝牙模块、FPGA、自定义从设备等)。

  • 是一种扩展的 SD 主机控制器(SD Host Controller)。
  • 支持 SDIO 协议标准,可以与支持 SDIO 的从设备进行数据通信。
  • 属于 SD 协议的一部分,但面向的是 外设设备通信,而非存储。
  • 通信采用 命令(CMD)+ 数据(DAT0~DAT3)+ 时钟(CLK)。
  • 支持 中断、寄存器访问、异步数据传输等功能。

接下来对其进行详细的说明,包括定义、架构、常见用途,并以瑞芯微 RK3588 为例说明与 FPGA 设备通信的设计建议。


SDIO 通信架构

+-------------------+     +--------------------+
| RK3588 (Host)     |<--->| FPGA (Slave)       |
|                   |     |                    |
| SDIO Controller   |     | SDIO Slave Logic   |
+-------------------+     +--------------------+
  • 主设备(Host):RK3588(或任意 ARM SoC)
  • 从设备(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)
    • 指定为 sdio 模式,而非 mmc 存储设备模式
    • 启用中断、DMA、总线宽度参数等
  • Linux 驱动
    • Kernel 中 SDIO 设备走的是 mmc core 框架
    • 主控通过 mmc host 驱动访问 SDIO 设备
    • FPGA 侧若为自定义设备,需要配套 sdio function 驱动开发

  • FPGA 实现 SDIO 从设备

    在 FPGA 中实现 SDIO 从设备(Slave)逻辑,需要做到:

    主要模块
    模块功能
    SDIO 命令解析器识别 CMD52(寄存器访问)/CMD53(数据传输)等命令
    寄存器接口映射一些'逻辑地址'用于与 Host 通信
    数据收发模块支持 block/byte 读写
    CRC/校验模块SDIO 有严格的 CRC 校验,需兼容

    SDIO 典型使用场景

    场景描述
    WiFi 模块如 802.11n WiFi 芯片(ESP32、Realtek 等)
    蓝牙模块如 BCM20702、RTL8723 等
    FPGA 通信FPGA 伪装 SDIO 设备,与主控定制通信
    工业 IO 扩展设备如 GPIO/ADC 采集模块

    结论

    • SDIO 控制器是 RK3588 中标准而强大的外设接口,非常适合与 FPGA 等定制设备通信。
    • 如果你需要比 SPI/UART 更高带宽、稳定性更好的通信方式,SDIO 是一个非常值得使用的方案。
    • 不过你需要为 FPGA 实现或移植一个完整的 SDIO 从机协议栈,这通常是项目中较难的一部分。

    附录:SDIO 命令集

    以下是 SDIO(Secure Digital Input Output)命令(CMD)0–53 的完整表格,以及每条命令的说明。

    SDIO 命令用于主机与 SDIO 从设备之间的通信,命令通常以 CMD 开头,编号从 CMD0 到 CMD53,其中 CMD52 和 CMD53 是特定的 IO 命令。

    SDIO 命令表(CMD0 – CMD53)

    CMD 编号命令名称类型描述
    0GO_IDLE_STATEBasic复位所有卡到 Idle 状态。
    1SEND_OP_CONDSDIO启动初始化过程,查询卡是否已准备好(仅 MMC/SDIO)。
    2ALL_SEND_CIDBroadcast获取卡的 CID 寄存器(卡识别码)。
    3SEND_RELATIVE_ADDRAddressed分配并获取卡的 RCA(相对地址)。
    4SET_DSRI/O设置设备状态寄存器(极少使用)。
    5IO_SEND_OP_CONDSDIO检查卡是否为 SDIO 类型,同时启动初始化过程。
    6SWITCH_FUNCSD设置或查询卡功能组(如切换速度模式)。
    7SELECT/DESELECT_CARDAddressed选择或取消选择卡。
    8SEND_IF_CONDSD检查电压范围、接口条件(用于识别 SD v2.0+)。
    9SEND_CSDAddressed获取 CSD 寄存器(卡的容量、速度等参数)。
    10SEND_CIDAddressed获取 CID 寄存器。
    11READ_DAT_UNTIL_STOPDeprecated已废弃。读取数据直到发送 STOP。
    12STOP_TRANSMISSIONAddressed停止多块读/写操作。
    13SEND_STATUSAddressed获取卡的状态寄存器。
    14BUSTEST_RTest总线测试读取(用于制造测试)。
    15GO_INACTIVE_STATEBroadcast将卡切换为 Inactivate 状态。
    16SET_BLOCKLENAddressed设置块长度(默认 512 字节)。
    17READ_SINGLE_BLOCKAddressed读取单个块数据。
    18READ_MULTIPLE_BLOCKAddressed连续读取多个块。
    19BUSTEST_WTest总线测试写入(用于制造测试)。
    20WRITE_DAT_UNTIL_STOPDeprecated已废弃。写入数据直到 STOP。
    21Reserved保留命令。
    22Reserved保留命令。
    23SET_BLOCK_COUNTAddressed设置将要传输的块数(预写命令)。
    24WRITE_BLOCKAddressed写入一个块数据。
    25WRITE_MULTIPLE_BLOCKAddressed连续写入多个块数据。
    26PROGRAM_CIDManufacturer编程 CID 寄存器(一次性写入)。
    27PROGRAM_CSDManufacturer编程 CSD 寄存器(极少使用)。
    28SET_WRITE_PROTAddressed设置写保护。
    29CLR_WRITE_PROTAddressed清除写保护。
    30SEND_WRITE_PROTAddressed查询写保护状态。
    31SEND_WRITE_PROT_TYPEAddressed查询写保护类型(永久/临时)。
    32ERASE_WR_BLK_STARTAddressed指定擦除操作的起始地址。
    33ERASE_WR_BLK_ENDAddressed指定擦除操作的结束地址。
    34Reserved保留命令。
    35ERASE_GROUP_STARTAddressed指定擦除组起始地址(大容量卡)。
    36ERASE_GROUP_ENDAddressed指定擦除组结束地址(大容量卡)。
    37Reserved保留命令。
    38ERASEAddressed执行擦除操作。
    39FAST_IOSDIO单位寄存器级别写操作(用于寄存器 IO,极少使用)。
    40GO_IRQ_STATESDIO用于中断处理状态控制。
    41Reserved保留(用于旧版兼容性)。
    42LOCK_UNLOCKAddressed启用卡锁功能。
    43–49Reserved保留命令。
    50General CommandSDIO保留供未来 SDIO 使用。
    51IO_RW_DIRECTSDIOSDIO 直接读写命令(CMD52)别名。
    52IO_RW_DIRECTSDIO直接读写单字节寄存器,用于配置。
    53IO_RW_EXTENDEDSDIO用于读写多个字节(块/流)数据。

    补充说明

    • CMD52 和 CMD53 是 SDIO 通信中最关键的命令:
      • CMD52(IO_RW_DIRECT):用于访问单字节寄存器(如功能寄存器、配置寄存器等)。
      • CMD53(IO_RW_EXTENDED):用于批量读写,可以是块模式或字节流模式,适用于高速数据传输。
    • 广播命令(Broadcast) 作用于总线上所有卡,而非特定卡。
    • Addressed 命令 作用于已分配相对地址(RCA)的单个卡。

    目录

    1. 什么是 SDIO 控制器?
    2. SDIO 通信架构
    3. SDIO 控制器的主要功能
    4. RK3588 的 SDIO 控制器支持
    5. 如何使用:
    6. FPGA 实现 SDIO 从设备
    7. 主要模块
    8. SDIO 典型使用场景
    9. 结论
    10. 附录:SDIO 命令集
    11. SDIO 命令表(CMD0 – CMD53)
    12. 补充说明
    • 💰 8折买阿里云服务器限时8折了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 🤖 一键搭建Deepseek满血版了解详情
    • 一键打造专属AI 智能体了解详情
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • Java IO 流进阶:字符流与字节流的核心应用
    • MySQL 数据类型核心指南:选型、实战与避坑
    • Llama Factory 微调显存计算器与云端资源配置
    • SQLSugar 封装原理详解:架构与核心模块底层实现
    • JavaScript 逆向解析实战:破解现代代码混淆技术
    • AI 绘画在商业设计中的应用与版权解析
    • AI Agent 生产级框架实战:架构、记忆与工具调用详解
    • 本地运行大模型工具:Ollama 安装与使用详解
    • MCP 模型上下文协议详解及在 IDE 与 Spring AI 中的应用
    • Linux 进程间通信进阶:管道与共享内存实战
    • 前端微前端架构:告别巨石应用
    • 大模型时代的机遇与挑战:技术赋能与个人成长
    • C/C++ 输入输出详解:OJ 场景与性能优化
    • 鸿蒙 ArkWeb 组件内核:加载机制与 Cookie 管理
    • 前端监控实战:错误、性能与用户行为实时监测
    • LLM 大模型测试策略与方法
    • JDK 1.8 在 Windows 系统下的安装与配置教程
    • VSCode 自定义 Copilot Agent 与 Awesome Agent 模板
    • SuperMap iClient3D for WebGL 集成大华 RTSP 与 WebSocket 视频投放方案
    • AR 系列摄像头发展历程与参数规格分析

    相关免费在线工具

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

    • HTML转Markdown

      将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

    • JSON 压缩

      通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

    • JSON美化和格式化

      将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online