触发概念入门:什么是触发?预触发、后触发、触发位置设置。
一、什么是触发?逻辑分析仪的“哨兵”
很多人刚开始接触逻辑分析仪时,第一反应是:“我把探头接上,它不就开始抓数据了吗?”
嗯,理论上是这样。但你想过没有——没有触发,你捕获到的就是一段连续的数据流。大海捞针,哪里是你要分析的起点?
说白了,触发就是一个条件。当信号满足你设定的条件时,逻辑分析仪才开始真正“干活”——把数据存到内存里。就像哨兵站岗,发现目标才拉响警报。
我个人习惯把触发理解成一个“剪刀”。它把无限长的信号流,剪成一段我们关心的片段。项目里排查I2C总线通信故障,我就靠触发把“地址匹配”那一段揪出来,否则几百万个时钟周期,根本无从下手。
二、预触发与后触发:时间上的“前后关系”
触发点并不是你捕获到的数据的“起点”。这是很多新手会搞混的地方。你想想看,如果只记录触发之后的数据,那触发之前发生了什么,你永远不知道。
所以逻辑分析仪的设计,实际上把存储空间分成了两块:
- 预触发(Pre-trigger):触发发生之前的数据。
- 后触发(Post-trigger):触发发生之后的数据。
至于为什么要保留预触发数据?我举个例子你就懂了。
你在调试I2C的Start条件。如果你把触发条件设置为“检测到SDA下降沿且SCL为高”,那么触发点就是Start。但问题是——Start之前总线是什么状态?空闲吗?有没有其他毛刺?没有预触发,你根本看不到。
| 类型 | 深度比例 | 主要用途 | 典型场景 |
|---|---|---|---|
| 预触发 | 通常占总存储的10%~90% | 查看触发事件前因 | 捕获异常发生前的正常状态 |
| 后触发 | 通常占总存储的90%~10% | 查看触发事件后果 | 捕获异常发生后的波形细节 |
我以前碰到过一个NACK问题——从设备不回ACK。触发条件设成“检测到ACK位为高”,捕获后如果没有预触发,我只能看到NACK本身,根本不知道前面地址字节是不是对的。后来我把预触发调大到70%,才看清是从设备根本没识别到自己的地址。
三、触发位置设置:把“探测窗口”放在哪里
理解了预触发和后触发,触发位置设置就很简单了。说白了,就是调整预触发和后触发在存储空间中的分配比例。
大多数逻辑分析仪软件里,会有个滑块或者百分比输入框,范围通常是0%~100%。这个百分比指的是预触发深度占整个存储深度的比例。
- 设到10%:预触发数据很少,大部分空间留给后触发。适合你明确知道触发事件后有很多内容要看。
- 设到50%:触发点居中,前后各看一半。最常用的初始设置。
- 设到90%:预触发占据绝大部分,适合捕捉触发事件之前漫长的异常积累过程。
那怎么选?我个人的经验是这样的——
- 第一次跑波形,先把触发位置设在50%,看看触发点周围的数据分布。
- 如果发现触发点太靠前,后面的数据很多且有用,就把触发位置往小调(比如30%)。
- 如果发现触发点太靠后,前面有大量关键上下文没看到,就调大触发位置(比如70%)。
为什么会需要这么精细地调整?你想想看,存储深度是有限的。比如你的逻辑分析仪只有1M存储深度,采样率设到100MHz,只能记录10ms的波形。这10ms里,你要确保触发点放在最关键的位置。
四、为什么叫“预触发”和“后触发”?
这里有个小历史。早期的逻辑分析仪存储成本高,根本不敢留太多预触发空间。那时候流行的做法是“触发即停止”,也就是只有后触发,没有预触发。但工程师们很快发现,只看结果不看原因,调试效率太低了。
所以,后来的仪器才加入了循环采样的机制:数据一直往里写,直到触发条件满足,再根据设定的预触发比例,把触发点之前的数据保留下来。
今天我们用起来很简单,但其实这个设计是无数工程师踩坑踩出来的。我建议刚入行的朋友,多花点时间理解触发位置。它的设置直接决定了你捕获到的数据质量。调试效率高不高,往往就差在这一个参数上。
五、从触发看协议解码的“对齐”
触发不只是用来“看波形”的。在协议解码中,触发的意义更直接——它决定了解码引擎从哪里开始“对齐”协议帧。
比如I2C协议,解码器需要找到Start条件才能开始解析地址、数据、ACK、Stop。如果你的触发点设在Start之后,解码器可能把后续随机数据当成地址,直接导致解码结果全是乱码。
所以我一般建议:调试协议时,触发位置要尽量靠前。把触发设到协议帧的起始位置,解码才能正确对齐。这个经验,是从三次I2C解码失败中总结出来的,嗯,真的是血泪教训。
- 触发条件设置:用“边沿+电平”组合或“码型触发”,锁定协议帧头部。
- 触发位置:初始设为50%,根据协议帧长度后调整。
- 预触发:必须包含至少一个完整协议帧之前的空闲总线状态。