SDIO 硬件、协议与 Linux 驱动技术文档
1. SDIO 简介
SDIO(Secure Digital Input Output)协议是SD存储卡的物理接口扩展,允许通过SD总线连接和控制各种I/O设备,如Wi-Fi、蓝牙、GPS模块等。SDIO协议在标准的SD协议基础上扩展,实现了存储和I/O功能的兼容。
2. SDIO 的物理接口和信号
SDIO使用标准的SD物理接口,共有九个针脚,其中五个用于数据传输,四个用于电源和控制信号。
- 数据线:
- DAT[0:3]:四条数据线,用于并行数据传输。SDIO设备可以在1位模式或4位模式下工作。
- 命令线:
- CMD:命令线,主机通过这条线向SDIO设备发送命令,设备也通过这条线向主机发送响应。
- 时钟线:
- CLK:时钟线,由主机提供的时钟信号,所有数据传输都以此为参考时钟。
- 电源线:
- VDD:电源供给,一般为3.3V。
- VSS1和VSS2:地线。
- 卡检测信号:
- CD/DAT3:用于检测卡是否插入。
3. SDIO 的电气特性
- 电压范围:标准SDIO设备工作电压为3.3V,一些低功耗设备可能支持1.8V。
- 时钟频率:SDIO设备的时钟频率范围通常为0到50MHz,具体速率由主机控制器设定。
- 传输模式:SDIO设备可以工作在单线模式或四线模式。
4. SDIO 主机控制器
SDIO主机控制器是管理SDIO设备的核心硬件模块,负责发送命令、接收响应、处理数据传输以及管理时钟和电源。
主机控制器的关键功能:
- 命令发送与接收:通过CMD线向SDIO设备发送命令,并接收设备的响应。
- 数据传输管理:管理通过DAT[0:3]的数据传输,在1位或4位模式下进行。
- 时钟控制:生成并提供CLK信号,所有的SDIO传输都基于此时钟同步。
- 电源管理:控制VDD电压的供应,必要时可以对设备进行供电控制。
- 中断管理:处理SDIO设备发出的中断信号。
- 多设备支持:在同一条SD总线上管理多个设备,通过设备的RCA来区分。
典型的主机控制器类型:
- SDHCI(SD Host Controller Interface):常见的SD主机控制器标准。
- 平台专用控制器:例如ARM SoC中的定制SDIO控制器。
5. SDIO 设备端硬件实现
SDIO设备通常是集成了特定功能的I/O设备,例如Wi-Fi或蓝牙模块。SDIO设备包含若干硬件模块来支持协议操作和功能实现。
设备端的关键模块:
- 协议控制器:处理SDIO命令和数据传输。
- 功能块(Function Blocks):每个功能块执行特定功能(如Wi-Fi、蓝牙)。
- Function 0:通用控制功能。
- Function 1及以上:具体的I/O功能。
- 寄存器结构:
- CCCR(Card Common Control Register):控制设备的整体行为。
- FBR(Function Basic Register):控制具体功能块的操作。
- CIS(Card Information Structure):存储设备描述信息。
- 数据缓冲器:用于临时存储数据块,以提高传输速度。
- 中断管理:通过CMD52命令或硬件中断线发出中断请求。
6. SDIO 通信流程
SDIO通信流程基于命令和响应的模式进行,包括设备的初始化、数据传输和中断处理。
初始化流程:
- 设备检测:主机通过CMD0复位设备。
- OCR读取:主机发送CMD5读取设备的操作电压范围。
- 初始化功能块:主机通过CMD52命令启用功能块并读取设备信息。
- RCA分配:主机通过CMD3为设备分配唯一的RCA。
数据传输流程:
- 选择功能块:通过CMD52命令选择功能块。
- 块数据传输:通过CMD53命令进行多字节数据传输。
中断处理:
- 中断请求:SDIO设备向主机发送中断信号。
- 中断响应:主机使用CMD52命令查询中断状态。
7. SDIO 在 Linux 内核中的实现
Linux内核对SDIO设备的支持通过MMC子系统提供,具体实现如下:
- 主机控制器驱动:位于
drivers/mmc/host/
目录,管理与SD/SDIO设备的物理通信。 - SDIO协议实现:位于
drivers/mmc/core/sdio.c
文件,定义了SDIO协议相关的命令解析、寄存器读写、数据传输和中断处理逻辑。 - 设备驱动:SDIO设备的驱动位于设备的
drivers/net/wireless/
或drivers/bluetooth/
目录。
8. 典型 SDIO 设备和应用
- Wi-Fi模块:用于高速无线数据传输,典型设备如Broadcom、Realtek的Wi-Fi芯片。
- 蓝牙模块:SDIO用于蓝牙设备通信,实现快速响应。
- GPS模块:通过SDIO接口连接GPS芯片,实现定位数据传输。
9. 总结
SDIO协议的硬件实现基于SD卡的物理接口,支持多功能I/O设备的通信。通过主机控制器与设备的协同工作,SDIO实现了存储与I/O功能的集成,支持多种I/O设备应用。SDIO协议的硬件实现不仅支持单字节数据传输,还可以通过块模式实现大数据量传输,适合高速无线通信设备等场景。