SDIO 控制器介绍及使用场景

什么是 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、总线宽度参数等
  3. 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 开头,编号从 CMD0CMD53,其中 CMD52CMD53 是特定的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)的单个卡。

Read more

从零开发 AR 演讲提词器:基于 Rokid CXR-M SDK 的实战指南

从零开发 AR 演讲提词器:基于 Rokid CXR-M SDK 的实战指南

从零开发 AR 演讲提词器:基于 Rokid CXR-M SDK 的实战指南 站在讲台上,数百双眼睛注视着你。你开始演讲,却发现关键时刻想不起下一句要说什么——这种场景,每个演讲者都不陌生。 传统的解决方案是在讲台上放一张稿子,或者用 PPT 做备注。但低头看稿显得不专业,看 PPT 又要扭头,容易打断演讲节奏。如果能有一个只有自己能看到的"隐形提词器",演讲就能更加从容自信。 Rokid AR 眼镜恰好提供了这种可能:将提词内容无线传输到眼镜显示屏,演讲者只需自然平视,文字便清晰呈现,而台下观众毫无察觉。本文将完整记录如何利用 Rokid CXR-M SDK 从零开发这款演讲提词器应用。 一、技术方案设计 1.1 为什么选择 AR 眼镜 在确定技术方案前,我们先对比几种提词方案: 方案

若依(RuoYi)低代码框架全面分析

若依(RuoYi)低代码框架全面分析

文章目录 * 一、框架概述与技术背景 * 技术架构全景 * 二、核心特长分析 * 1. 完备的权限管理体系 * 2. 高度模块化的系统设计 * 3. 强大的代码生成器 * 4. 丰富的功能组件 * 三、显著短板与局限性 * 1. 技术栈相对保守 * 2. 代码生成器的局限性 * 3. 性能瓶颈与扩展性挑战 * 4. 学习曲线与定制成本 * 四、实际应用场景分析 * 适合场景 * 不适用场景 * 五、与其他框架对比 * 六、总结与展望 一、框架概述与技术背景 若依(RuoYi)是基于Spring Boot的权限管理系统,是中国Java低代码领域的代表性开源框架。其名称"若依"取自"若你"的谐音,体现了"

FPGA商用级ISP:动态坏点校正(DPCC)的滑窗架构与并行判决实现

FPGA商用级ISP:动态坏点校正(DPCC)的滑窗架构与并行判决实现

【写在前面:为什么要写这个专栏?】 在数字图像处理领域,ISP(图像信号处理器)的算法原理并不罕见,但真正能够支持 4K@60fps 实时处理、并经过商用验证的 Verilog 硬核实现思路 却往往秘和封装在黑盒之中。 我手里有一套商用级的 ISP 源码,通过对其进行深度拆解,我希望能够分析并抽象出其背后的设计逻辑。这不仅是对高性能图像处理架构的复盘,更是希望能为广大 FPGA 开发者和 ISP 算法工程师提供一个硬核的设计基线(Baseline)。通过分享这些商用 IP 的实现细节,我希望能帮助更多人了解如何将复杂的图像算法转化为高效的硬件流水线,为行业提供一份有价值的参考。 1. 深度解析:为什么“商用级”坏点校正极其困难? 在传感器(Sensor)制造中,由于半导体工艺缺陷或后期老化,不可避免会出现常亮像素(Hot Pixel)或死像素(Dead Pixel)。 * 痛点一:误杀边缘。 如果只是简单的中值滤波,图像中真实的星星、

【基于无人机搭载相机网络的交互式监控分布式方法】基于无人机搭载摄像头网络的交互式监控分布式方法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室  👇 关注我领取海量matlab电子书和数学建模资料  🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。 🔥 内容介绍 在当今社会,监控已广泛应用于安防、交通、工业生产等多个领域,对于保障社会安全、提高生产效率和优化资源管理起着至关重要的作用。传统的监控方式,如固定摄像头监控,存在监控范围有限、灵活性差等问题,难以满足复杂多变的监控需求。 基于无人机搭载摄像头网络的交互式监控分布式方法为解决这些问题提供了新的思路。无人机具有机动性强、可快速部署的特点,搭载摄像头后能够实现对大面积区域的动态监控。同时,通过构建分布式系统,将数据处理和管理分散化,提高系统的可扩展性和容错性,并实现用户与监控系统的实时交互,大大增强了监控的灵活性和针对性。这种方法在智能安防、应急救援、城市管理等众多领域具有广阔的应用前景。 相关技术与理论基础 1. 无人机技术无人机,即无人驾