2. SDIO符合性测试标准介绍:SD协会规范、测试项分类

咱们做SDIO测试,首先得搞清楚标准是谁定的,测哪些东西。说白了,这套规矩是SD协会(SD Association,简称SDA)定的。我早期入行时,总觉得看规范文档特别枯燥,后来吃过几次亏才明白——规范里每一句话,背后都可能是一个坑。

2.1 SD协会规范体系

SD协会定义的规范文档很多,跟我们硬件测试最相关的,主要是这几本:

规范名称 版本参考 覆盖范围
SD Physical Layer Specification Ver6.0 / 7.0 电气特性、时序、命令格式
SDIO Card Specification Ver4.0 / 4.1 I/O功能、中断、多块传输
SD Host Controller Specification Ver4.20 主机端寄存器、DMA接口
SD Compliance Test Specification 最新修订版 测试用例、判定标准

很多人以为只要看SDIO Card Spec就够了。错。我做第一个项目时,只看了IO相关章节,结果电气特性没过,后来才发现Physical Layer里定义了信号上升时间和下降时间的限值。嗯,从那以后我学乖了,这两本必须一起看。

注意: 版本号非常关键。SDA每隔一两年就会更新规范,旧版本里存在歧义的地方在新版里通常会有补充说明。每次做新项目前,我建议先去SDA官网确认一下当前最新的规范版本。

2.2 测试项三大分类

SDIO符合性测试,按测试维度可以分为三大类:电气测试、时序测试、协议测试。这三者之间是层层递进的关系。电气不过,时序就不用看了;时序不满足,协议层跑得再花哨也是白搭。

我画了一张图,帮你看清这三类测试的关系:

SDIO符合性测试三大分类与关系 SDIO符合性测试 ① 电气测试 ② 时序测试 ③ 协议测试 输出电压电平 上升/下降时间 驱动能力 时钟周期 建立/保持时间 输出延迟 命令/响应交互 CRC校验 状态机切换 依赖关系:电气 → 时序 → 协议(底层不过,上层无意义)

2.3 电气测试:最基础也最容易忽略

电气测试,说白了就是检查物理层的信号质量。你用示波器看波形,该高的时候高,该低的时候低,不能毛刺一片。

核心测试项包括:

  • 输出电压电平(VOH / VOL):主机输出高电平要在0.625×VDD以上,低电平要在0.25×VDD以下。我见过不少方案用1.8V供电,结果高电平只到1.1V,直接被判失败。
  • 上升/下降时间:太快会产生过冲,太慢会导致时序窗口不够。规范要求在2ns~10ns之间(具体看工作模式)。
  • 驱动能力:输出电流要够,否则带不动负载。特别是当SDIO线路上并联了ESD保护器件时,很容易吃掉驱动余量。
小技巧: 先测静态电平,再用示波器看信号边沿。如果边沿有明显振铃,优先检查PCB走线的阻抗匹配。我曾经因为一条CLK走线绕了太多弯,导致信号过冲超标,最后发现是阻抗不连续的问题。

2.4 时序测试:卡在中间最难受

电气测试过了,接下来就是时序。这一块是排查过程中最磨人的,因为问题往往不是一眼能看出来的。

关键时序参数:

参数 符号 典型限值(DS模式)
时钟频率 fCLK 0~25 MHz
建立时间(CMD/DAT → CLK) tSU ≥ 3 ns
保持时间(CLK → CMD/DAT) tH ≥ 2 ns
数据输出延迟 tODLY ≤ 14 ns

你想想看,现在SDIO最高跑到了UHS-I模式下的104MHz。频率越高,时序裕量越小。我调试过一个WiFi模组,低速模式下一切正常,切到高速就随机丢包。查了三天,发现是保持时间差了0.5ns。嗯,就是这零点几纳秒的事。

排查建议:

  • 用示波器测量时钟和数据线之间的相对延迟
  • 检查PCB上CLK线是否比数据线长太多或短太多
  • 留意IO Cell内部的延时可调寄存器,有时需通过软件微调

2.5 协议测试:业务逻辑的照妖镜

电气和时序都OK了,终于可以测协议了。协议测试主要验证命令和响应的交互是否按照规范来。说白了,就是看你的设备会不会说人话。

协议测试的几个核心方向:

  1. 命令/响应格式:检查CMD索引、响应类型、CRC7校验。我最常遇到的是设备在发送响应时CRC算错了,或者把响应类型弄混了。
  2. 状态机转换:SDIO卡有一张完整的状态转移图。比如卡在disconnect状态下收到CMD7,应该返回什么?规范里写得清清楚楚。
  3. 数据块传输:包括块长度、块计数、CRC16校验。多块传输时还要检查停止命令的时序窗口。
  4. 中断机制:SDIO特有的卡中断功能。中断信号必须在指定窗口内拉低,否则主机可能漏检。
特别提醒: 协议测试建议使用逻辑分析仪同时抓取CLK、CMD、DAT[3:0]四根线。只看CMD线的同学,我只能说你还太年轻。DAT线上的卡中断和读等待信号坑非常多,我第一次做SDIO项目时花了整整两天才定位到一个DAT1线被意外拉低的问题。

2.6 三类测试的排查优先级

做个简单的总结。我排查问题时,永远遵循这个顺序:

  • 第一步:示波器看波形,确认电气参数合规
  • 第二步:用时序分析工具量建立/保持时间
  • 第三步:逻辑分析仪抓协议,验证命令响应交互
  • 第四步:跑完整的符合性测试用例,逐条过

这个顺序不是随便定的。电气问题是根源,时序问题是桥梁,协议问题是表象。底子没打好,上面怎么修都白搭。

好了,这一章的内容就是这些。标准体系搞清楚了,测试项分类也明白了,后面各章我们就针对这些测试项,一个一个讲具体的失败案例和排查方法。