4. 触发系统设计:触发条件类型与触发位置设置
触发系统,说白了就是逻辑分析仪的「扳机」。没有它,你捕获到的只是一堆杂乱无章的数据,根本找不到想看的那一段。我刚开始做调试时,就吃过这个亏——抓了一大堆波形,结果关键事件早跑过去了,白忙活一场。
今天咱们聊聊触发系统的三个核心要素:触发条件类型和触发位置设置。搞懂了这些,你才能精准地「抓住」想要分析的信号。
4.1 触发条件类型
触发条件决定了「什么时候开枪」。不同的场景需要不同的触发方式。我个人把它们分成三大类:边沿触发、电平触发和序列触发。
4.1.1 边沿触发
这是最基础、最常用的触发方式。它关注的是信号的变化瞬间。
- 上升沿触发:信号从低电平跳变到高电平时触发。比如检测时钟的上升沿、数据总线的开始信号。
- 下降沿触发:信号从高电平跳变到低电平时触发。常用于检测中断请求、复位信号等。
- 双沿触发:上升沿或下降沿都触发。适合捕获脉冲宽度很窄的信号,或者不确定信号极性时使用。
4.1.2 电平触发
电平触发关注的是信号持续的状态,而不是跳变。它有两种模式:
| 触发模式 | 触发条件 | 典型应用场景 |
|---|---|---|
| 高电平触发 | 信号为逻辑1时触发 | 检测总线忙状态、电源OK信号 |
| 低电平触发 | 信号为逻辑0时触发 | 检测复位有效、中断请求 |
电平触发有个坑:如果信号一直保持触发电平,它会反复触发,导致捕获窗口不断被刷新。我曾经遇到过这种情况,调试一个电源管理芯片时,PGOOD信号一直为高,结果逻辑分析仪不停地触发,根本停不下来。
4.1.3 序列触发
序列触发是高级玩法。它允许你设置多个触发条件,按顺序执行。只有条件A满足后,才开始检测条件B,依此类推。这就像设置了一个「事件链」。
举个例子,你想捕获一个I2C写操作后的ACK信号。可以这样设置:
- 条件1:检测到START条件(SDA下降沿,SCL为高)
- 条件2:检测到设备地址匹配
- 条件3:检测到写操作位(R/W=0)
- 触发:捕获ACK信号
序列触发的好处是过滤掉了大量无关数据。我记得有一次调试一个复杂的DMA传输问题,用了4级序列触发,才从几百万个时钟周期里精准定位到那个异常的总线仲裁。
4.2 触发位置设置
触发位置决定了「抓取的数据在时间轴上的位置」。这直接影响到你能看到触发事件前后的信息量。
三种常见的触发位置:前触发、中触发、后触发。我用一张图来说明它们的区别:
4.2.1 前触发
前触发模式下,触发点位于捕获窗口的末尾。也就是说,捕获的大部分数据都是触发事件之前的。
- 适用场景:你想分析触发事件发生的原因。比如,系统为什么会死机?你想看看死机前CPU在干什么。
- 存储分配:比如深度为1024,前触发会分配约75%~90%的存储给触发前数据,剩下10%~25%给触发后数据。
4.2.2 中触发
中触发模式下,触发点位于捕获窗口的中间。触发前后的数据各占一半。
- 适用场景:你想同时看到触发事件前后的情况。比如,分析一个中断服务程序,既想看中断产生前的状态,也想看中断处理后的结果。
- 存储分配:50%给触发前,50%给触发后。
中触发是最常用的模式。我个人觉得,如果你不确定该用哪种,选它准没错。它能给你一个相对平衡的视角。
4.2.3 后触发
后触发模式下,触发点位于捕获窗口的开头。捕获的大部分数据都是触发事件之后的。
- 适用场景:你想观察触发事件产生的影响。比如,你发送了一个写命令,想看后续总线上发生了什么。
- 存储分配:约10%~25%给触发前,75%~90%给触发后。
4.3 触发位置与存储深度的关系
触发位置的选择,直接决定了你如何使用有限的存储深度。我整理了一个表格,方便你对比:
| 触发位置 | 触发前数据占比 | 触发后数据占比 | 典型存储分配(深度1024) |
|---|---|---|---|
| 前触发 | 75%~90% | 10%~25% | 触发前:768~921,触发后:103~256 |
| 中触发 | 50% | 50% | 触发前:512,触发后:512 |
| 后触发 | 10%~25% | 75%~90% | 触发前:103~256,触发后:768~921 |
4.4 触发系统的实际配置示例
说了这么多理论,咱们来点实际的。假设你要调试一个UART接收模块,想捕获一次数据接收的完整过程。你会怎么配置?
我个人会这样设置:
- 触发条件:下降沿触发,检测RX引脚的起始位(从高到低跳变)。
- 触发位置:前触发,分配80%的存储给触发前数据。
- 存储深度:假设有1024个采样点,触发前约819个,触发后约205个。
为什么这么配?因为我想看触发前RX引脚的状态,确认总线是否空闲。同时,触发后的205个采样点足够捕获一个完整的UART数据帧(起始位+8数据位+停止位,按16倍过采样算,约160个采样点)。
好了,触发系统的核心内容就这些。记住,触发不是目的,捕获到有用的数据才是。多在实践中摸索,你很快就能找到最适合自己项目的触发配置。