1. SDIO协议概述与版本演进
各位好,今天咱们来聊聊SDIO。说白了这个课程的第一章,就是要把SDIO这个“东西”从头到尾捋一遍。
很多工程师一上来就扎进测试用例的细节里,结果发现很多基础概念还没搞透。我个人习惯是,先花半小时把协议的全貌看清楚,后面的路会顺很多。
SDIO,全称是Secure Digital Input Output。你可以把它理解成:在SD卡的标准上,加了一个I/O通道。
为什么要有这个东西?你想想看,手机、平板、嵌入式设备上已经有一个SD卡槽了。如果我还要加个Wi-Fi、蓝牙、GPS模块,是不是还得再开个接口?成本太高了。有了SDIO,我直接在现有SD卡槽上插I/O设备就行了。
1.1 从SD卡到SDIO的演变
最早SD卡只是存储介质。但SD协会发现,这个总线速度不错,电气特性也稳定。
与其另起炉灶搞一个新接口,不如“一卡多用”。
就这样,SDIO 1.0在2001年前后正式发布。我印象里,第一个大规模使用SDIO的产品,是带Wi-Fi功能的PDA。
版本迭代上,有几个关键节点:
| 版本 | 发布时间 | 核心特性 | 最高速率 |
|---|---|---|---|
| SDIO 1.0 | 2001 | 基本I/O操作,1-bit模式 | ~12.5 MB/s |
| SDIO 2.0 | 2006 | 4-bit模式,高速模式支持 | ~50 MB/s |
| SDIO 3.0 | 2011 | UHS-I(超高速第一代) | ~104 MB/s |
| SDIO 4.0/4.1 | 2014-2016 | UHS-II,双行数据通道,更低的延迟 | ~312 MB/s |
1.2 协议栈的逻辑分层
你看到的是物理接口,但协议内部是分层的。我大概画了个逻辑图,你参考一下:
这个图怎么看?
- 物理层:负责时钟、命令线、数据线的电气特性。说白了,得能通。
- 传输层:负责命令怎么发、怎么回、CRC怎么算。这是一致性测试的主要战场。
- 应用层:对于I/O设备,就是读写寄存器、操作FIFO、处理中断。对于存储卡,是文件系统的读写。
1.3 命令-响应机制
SDIO里没有“请求-应答”之外的第二种通信方式。你想发数据?先发命令。主机问,设备答。
命令分几种类型,我整理了一张对比表:
| 命令类型 | 示例命令 | 方向 | 读写数据 |
|---|---|---|---|
| 无响应 (b) | CMD0 (复位),CMD15 (取消选择) | 主机 → 设备 | 无 |
| 有响应 (b) | CMD5 (I/O模式),CMD3 (相对地址分配) | 主机 ← 设备 | 无 |
| 带数据 (b) | CMD53 (字节/块读写,SDIO最常用) | 双向 | 有 |
| 多块 (b) | CMD18 (多块读,存储卡场景) | 双向 | 有 |
你写测试用例的时候,一定会大量遇到CMD53。它既可以读一个字节,也可以读写一个块。具体怎么用,我们后面章节会拆开讲。
这里我留一句提醒:别小看CMD0。虽然它只是复位命令,但如果时序或者电平没对上,设备根本不会响应后续任何命令。
1.4 版本演进对验证的影响
版本演进,说白了就是两个维度的提升:速度和功能。
- 速度:从12.5 MB/s到312 MB/s。你需要验证时钟频率、数据窗口、信号完整性。
- 功能:比如UHS-II引入了双面数据通道、更复杂的初始化流程。这些功能每加一点,测试用例就要多一套。
我个人的建议是:在制定测试计划时,先锁定项目支持的最高版本。然后向下兼容到2.0。3.0的UHS-I其实用得不多,很多设备会直接跳到4.1或稳定在2.0。
1.5 小结与验证思路
第一章的内容,说白了就是给后面的测试用例打地基。
你理解了SDIO是“在SD总线上嫁接I/O功能”,知道了各个版本的特征,并且熟悉了命令-响应这个核心互动模式——那么接下来我们写测试用例时,就不会在“为什么这个命令没响应?”这种问题上卡太久。
接下来,我们会深入到具体的测试用例设计。嗯,咱们先从物理层和命令层开始慢慢破局。