波形时序异常(CS / CLK / DI / DO)· 样机排查手册
编制日期 2026-09-21 | 版本号 Rev 1.0
XTX 芯天下 · FAE 现场技术文档 | 样机阶段四线波形判读与整改(SPI NOR / SPI NAND / SD NAND / PPI NAND / eMMC)| 2026-09 版
本文所有时序参数、命令码、寄存器位与控制器配置项,都只写通用机制与排查方向;具体数值一律以器件 datasheet 与主控手册为准。
- SPI 的 CPOL / CPHA 组合、dummy cycle 数、命令码(读 JEDEC ID 常见为 9Fh)在不同器件与主控上并不统一,动手前逐条核对手册。
- 建立 / 保持时间、时钟频率上限、IO 电平门限、上拉阻值以 datasheet 的 DC / AC 特性表为准,本文只讲「在哪一沿量、量什么」。
- eMMC / SD NAND 走 CLK / CMD / DAT 协议而非四线 SPI,本文的形态学判据可以类比,但采样沿、枚举时序与寄存器定义以对应协议与专篇为准;飞线寄生引入的问题另见《飞线与转接板引入故障_样机排查.html》。
一句话结论:样机阶段的波形异常, 先分清是「测出来的」还是「板子上的」——换接地方式波形就变,是测量问题; 换接地方式波形不变而降频就好,是时序裕量问题; 降频也不好,就别再盯着波形,去查驱动配置与器件状态。 四线里 CS# 定帧边界、CLK 定采样时刻、DI 定命令有没有送到、DO 定器件有没有应答, 逐根确认比通盘乱猜快一个数量级。
这份文档解决什么
解决的是样机阶段看 SPI 四线(以及 eMMC / SD 的 CLK、CMD、DAT)波形时, 看着「不对劲」却说不清是哪一类问题的定位与整改。覆盖 SPI NOR / SPI NAND / SD NAND / PPI NAND / eMMC 的常见异常形态, 按「形态 → 根因 → 处置 → 验证」组织:第 6 章是可翻查的速查表,第 7 章是可带的核查清单。
怎么用这份文档
- 先把测量做对:探头补偿、接地弹簧、探点在芯片引脚近端。
- 认形态:把波形对到图 4 的六种形态上,确定是哪根线的哪类异常。
- 跑决策树:按第 3 章四个判定逐项回答,不要跳到「改分频」。
- 一次只改一个变量:改完重抓同一帧并留截图。
- 以量产条件闭环:目标时钟 + 目标温度 + 目标电压三者同时成立才结案。
1. 问题本质:四线该长什么样
四线波形是样机阶段唯一能直接看到「主控与器件到底说了什么」的一手证据。 本章先把每根线合格时长什么样定死——有了标准形态,异常才认得出来, 才谈得上后续的逐项排查。
1.1 四线的职责与合格判据
四条线分工很清楚:三条由主控驱动(CS#、CLK、DI),一条由器件驱动(DO)。 判一根线是否合格,就看三件事:谁在驱动它、空闲时该是什么电平、边沿该在哪个时刻。 下表是后面所有章节的基准。
| 信号 | 驱动方 | 空闲态 | 合格形态 | 一眼可见的错 |
|---|---|---|---|---|
| CS#(片选) | 主控 | 高(通常需上拉) | 整帧内稳定为低,下降 / 上升沿单调无毛刺,低电平宽度覆盖全部时钟 | 全程为高、提前抬升、上毛刺、上电浮空 |
| CLK(时钟) | 主控 | 低(mode 0/1)或高(mode 2/3) | 边沿单调、占空比接近 50%%、无振铃过冲、无额外毛刺 | 振铃、过冲、毛刺、占空比失衡、边沿过缓 |
| DI(MOSI) | 主控 | 不定(由主控决定) | 命令与地址位型完整,位边界对齐时钟沿,高电平接近 VCCQ | 浮空在中间电平、位型缺失、幅度不足 |
| DO(MISO) | 器件 | 高阻 | 命令阶段保持高阻,数据阶段按位输出;未被选中时必须为高阻 | 常高阻无应答、中间电平、与 DI 位型完全相同 |
1.2 标准帧:mode 0 读 ID 长什么样
把「读 JEDEC ID」这一帧抓全,是判断四线是否健康的最小充分动作: 它有命令阶段(主控驱动 DI)和数据阶段(器件驱动 DO), 能同时验证两个方向的驱动能力与相位关系。下图是 CPOL=0 / CPHA=0(mode 0)下的标准形态。
三条最值得记住的相位关系:CS# 必须在第一个时钟沿之前就稳定为低 (通常称为片选建立时间,量值以 datasheet 为准);主机在下降沿切换数据; 主机在上升沿采样从机送出的数据。这三条成立,相位关系就是对的。
1.3 判波形的三条铁律
因为它们对应的是三种最常见的方向性错误:没帧就抠位型,是在没有时间基准的情况下量时间;不定驱动方就判电平,会把正常的高阻误判成故障;不定采样沿就谈建立保持,得到的数字再漂亮也是错的。现场八成的反复返工,都出在这三件事没先定下来。
- 铁律一:先看有没有帧,再看帧里对不对。CS# 没有干净的下降沿, 或 CLK 在 CS# 为低期间没有连续时钟,后面所有位型分析都没有意义——先修帧边界。
- 铁律二:先定驱动方,再判电平。高阻期间出现中间电平是正常的, 驱动期间出现中间电平才是故障。
- 铁律三:先定采样沿,再谈建立保持。建立 / 保持是 相对于采样沿定义的,采样沿没找准(模式错、dummy 数错),量出来的数值毫无意义。
2. 先排除测量本身
样机阶段相当一部分「波形异常」是探头自己造出来的。 花三分钟把测量本身做对,能省掉半天误判——这一章必须排在根因分析之前。
2.1 探头造成的三种假象
示波器探头不是理想导线,它有输入电容、输入电阻和一条地线。 地线与信号线围成的环路会拾取开关噪声,并在快速边沿上激发谐振。 下图是同一探点只换接地方式后的差别。
三种最常见的假象,以及它们的识别方法:
| 假象 | 波形表现 | 为什么是假的 | 识别方法 |
|---|---|---|---|
| 假振铃与假过冲 | 每个边沿上叠一串衰减振荡,幅度很大 | 长鳄鱼夹地线与探头电容构成谐振回路,边沿越快越明显 | 换成接地弹簧后振铃显著减小甚至消失 |
| 探头一碰就好 | 探笔压上时通信正常,抬起来就失败 | 探头输入电容改变了该节点负载与边沿速率,恰好把时序拉回合格区 | 换低电容探头或用 10× 档复核;这是裕量不足的强信号 |
| 幅度与形状失真 | 方波变圆角或过冲,高电平达不到 VCCQ | 探头未做补偿校准,或带宽不足以支撑该边沿速率 | 回到校准信号重新补偿;确认探头带宽与边沿速率匹配 |
2.2 接地与探针规范 SOP
- 先做探头补偿校准:接到方波校准输出上,调到方波既不过冲也不圆角。
- 用接地弹簧代替长鳄鱼夹:压在探点最近的地焊盘上,环路 ≤ 2 cm。
- 探点选在芯片引脚近端:不要探排针远端,那量到的是走线末端的反射。
- 优先用 10× 档:输入电容更小,负载效应更低(带宽以探头手册为准)。
- 同时看 VCC:另一通道交流耦合,确认读写瞬间有没有跌落。
- 留一张基线截图:把已知好板在同一探点、同一时基下的波形存下来。
错误一:用 15~20 cm 鳄鱼夹地线量几十兆赫时钟。量出来一定有振铃,但那个振铃属于探头不属于板子:换接地方式波形跟着变,就是测量问题。
错误二:把「探头一碰就好」当成问题解决了。这恰恰说明裕量已薄到只剩一个探头电容,量产批次一漂移就翻车,应作为信号完整性问题立项整改。
3. 判定:降频与单线定位
拿到波形先别改板。用降频和单线两个动作把范围砍一半: 降频回答「是不是时序裕量」,单线回答「是哪一根线」。
3.1 四步决策树
下面这棵树是本文的主干。四个判定按帧边界 → 时钟质量 → 数据线 → 时序裕量 的顺序展开,每一步的「否」都直接指向一类根因,不需要再往下走。
3.2 降频定位法
降频是样机阶段性价比最高的动作:只改时钟分频,其余条件一律不动。 判读规则很干净:
- 降到 1/4 立即恢复 → 时序裕量问题,按第 4、5 章找是哪一项吃掉了裕量。
- 降到很低仍失败 → 不是时序问题,转驱动配置、器件状态与电源完整性。
- 变好但没好透 → 多因素叠加:一个逻辑错误叠一个信号完整性问题, 先把逻辑层修对,再回头量裕量。
一次只降一档,每档都重抓同一帧。按 1/2、1/4、1/8 逐档下降,每档保存四通道截图与一次读 ID 结果,画出「失败率 vs 频率」曲线,而不是只拿一个二值结论。注意降频只改分频,不要顺手改模式或驱动强度,否则改好了也不知道是哪一项起作用。
3.3 单线定位法与三条分界线
单线定位回答「哪一根线有问题」:把四根线两两组合起来看—— CS# 与 CLK 看帧边界,CLK 与 DI 看命令有没有送到,CLK 与 DO 看器件有没有应答。 单看一根线往往都正常,异常只存在于它们的关系里。
| 现象组合 | 读出来的结论 | 下一步 |
|---|---|---|
| 仅 CLK 异常,其余三根正常 | 时钟链路问题:走线、串阻、分频配置、负载 | 查 CLK 走线与源端串阻,量占空比与边沿速率 |
| 仅 DO 异常,CS# / CLK / DI 都正常 | 命令已送达但器件没应答 | 查器件供电、片选是否到达、DO 是否被别的器件占用 |
| DI 与 DO 位型完全相同 | 两根线短接,或 DO 未被驱动而耦合了 DI | 量两线之间的通断与绝缘,查焊接桥连 |
| 四线形态都合格,但读写就是错 | 波形不是首因 | 转驱动配置、器件状态与电源完整性三条线 |
分界线一:四线形态全部合格,读写仍失败 → 去查驱动配置与器件状态。
分界线二:电源在读写瞬间跌落 → 先修电源;电源不稳时量出来的建立保持时间全是噪声。
分界线三:换接地方式波形就变 → 先修测量;测量不可信时的整改都是白做。
4. 成因排查(上):CS 与 CLK
CS# 与 CLK 全部由主控驱动,异常几乎都指向主控配置或物理互连, 与器件本身关系不大——先修好这两根,再去怀疑器件。
4.1 CS# 未拉低 / 拉低后提前释放
原理与波形
CS# 是帧的边界:器件在下降沿复位内部状态机、准备接收命令,在上升沿结束并锁存当前操作。 命令、地址、数据与空周期必须在 CS# 为低期间完整送出, 提前抬升会直接把操作截断,全程为高则器件根本没被选中。三种典型形态:
- 未拉低:CS# 全程高,DO 常高阻——器件完全没参与这一帧。
- 提前释放:低电平宽度明显短于 CLK 活动区间, 在最后一个时钟之前就抬升(图 4 之①),DO 输出到一半变回高阻。
- 上毛刺:低电平期间出现窄正脉冲,被器件解释成「帧结束 + 新帧开始」。
根因
- 引脚复用(pinmux / pinctrl)没配成 SPI 功能,还停在 GPIO 或另一个复用上。
- 软件 CS(GPIO 模拟片选)的 GPIO 编号或有效电平写反。
- 控制器 CS 极性与原理图相反,或 DMA 分包处每次都释放一次片选。
- CS# 缺上拉,上电与复位期间浮空;或引脚虚焊、飞线断、转接板接触不良。
实操
- 断电用蜂鸣档确认主控 CS 焊盘到芯片 CS# 引脚的通断与对地绝缘。
- 量 CS# 上拉是否存在、阻值是否符合原理图(常见 10 kΩ 量级,以原理图为准)。
- 读出复用寄存器 / pinctrl 配置,确认配置成 SPI 片选功能。
- 软件 CS 时在驱动里对拉低 / 拉高位置打点,与波形的下降沿 / 上升沿逐条对比。
验证
结论:CS# 低电平宽度必须完整覆盖「命令 + 地址 + 数据 + 空周期」的全部时钟, 两端各留余量;连续抓 100 帧不得出现任何一次提前释放或毛刺。 只抓一两帧「好像是对的」不算通过——这类故障的复现率常常只有百分之几。
4.2 CLK 毛刺、振铃、占空比失衡
原理与波形
从机不区分「真的时钟沿」和「过冲 / 毛刺造成的假沿」, 只看电平有没有越过输入门限,所以振铃过冲与串扰毛刺都会变成多余的时钟。三种形态:
- 振铃:每个边沿后跟一串衰减振荡,第一二个过冲最大(图 4 之②),过冲越深说明阻尼越不足。
- 毛刺:平坦电平中间出现窄脉冲;CLK 上出现毛刺最危险,因为直接多出一个时钟。
- 占空比失衡:高低电平宽度明显不等,压缩一侧的建立或保持窗口,随频率单向恶化。
根因
- 阻抗失配与飞线过长:源端阻抗低、未端接,边沿在末端全反射形成振铃。
- 缺少源端阻尼:CLK 上没有串联电阻,或串阻值太小。
- 串扰:CLK 与数据线长距离并行(尤其捆成一扎的杜邦线),沿耦合到邻线。
- 分频配置或负载过重:高分频比下产出非 50% 占空比,或一条 CLK 挂了过多器件。
实操
- 先降频到 1/4 重抓:振铃随频率降低而消失,确认是信号完整性问题。
- 在 CLK 驱动端串联小电阻做源端阻尼(常用几十欧姆,按实测标定)。
- 缩短 CLK 走线 / 飞线;飞线时 CLK 单独走一根并紧邻一根地线。
- CLK 与 DI / DO 分开走,中间插一根地线隔离,必要时加屏蔽。
- 量占空比并确认 CLK 上没有多余上下拉与主控驱动冲突。
验证
结论:目标频率下 CLK 每个边沿必须单调,过冲与振铃峰值不得越过对侧输入门限, 连续 1000 个周期内不得出现额外毛刺沿。量这些判据必须用接地弹簧。
4.3 边沿过缓
原理与波形
边沿速率不够时,信号在输入门限附近停留的时间变长,任何噪声都会被放大成 多次门限穿越,从机看来就是好几个沿。波形上方波变成 三角波或梯形波:上升下降时间接近甚至超过半个时钟周期, 高电平还没充到顶就开始下降(图 4 之③),把时基拉开能看到明显的指数曲线。
根因与处置
| 根因 | 为什么会边沿过缓 | 处置 |
|---|---|---|
| 串联电阻过大 | 与线上电容构成过大 RC,时间常数接近位周期 | 按实测定标下调串阻,阻尼够用即可 |
| 上拉电阻过大 | 上拉太弱,上升沿由大 RC 主导 | 按总线负载与 datasheet 重选上拉阻值 |
| 负载电容过大 | 多器件并联、长走线、探头电容叠加 | 减少同一 net 的负载;换低电容探头 |
| 驱动能力配置过弱 | IO 驱动强度档位设成了最低档 | 按平台手册调到与走线匹配的档位 |
| 飞线过长或 IO 域偏低 | 寄生参数抬高时间常数,低压下跨导下降 | 缩短飞线、加粗线径;确认 VCCQ 匹配 |
4.4 六种异常波形对照
把前面各节的形态集中到一张图上,现场照着认即可:先认形态,再按对应小节深挖。