


本期应用指南摘要
混合信号示波器具有数模混合测量功能。本文以MSO6B系列示波器为主要测量仪器,从UART协议入手,介绍了总线解码的基本概念和示波器具体操作方法。文中还介绍了I2C和SPI协议,并对比手动解析和示波器自动解码的过程和结果,充分展现了现代化混合信号示波器的混合测量能力。对于信号失真的场景,从数字和模拟信号2个角度,进一步阐述了混合调试的思想。
以下视频先为大家简单介绍MSO6B示波器的测试功能。(友情提示:本期干货内容较多,采用文字与视频结合方式,建议以先视频后文字的顺序,耐心观看学习喔~)

■ 1. 使用示波器测量混合信号
■ 2. 总线解码快速上手
2.1 UART协议解析
2.2 示波器设置
2.3 示波器解码结果
■ 3. 常见协议的解码
3.1 I2C协议
3.2 SPI协议
■ 4. 混合调试
■ 5. 总结
■ 参考文献
泰克的MSO系列示波器,是混合信号示波器,顾名思义,除了具有良好的模拟信号捕捉还原能力外,还具有数字信号采集和分析能力。因此MSO系列示波器,不仅可以作为一台专业的高速逻辑分析仪,还能同步处理模拟和数字信号,实现数模混合测量功能。
以MSO68B示波器为例,它具有8个通道的输入。对于每个通道而言,它不仅仅是可以输入1路模拟信号的传统模拟通道,而是名为FlexChannel的数模混合通道。对于每一个FlexChannel,可以配置为1个模拟输入,或者8个数字输入。因此8个FlexChannel,可以最多配置为8乘以8共64个数字通道。进一步的,得益于泰克自研的ASIC芯片,这些逻辑通道的采样率最高可以达到模拟采样相同的速率,例如25GSa/s,完全可以胜任高速逻辑信号的分析。

以观察一个数字模拟转换器(DAC)的输入和输出为例。我们的目标是同时看到8个数字输入和1个模拟输出信号,这对于软硬件设计、调试和验证都是非常有用的。为了将数字信号输入示波器,我们需要使用TLP058逻辑探头,每个逻辑探头占用一个FlexChannel,提供8个数字输入。出于演示的目的,我们在通道1和2上各插入一个TLP058逻辑探头,示波器上显示了16路数字输入,其中C1通道的8路数字输入连接到DAC的数字输入。剩余6个FlexChannel依然作为模拟信号的输入,我们在通道3上插入一个标配无源探头(TPP1000),连接到DAC的模拟输出。硬件连接全貌如图1所示。

图1. 示波器测量混合信号的硬件连接
简单设置水平、垂直通道参数和触发后,就可以在屏幕上观察到数字和模拟信号了,如图2所示,示波器屏幕的波形显示分成了多个部分,数字波形、模拟波形都可以同屏展示。这里的模拟信号是一个正弦波,因此简单使用模拟信号的上升沿进行触发,实际上触发也可以在全部通道上进行按需灵活设置。

图2. 混合信号测量结果
细心的朋友还可以看到图2中添加了一条总线,把8个数字通道作为一个并行输入,从而解码出具体数值。为了观察总线的细节,可以使用示波器的缩放功能,如图3所示。这里数字和模拟信号会同步放大,总线上的数据也可以看清了,充分发挥了大屏幕的优势。

图3. 使用缩放功能查看混合信号的细节
本节展示了一个典型的混合信号的测量和分析过程。下文将重点讲解数字信号的分析方法,特别是总线解码相关的知识和操作方法。
这里以常见的串口(UART)信号为例,介绍使用混合信号示波器进行总线解码的基本流程。
2.1UART协议解析

通用异步收发传输器(UART)也就是大家常见的串口,大部分带微控制器的嵌入式设备都可以支持。一个完整的UART一般至少需要3根线,除了地线(GND)外,一根线用来接收(RX)、一根线用来发送(TX),实现数据双向传输。UART的数据帧如图4所示,包含起始位,数据位和停止位。

图4. UART数据帧 [1]
一个UART波形的示例如图5所示。图中UART信号线空闲为高电平,起始位通过拉低电平实现。之后通过高低电平变化来传输8个bits的数据。由于UART协议非常简单,我们手动就可以把数据解码出来。图中左边的数据直译为10100010(LSB在左),通常记录时会习惯先写MSB,因此逆序为01000101(MSB在左),转换为常用的16进制就是0x45。同理,右边的数据解码的结果是0x6E。

图5. UART波形和手动解析示例
2.2 示波器设置
本节描述如何用示波器捕捉UART波形,并使用示波器自带的总线解码功能完成自动解码。以Raspberry Pi Pico 的UART作为例子,在控制器里烧录一个往UART0发送数据的程序,通过示波器捕捉并解码。

图6. Raspberry Pi Pico的UART [2]
如图6所示,Raspberry Pi Pico的UART0的TX线与GP0复用,在1号引脚上。因此1号引脚的信号需要输入示波器。示波器的垂直系统可以在某个通道连上逻辑探头,当然这是一个普通的共模信号,使用无源探头直接捕捉也是可以的。如果使用逻辑探头,需要注意门限电压的设置,Raspberry Pi Pico的低电平为0V,高电平为3.3V,门限电压设为1.6V左右。水平系统方面,已知波特率是115200 bps,每个bit的传输时间约为8.7 us,可先设为100us /div,甚至1ms /div,等观察到信号后再做微调。
触发系统的设置和模拟信号有所不同,我们可以设置为专用的总线触发。以演示信号为例,首先添加总线,设置如图7所示。UART的一个常见物理层接口是RS-232,因此示波器里的总线类型选择“RS-232”。位速率即波特率,常用的有9600、115200bps等,根据实际情况设置。数据位数常用的是8位,“极性”用来设置数字“1”用高电平或低电平表示,此例中是高电平表示1。解码格式不影响解码结果,只是显示的格式,这里选“十六进制”。其它选项根据实际情况设置,或者默认即可。总线设置完成后,就可以用总线触发了,我们选择“开始”,即总线开始数据传输的位置,这样只要总线上有数据传输,就会被触发。

图7. UART总线设置
2.3 示波器解码结果
如果设置准确,波形视图的总线上就会出现实时的解码结果,如图8所示。其中0x45和0x6E的解码结果,和前文手动解析的结果是一致的。

图8. UART总线解码结果
接下来更换为逻辑探头,来查看Raspberry Pi Pico的UART输出,如图9所示。这里做了2个小的改动:一是打开了总线解码结果的表格(点击界面右边的“结果表”),二是把解码结果用字符形式显示。我们可以从结果表或者波形视图中发现,Raspberry Pi Pico输出的是一个字符串“Hello2021”。并且结果表和波形视图是联动的,点击某个数据,就会跳转到波形的对应位置,可以快捷查找数据,并放大对应的波形,操作十分方便。

图9. UART解码结果的进阶展示
此外,总线触发也有多种选择,例如可以选择通过特定的数据去触发,这样就实现了示波器自动找数据的功能。
3.1 I²C协议

I²C是一种集成电路总线,硬件连接主要有2根线,一根是时钟(SCLK),一根是数据(SDA)。协议标准上规定了在时钟高电平采样,因此解码比较固定,但数据格式需要区分地址、读写标志和数据,在一个字节内还要留意起始条件(S)、应答(ACK)和停止条件(P),如图10所示。根据电平可以解析出二进制数据流为“10100001 00011000”。根据标准,前7位是地址,转换为16进制是0x50,读写标志是1,表示“读”,记为“R”,之后是数据,转换为16进制是0x18。

图10. I²C波形和手动解析示例(协议格式来自[3])
使用示波器总线解码的设置也比较固定,如图11所示。只要指定好时钟和数据的来源和门限电压就可以了。

图11. I²C总线设置
解码结果如图12所示,可以验证前2个字节与手动解析的结果是相同的。

图12. I²C总线解码结果
3.2 SPI协议

SPI是串行外设接口的缩写,也是一种常见的芯片之间通信的接口协议。标准的SPI会用到4根线:1根时钟(SCLK),2根数据收发,分别是主出从入(MOSI)和主入从出(MISO),1根片选(SS)。与I2C不同的是,SPI是一种事实标准,因此配置比较灵活,每一根线上的信号都有多种可能的配置选项。例如时钟信号可能是上升沿或下降沿有效;数据信号(MOSI和MISO)可能是低电平或高电平有效;片选信号可能是低电平或高电平有效。在数据解析方面,也有多种配置:数据字长4-32位都有可能,位顺序可能是MSB在前或LSB在前。
因此实际解析时,需要查阅相关文档或者编写测试程序来确认用到的SPI具体配置如何,否则解析可能不准确。如图13所示的一个波形,是时钟SCLK上升沿有效,MOSI数据是高电平有效(MISO同理,略去),片选信号SS是低电平有效。数据方面,字长是8位,位顺序是MSB在前。综合上述配置,不难找出图中波形代表的信号是1个字节,二进制表示为10010011,转换到16进制表示为0x93。

图13. SPI波形和手动解析示例
示波器总线解码的设置也提供了丰富的选项,需要我们仔细选择正确,如图14所示。SCLK设置为上升沿,SS输入设置为“低态有效”,数据输入设置为“高态有效”,字大小设为“8 bits”,位顺序设为“MS居前”。

图14. SPI总线设置
解码结果如图15所示,可以验证这个字节与手动解析的结果是相同的。注意SPI没有额外的校验机制,因为总线配置错误也能够解码,但是结果是错的,在实际操作时一定要注意确认配置。

图15. SPI总线解码结果

上述UART、I2C、SPI协议的解析,我们默认一个前提是信号是准确无误的。因此无论用模拟探头或者逻辑探头,只要配置准确,解码的结果一定是正确的。实际应用时,数字信号和模拟信号一样会存在失真的问题。当数字信号失真到超过阈值时,逻辑探头是无法正确解析的,此时会出现数据错误。
如图16就是一个失真的信号举例。除了红框内的片段,其它位置的电压在0V和3.3V之间跳变,按协议解码是16进制的0xE9。但是红框内有一个脉冲幅度较低,解码就出错了。

图16. 信号失真举例
为了找到这样的失真信号,可以从2个角度利用混合信号示波器的相关功能。
(1)数字角度。由于数据出错,可以使用总线触发,搜索错误的值,就能找到这个失真的信号了。
(2)模拟角度。这是一个欠幅信号,可是使用示波器的欠幅触发功能。如图17所示,示波器的欠幅触发作用于任意模拟信号,当该信号越过下限两次但未越过上限时触发。我们把上限和下限分别设为2.8V和0.2V,就能找到介于二者之间的失真脉冲了。图17中,触发位置正是失真脉冲的下降沿。

图17. 欠幅触发的设置
从这个例子中,我们可以发现:混合信号示波器同时可以解析模拟和数字信号,因此我们也可以根据需要灵活选择触发方法,查找信号问题,实现板级实时的混合调试。
使用混合信号示波器,可以同步处理模拟和数字信号,实现数模混合测量功能。本文从常见的UART协议出发,辅以多种总线协议的解析,介绍了总线解码的基本概念和具体操作方法,并对比手动解析和示波器自动解码的过程和结果,充分展现了现代化混合信号示波器的混合测量能力。对于信号失真的场景,从数字和模拟信号2个角度,进一步阐述了混合调试的思想。全文全部数据和波形都由实测和实拍得到,贴近应用实际,具有工程参考价值。
参考文献
[1]https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter
[2]https://datasheets.raspberrypi.org/pico/pico-datasheet.pdf
[3]https://en.wikipedia.org/wiki/I%C2%B2C
欲知更多产品和应用详情,您还可以通过如下方式联系我们:
邮箱:china.mktg@tektronix.com
网址:www.tek.com.cn
电话:400-820-5835(周一至周五9:00-17:00)