仪器网(yiqi.com)欢迎您!

| 注册 登录
网站首页-资讯-专题- 微头条-话题-产品- 品牌库-搜索-供应商- 展会-招标-采购- 社区-知识-技术-资料库-方案-直播- 视频

问答社区

UAR协议分析

无懈可击i7 2022-07-14 14:20:01 229  浏览

  • UART协议分析

    梦源科技 2022-07-01


    1. 协议基础


    1.1.    协议简介

      UART是“Universal Asynchronous Receiver/Transmitter",通用异步收发器的缩写。在19世纪60年代,为了解决计算机和电传打字机通信,Bell发明了UART协议,将并行输入信号转换成串行输出信号。因为UART简单实用的特性,其已经成为一种使用非常广泛的通讯协议。我们日常接触到的串口,RS232,RS485等总线,内部使用的基本都是UART协议。

    为了更好的理解和分析协议与总线的关系,我们通常把一个完整的通讯规范划分成物理层,协议层以及应用层。物理层只定义真实的信号特性(比如电压,电流,驱动能力等),以及电信号与逻辑信号0和1的对应关系;协议层不关心底层的0和1具体怎么实现,只规定逻辑信号的协议规范以及通讯过程(例如起始,数据以及结束等);应用层不关心数据是怎么获取的,只定义数据表示的意义,以及如何实现具体的业务逻辑。

                    图 1‑1 通讯协议的分层实现

         简单的UART协议应用,通常物理层只需要两根传输线,一根用于发送,一根用于接收,从而实现全双工通讯。对于单向传输,也可以只使用一根传输线。此类应用最典型的实例就是单片机的RX/TX端口互相连接,从而实现基于TTL电平的UART通讯。对于不同的传输距离以及可靠性的要求,替换不同的物理层实现既可以得到我们常见的RS232、RS485等通讯总线。


    1.2.   不同的物理层实现

         由于UART协议层的输入是逻辑0/1信号,而逻辑0/1信号在物理层可以通过不同的电平标准来区分。针对不同的通讯需求,便可以使用不同的物理层实现。例如简单的板内通讯,或者常见的设备调试场景,使用简单的LVTTL/TTL电平即可在两个设备间进行UART协议通讯。

                   图 1‑2 不同的物理层电平标准

          通用的串口则使用的是RS232电平,可以增加传输距离,并且抵抗一定程度的信号干扰。付出的成本则是在物理层需要对应的电平转换芯片来实现,发送端需要将内部的高低电平信号转换成电压更高的+/-电压信号,接收端需要将+/-电压信号转换成内部的高低电平信号。

    在工业通讯的场景下,为了进一步提高传输距离,以及增强信号的可靠性,一般会采用RS485的电平标准。在发送端将普通的高低电平信号转换成一对差分信号,在接收端将差分信号再转换成普通的高低电平信号。另外,RS485允许总线上连接多达128收发器,而TTL或者RS232则是点对点的连接。


    1.2.1.    基于TTL的UART通讯

         基于TTL的UART通讯,是UART协议应用简单的使用场景。即直接把数字I/O输出的高低电平作为实际的物理信号进行传输。在物理连接上,只需要设备共地,通过一根信号线即可完成单向的设备通讯。如果需要双向全双工,使用两根信号线即可。

       

                     图 1‑3 基于TTL的UART通讯

         为了对比不同物理层实现的差别,我们可以观察发送相同数据时,不同物理层的实际信号有何不同。这里以发送字符‘D‘为例,通过璞石示波器,直接观察TTL实现传输的信号(探头接地端连接设备共地端,探头信号端连接上图蓝色信号线),可以获得如图 1‑4所示的信号波形。从波形可以看出,当没有数据传输时,UART信号会一直保持在高电平(具体信号幅度由I/O的供电电压决定),数据传输时信号发生跳变,传输完成后信号重新回到空闲的高电平状态。

                       图 1‑4 TTL的UART信号波形


    1.2.2.     基于RS232的UART通讯

          为了增强驱动能力,以增加传输距离和可靠性,RS232总线采用了双极性电压信号来进行物理传输。信号在发送/接收之前,通过电平转换芯片实现内部信号和总线信号的互相转换。连接方式和TTL电平完全相同,整个物理层只是多了一层电平转换。

                    图 1‑5 基于RS232的UART通讯

    同样以发送字符‘D‘为例,璞石示波器的探头连接到信号端,可以采集到如图 1‑6所示的实际波形。可以看出,RS232波形在空闲时为负电压,当有数据传输时,信号开始在正负电压之间跳变,传输完成后重新回到空闲的负电压状态。

                      图 1‑6 RS232的UART波形



    1.2.3.     基于RS485的UART通讯

          RS485为复杂的工业环境而设计,和其它UART协议的物理层相比,RS485总线最大的特点就是使用了差分信号传输。信号在发送之前,通过RS485的收发器把单端信号转换成差分信号,再发送到总线上进行传输;同样在接收之前,总线上的差分信号通过收发器的转换变成单端信号再送给UART控制器进行接收。在RS485总线上,如果希望进行全双工的双向通讯,需要两对差分信号线(即4根信号线)。如果只进行半双工的双向通讯,则仅需要一对差分信号即可。

                  图 1‑7 基于RS485的UART通讯

          还是以发送字符‘D‘为例,使用璞石示波器2个通道的探头(共参考地),分别连接到其中一对差分信号的A/B端,可以采集到如图 1‑8所示的实际波形。可以看出,A/B端的波形为互补关系。A端波形为正向逻辑(空闲时为正电压),B端波形为反向逻辑(空闲时为负电压)。


                     图 1‑8 RS485的UART波形


    2.        协议规范


    2.1.      UART帧结构

          在上一节的介绍中,我们通过璞石示波器观察了实际的UART波形,那么这个波形到底是怎么被准确的识别成字符‘D‘,而不是其它内容的呢?这就涉及到UART协议帧结构的定义。如图 2‑1所示:



                         图 2‑1 UART协议帧结构

       当两个设备需要通过UART协议进行通讯时,它们需要同时约定好以下内容:

    • 每一位信号的时间长度T(波特率 = 1/T)

    • 帧结构中每一项的具体位数

    • 是否有校验位,以及校验位的机制(奇/偶/..)

    有了这些约定,接收设备只需要等待起始位的到来,再对之后的波形进行固定间隔的采样即可获得传输的具体信息。以字符‘D‘的波形为例,其解析过程如图 2‑2所示:

                         图 2‑2 UART波形分析

    2.1.1.     波特率

          波特率是UART协议,或者说所有异步串行协议,非常重要的一个概念,即单位时间内(1秒)可表示的bit位个数,或者也可以表述为bit位宽的倒数。例如一个波特率为115200的UART波形表示1秒可容纳115200个bit位,也就是说每一位bit数据占大约8.68uS的时长。

                        图 2‑3 波特率的定义

           UART等异步串行协议,为了简化信号物理连接,降低通讯成本,一般只有一根信号线,无法同时传输数据和时钟信号。收/发设备为了正确解析波形就需要在相同的波特率设置下。而相同的波形使用不同的波特率获取的信息可能会完全不同。对于接收设备来讲,只有起始位可以作为一帧数据的同步点,其它数据都是通过波特率来确定具体的取样位置。

    还是以字符‘D’的波形为例,如图 2‑4所示,如果用错误的波特率接收,就可能会得到完全错误的数据信息。

                          图 2‑4 波特率错误

    2.1.2.     空闲位

          设备之间不传输数据时以持续的高电平表示空闲。空闲位持续时间越长,两个数据帧间隔也越长,单位时间传输的数据就越少。

                           图 2‑5 空闲位

    2.1.3.      起始位

    UART接收端会一直检测信号线上的电平变化,开始传输数据时,发送端将信号线从高电平拉到低电平结束空闲状态,并保持一个bit位的时长。接收器检测到高低电平转换时,开始接收信号。

                           图 2‑6 起始位

    2.1.4.     数据位

          数据位包含传输的实际数据,如果使用了奇偶校验,那么数据位长为5~8 bits,如果没有使用奇偶校验,则位长为5~9 bits。在一般情况下,数据位为 8 bits,数据首先从低有效位开始发送,高位在后。

                             图 2‑7 数据位

    2.1.5.    校验位

        校验位可以用来提高传输的可靠性。如果信号在传输过程中因为干扰而导致某些位置的电平产生错误,通过计算接收的数据和校验位是否匹配即可判断数据是否有传输错误,从而给应用层提供有效信息来决定接受/丢弃对应的数据。

                             图 2‑8 校验位

    2.1.6.    停止位

          停止位表示一帧数据的结束,实际信号是一段时间的高电平。停止位的时间长短可以设置为1、1.5或者2bits的停止位。大部分情况使用1bit的停止位。

    因为UART是一个异步协议,每一帧的开头可以用跳变沿来同步,但是停止位只能通过波特率来计算相对位置,如果在停止位的位置识别到一个低电平,则会产生帧错误。在通讯过程中,为了减少波特率的误差导致的问题,可以设置不同的停止位长度来适配。

                          图 2‑9 停止位


    3.   使用逻辑分析仪分析UART通讯


    3.1.    示波器vs逻辑分析仪

           示波器作为主要的通用测试测量仪器,在观察模拟信号的细节方面有着天然的优势。比如说实时运行,配合高波形刷新率,可以方便的观察到突发的异常信号;再比如进行噪声评估以及信号质量优化时,示波器可以很好的对比同一条总线上,不同节点上信号的异同,从而找出隐藏的信号完整性问题。

    但是示波器亦天然有着一些不方便的地方,除去通道少,屏幕普遍偏小,操作没有电脑+鼠标的方式灵活可控这些形态上的问题,针对数字信号的采集和分析,示波器最大的问题就是存储深度太小。一台几十万元的示波器存储深度也可能只有几百Mpts。同时,因为存储深度的限制,当需要做稍微长一点时间的采集时,示波器的真实采样率就会剧烈的下降,导致采集到的波形无法还原真实的信号,失去了分析的意义。

                  图 3‑1 璞石示波器分析UART信号

                   图 3‑2 DSLogic分析UART信号

           逻辑分析仪是只针对数字信号采集和分析而专门设计的测试测量仪器,其采集出来的波形结果只有高低电平两个状态(也就是逻辑上的0和1)。但是却很好的弥补了示波器在采集和分析数字信号上的不足。

    1.  1.     大部分逻辑分析仪都是在PC上操作,借助桌面处理器的强大性能,以及成熟操作系统的交互体验,极大了提升了数字信号分析的便捷性和效率。

    2.  2.     逻辑分析仪通道数多,入门级别的DSLogic逻辑分析仪就有16个通道可以同时采集,用户也可以以非常合理的成本获取拥有几十个,甚至上百个通道的逻辑分析仪产品。

    3.  3.     逻辑分析仪的存储深度更大,比如DSLogic在stream模式下可以达到16G的存储深度,并且同时保持相当高的采样率,远超绝大多数示波器的采集能力。

    4.  4.     逻辑分析仪普遍提供丰富的协议解码功能,可以对数字信号进行深入的分析。例如DSLogic目前支持的解码协议就多达100多种。大部分示波器的解码能力有限,而且大多需要单独购买相应的插件。

    我们接下来将重点介绍如何使用逻辑分析仪进行各种情形下UART信号的采集和分析。


    3.2.    建立逻辑分析仪的测试环境

    3.2.1.     DSLogic的连接

    DSLogic是一款基于USB连接的便携式逻辑分析仪。DSLogic主机负责信号采集和缓存,然后通过USB把数据传输给PC上的上位机软件DSView。DSView负责波形数据处理,显示,分析,以及对应的人机交互功能。

                     图 3‑3 连接DSLogic到PC

         使用时,只需要将DSLogic主机通过USB数据线直接连接到PC主板上的USB端口,打开DSView软件,并确认DSLogic主机上的指示灯变为常绿状态。此时便完成了逻辑分析仪的连接和初始化工作。如图 3‑4所示,在DSView软件上可以观察到左上角的当前设备名称,以及对应的连接状态。

                   图 3‑4 DSLogic连接状态

    3.2.2.      UART信号连接

          对于所有的测量来讲,测试设备和被测信号必须基于一个共同的参考平面,也就是通常我们所说的接地,这样被测信号才能被正确采集和测量。在某些情况下,会遇到没有做显性的接地,但是测量结果貌似没有问题的情景,这是因为测量设备与被测信号通过其它的方式进行了共地连接,比如使用的同一个电源供电,或者参考地同时接入了市电的接地端等等。但是在进行严谨的测量时,测量设备应根据被测信号进行就近接地处理。被测信号到测量设备的信号接地端环路面积越大,信号就越容易被干扰,从而产生测量误差甚至测量错误。

    针对UART信号来讲,接入逻辑分析仪时,简单的情况只需要连接2根线,一根接参考地,一根接被测信号即可。针对我们之前提到的UART协议的不同物理层实现,信号连接的方式会稍有不同。

    例如对于TTL电平的UART信号,除了连接参考地之外,只需要连接需要测试的信号(TX或者RX)分别接入逻辑分析仪对应的通道输入即可。

                  图 3‑5 TTL信号与逻辑分析仪连接

          对于RS232总线信号,我们既可以直接测量电平转换之后的总线信号(DSLogic在排线输入端的耐压范围为+-30V,RS232的+-15V的信号范围可以直接接入),也可以测量电平转换之前的内部数字信号。其接线的方式和TTL信号一致,需要注意的是RS232信号对电平进行了翻转(空闲时为负电压,即低电平),在进行UART协议解码时,我们可以在DSView的解码设置窗口进行对应的信号电平翻转(Invert Signal选项设置为yes)。

                 图 3‑6 RS232信号与逻辑分析仪连接

          RS485总线使用的是差分信号,当我们用逻辑分析仪进行信号采集时,需要特别注意被测信号的连接方式。首先,逻辑分析仪的参考地需要连接到对应的被测设备RS485收发器的参考地,这样才可以保证逻辑分析仪有正确的电平参考平面;其次,对于差分信号,逻辑分析仪只需要采集到与内部信号同极性的高低电平即可。从数字信号的角度来讲,差分的方式只是提高信号传输的可靠性,不增加额外的信息量。如图 3‑7所示,使用逻辑分析仪测试485总线信号时,连接对应设备收发器的参考地,以及差分总线上的的A+信号即可。

    当然,如果只能采集到B-信号,我们也可以在DSView进行解码时,设置UART解码器进行信号翻转的方式来得到正确的协议解析结果。

                 图 3‑7 RS485总线与逻辑分析仪连接

    3.2.3.      阈值设置

           逻辑分析仪的阈值为高低电平的电压,也就是说当输入信号电压高于阈值电压时,采集到的便是高电平;当输入信号电压低于阈值电压时,采集到的便是低电平。

    针对UART协议,我们之前已经介绍了其有不同的物理层实现,不同的物理层实现有不同的电平标准。我们只需要选择一个对应的阈值可以区分不同情况下的高低电平即可。如图 3‑8所示的阈值基本可以满足这个要求。

                  图 3‑8 UART信号的阈值设置

          在某些情况下,因为配置或者调试的需要,RS485总线的差分信号幅度可能在比较大的范围变动。因为RS485的规范规定只要A-B之间的差分电压大于200mV既可以认为是高电平。此时我们可以借助璞石示波器,观察实际的信号电平幅度,再来决定合适的阈值设置。只需要确保设置的阈值电压可以合理的分辨出高低电平即可。


    3.3.     简单的UART信号采集

          绝大部分UART信号都是低速信号,例如常用的波特率115200,表示信号频率只有115.2KHz。使用DSLogic的默认设置即可直接采集到此类信号。此处以主机固定1s间隔,重复发送字符‘D‘为例,介绍如何使用逻辑分析仪采集和分析此类UART信号。

    3.3.1.                 信号采集

        在准备好硬件和信号连接之后,直接点击DSView软件的“开始“按钮,就可以以默认设置(1MHz采样率采集1s时长)采集被测信号。如果希望修改采样率和采集时长,直接在对应下拉框中选择对应的参数即可。采样率的设置原则推荐为被测信号最高频率的10倍或以上,例如对于115200波特率的UART信号,最快的信号频率为115.2KHz,当选择1M采样率时,每bit信号会有8或者9个采样点,对应的相位误差为+-1/8(12.5%);当选择10M采样率时,每bit信号会有86或者87个采样点,对应的相位误差为+-1/86(1.16%)。当然一般情况下也不推荐使用过高的采样率,因为采样率越高能采集的时长就越短,另外采样率过高可能采集到慢速信号单个跳变沿的多次跳变,从而给协议解码带来困扰。图 3‑9便是使用默认设置采集得到的信号波形。

                          图 3‑9 默认采集

           从图 3‑9可以看出,通道0采集到持续为高电平的信号,但是并没有发现有任何跳变。仔细观察波形窗口上面的时间标尺以及窗口底部的滚动条,可以得知当前窗口显示的只是采集到的部分波形,不是全部信号。此时可以通过鼠标滚轮缩放,或者在波形区域右键双击的方式显示整个采集时长的所有波形。得到如图 3‑10所示的结果。

                      图 3‑10 显示整个采集窗口

           在上图的基础上,我们希望只观察通道0的跳变部分。可以在“选项"窗口关闭其它通道的波形显示,调节通道信号的显示高度。然后将鼠标指向目标波形,并同时通过鼠标滚轮放大所指位置的波形;或者可以通过按住鼠标右键框选希望放大的波形区域。另外,按住鼠标左键可以对波形进行左右移动。得到如图 3‑11所示的波形细节。

                        图 3‑11 观察波形细节

           在观察波形时,把鼠标放到脉冲波形上既可以显示当前信号的脉冲宽度,周期,频率以及占空比等信息。同时,也可以通过鼠标双击左键的方式添加光标,移动光标时会自动吸附到靠近的跳变沿。

    3.3.2.     UART解码

        逻辑分析仪采集到的信号波形只有高低电平(0/1)在时间上的变化,这不利于我们对信号传输的过程和内容进行有针对性的分析。虽然我们可以根据协议规范,用肉眼来翻译波形对应的协议内容,但是将大大降低分析的效率。DSView自带的解码器可以提供丰富的协议解码内容,使得枯燥的波形变成有意义的字符,标记以及数据内容。极大的方便了工程师对信号的分析和理解,从而找出错误信息或者关键数据。

    在DSView软件里对已经采集到的波形进行协议解码非常简单,只需要打开“解码"面板,搜索到对应的解码器(这里我们选择1:UART协议),设置对应解码器的选项(包括显示/通道/帧结构/格式等),确定之后软件就会开始对选定通道进行UART的协议解码。并在协议通道显示解码的结果。如图 3‑12所示。

                       图 3‑12 添加UART解码

          在选择解码器时,DSView提供便捷的协议搜索功能,只需要在协议搜索框输入关键字符,DSView便会列出所有包含这些字符的解码器,用户在其中选择正确的解码器即可。如图 3‑13所示和UART相关的有两个协议0:UART和1:UART,其中0:UART是一个简化的解码器,其不进行bits信息的解析,也不支持高层协议的堆叠,当我们只想获取波形对应的数据时,可以使用此简化协议来减少解码的时间和占用的内存资源。

                            图 3‑13 协议搜索

          解码器的设置窗口有很多和解码相关的设置选项,不同协议的设置窗口内容也会不同。其中有一些所有解码器都必须设置的选项,比如通道和协议信号之间的对应关系。此处我们使用的是通道0抓取的UART信号,那么对应的需要解码的通道就应该设置成通道0。

    和协议相关的设置选项我们在帧结构的部分都有详细讲解,在实际操作种也可以通过串口的上位机软件(串口调试助手等)来获取这些信息。如图 3‑14所示。

                        图 3‑14 协议相关的选项

        对于解码的数据内容,DSView支持不同的显示格式。例如之前采集的UART信号按照ASCII码的方式显示字符‘D’,也可以修改成十六进制(Hex)的显示方式,结果便会显示0x44。如图 3‑15所示。目前支持的显示格式有:hex(十六进制)、dec(十进制)、oct(八进制)、bin(二进制)以及ascii码。

                        图 3‑15 格式选择


    3.4.     单次UART传输的采集

          当我们要捕获的波形是一个偶发信号时,我们并不知道什么时候波形会出现,如果使用直接的采集方式可能大部分时间就只能捕获到空闲的信号波形,无法抓取到实际传输时的信号。

    这个时候便可以通过触发来进行捕获。通过设置对应的触发条件,我们可以根据波形的变化来控制信号采集的开始时间,从而精准的捕获到希望看到的信号波形。

    3.4.1.    Buffer模式

        DSLogic支持两种采集模式:Stream模式和Buffer模式。在Stream模式下采集到的数据会实时的传输到PC,然后由DSView处理。Buffer模式采集到的数据会先缓存在DSLogic的内部硬件缓存中,等采集完成后再传输到PC,由DSView处理。

    Buffer模式除了可以达到更高的采样率这个优点外,还支持更多的触发选项和设置,比如多级触发,串行触发以及触发位置的设置等。而Stream模式仅支持简单触发。

                           图 3‑16 模式选择

    3.4.2.     触发设置

          对于简单触发,我们可以直接设置通道旁边的触发选项。其依次对应上升沿,高电平,下降沿,低电平以及任意边沿触发。在触发面板保持默认的简单触发模式即可。例如对于不知道什么时候发生的UART传输,我们可以选择下降沿触发。当UART 信号一直处于空闲状态时,触发就不会被满足。DSLogic会一直等待触发条件的到来,如图 3‑17所示。

                          图 3‑17 等待触发

    当UART开始传输第一个起始位时,便会激活触发条件,DSLogic将采集到触发时的信号波形。如图 3‑18所示。

                         图 3‑18 触发采集

          我们考虑复杂一点的触发场景,例如设备A不断的随机给设备B发送数据,设备B则根据设备A发送的数据内容回复不同的数据。如果我们想要知道设备B发送数据0之前,设备A给设备B发送了哪些数据,该如何设置触发条件抓到对应时刻的波形呢?

    这里有两个问题需要解决,首先我们需要设置触发的位置,从而看到触发之前的数据,而不是触发之后的数据;其次我们要找出设备B发送数据0的波形特征,并把其转换成对应的触发条件。

                              图 3‑19 触发位置

        根据UART的协议规则,发送数据0的波形会是一个比较宽的持续低电平脉冲信号。如果UART的波特率为115200,我们设置的采样率为1MHz,数据0的波形如图 3‑20所示,将会是一个78.125uS左右的低电平脉冲。

                       图 3‑20 UART发送数据0

          要设置高级触发或者触发位置都需要buffer模式的支持,需要首先在“选项"设置“运行模式"为“Buffer模式“,同时不要选中“RLE硬件压缩“的选项。设置高级触发条件为通道1出现持续的75个采样点的低电平(对应1MHz采样率,也就是75us的低电平),触发位置设置到80%,便于观察触发之前的数据。具体设置如图 3‑21所示。

                       图 3‑21 高级触发设置

    根据这个触发条件,当设备B发送数据0时就会触发,采集到的波形如图 3‑22所示。

                        图 3‑22 触发位置

    3.4.3.     重复采集

         在某些情况下,我们需要动态的观察一些信号的状态,比如每次Burst发送的数据内容,但是却又不知道数据什么时候发出,不可能频繁的去点击"开始“按钮。DSView提供了"重复“采集的模式,可以在满足触发时自动采集并更新波形。当我们调试一些周期的突发信号时,便可以通过重复模式非常方便的观察动态的采集和协议解析的结果。

    重复模式可以按图 3‑23所示进行设置。重复间隔是指两次采样之间至少停留的时间,方便观察上一次采集的波形和解码结果。

                       图 3‑23 重复采集模式


    3.5.         长时间UART传输的采集

        当需要采集超长时间的波形进行分析时,我们可以使用Stream模式。DSLogic在Stream模式下可以实现每个通道16G的采样深度。在1MHz的采样率下,采集时长可以达到16G/1M ≈ 16000s,也就是4个多小时。


    3.5.1.                 Stream模式

    Stream模式的设置如图 3‑24所示,不同的DSLogic硬件版本支持不同的stream模式通道选项。对于U3Pro16来讲,基于USB3.0的端口,可以实现3通道@最高1GHz采样率,6通道@最高500MHz采样率,12通道@最高250MHz采样率以及16通道@最高125MHz采样率。

                       图 3‑24 Stream模式设置

    当采集的数据量比较大时,可以使用0:UART协议进行解码,和1:UART相比,其省略了bits信息的输出,不支持高层协议堆叠,可以缩短解码时间,减少内存占用。其它功能和1:UART相同。解码效果如图 3‑25所示。

                     图 3‑25 0:UART解码大量数据

    3.5.2.    协议列表显示

          如下图所示,图形化的解码结果是和采集到的波形在时间上完全保持同步的,这有助于我们理解波形和找到问题,但同时因为时间的显示比例问题,不利于对解码结果的查看。列表显示可以很好的弥补这一缺陷,使得查看和分析大量的解码内容变得简单。

                          图 3‑26 列表显示

        DSView提供在图形结果和列表结果之间进行跳转的方式。在列表结果中单击任意一行即可自动跳转到对应的波形结果,同时你还可以在列表的选项里面选择跳转时是自动放大波形进行显示,还是固定波形当前的缩放比列。另外,当我们查看某一个时刻的波形时,如果希望跳转到这段波形对应的解码结果在列表显示的位置,只需要点击列表显示窗口右上角的定位按钮即可。

                 图 3‑27 列表和图形解码的跳转

          另外,通过列表显示还可以把解码的内容导出到文件。如上图所示,点击列表显示的“保存"按钮,可以选择把当前解码的内容导出到csv或者txt文件,方便进行更多的第三方数据处理,比如输入到matlab进行分析,或者作为其它软件的数据输入。

    3.5.3.      解码数据搜索

        列表显示的另一个优势就是可以把解码结果当成字符串进行结果搜索,比如搜索特定操作,或者特定字节数据,可以快速定位需要查看的位置。

    在搜索框中输入需要搜索的关键字,然后按向前/向后按钮即可找到包含关键字的解码内容,同时波形界面也会跳转到相应位置,以供分析。如果正在分析某一段的解析结果,可以单击选中列表的某一行,向前/向后按钮则会以这一行为起始位置,查找前一个和后一个匹配项,而不用从头开始查找。

                        图 3‑28 协议内容搜索

    对于UART协议,DSView还支持多行数据搜索。可以用于查找数据中出现的某些连续的字符串结果。如图 3‑29所示,多行数据搜索通过“-“字符来连接多个关键字。

                         图 3‑29 多行数据搜索

    3.5.4.      波形搜索

          DSView不仅支持解码结果的搜索,还支持原始波形的搜索功能。在很多场景可以快速的定位波形。例如波形突发传输时,因为空闲周期比较长,无法同时看到多次传输的细节波形,可以使用波形搜索,在查看完前一时刻的波形,保证缩放比列不变的情况下,立即跳转到下一次的波形跳变处。

    选中“搜索"工具栏,软件窗口的下方会出现搜索框,单击搜索框,弹出搜索设置窗口,确定通道跳变沿,即可通过左右键搜索符合条件的波形。同时,也可以手动移动搜索光标,以确定搜索的起始位置。

                          图 3‑30 波形搜索

    选中搜索之后会出现带“S"标记的光标,初始状态为灰色,如果点击左/右搜索,并查找到了符合条件的波形,光标会变成蓝色,并自动移动到搜索的位置。如果手动移动了“S"光标,光标会重新变为灰色。

    3.5.5.    光标运用

          DSView支持丰富的光标操作,不仅可以通过光标进行时序的测量,还可以通过光标来标记和追踪特殊波形。当波形空闲或者间隔时间较长时,可在每一个感兴趣的位置都插入光标,想要跳转到某一个感兴趣的波形时,只需要在标尺区域点击右键,再点击想要跳转的光标序号,既可以跳转到对应的光标位置。

    如果想移动光标,只需要将鼠标移动到光标附近,当光标出现加粗显示时,单击鼠标左键即可选中,此时光标便会跟随鼠标移动,确定位置后再次单击左键即可释放光标。当希望光标吸附到特定通道波形的某一个跳边沿时,只需要将移动光标时的鼠标靠近跳变沿附近,光标会自动吸附到跳边沿位置。


    图4-13 光标运用

    3.5.6.      鼠标测量

          除了基于光标的测量,DSView还提供了更加便捷的鼠标测量功能。例如当前脉宽,周期,占空比以及频率的测量(只需要将鼠标放到变化的脉冲上);边沿个数的测量(在波形上点击开始和结束位置便会自动统计此区间的跳变沿);以及边沿距离的测量(鼠标点击起始边沿,再移动到结束边沿即可)。

    如图 3‑31所示,移动鼠标到起始跳变沿的位置,单击鼠标左键,选中起始跳变沿,移动鼠标到结束跳变沿的位置,便会显示两个跳变沿之间的距离(时长/采样间隔点),再次单击鼠标左键完成测量。


          

                           图 3‑31 跳变沿间距


    4.    常见问题


    4.1.         确定未知的波特率

           当我们无法事先获取UART波形的波特率时,也可以通过采集到的波形来猜测真实的波特率。DSView提供“Guess bitrate"的解码器来猜测任意波形串的波特率参数。Guess bitrate 的原理就是依次找到波形中最窄的脉宽,作为一个bit的波形宽度,然后计算其倒数作为波特率。所以其可能出现多个结果,我们只需要观察对应的脉冲是不是合理的脉宽,然后选择最大的波特率结果即可。如图 4‑1所示。

                   图 4‑1 猜测波特率

    获取到波特率之后,便可以设置到UART解码器的选项中。因为 UART协议每次起始位都会重新同步,所以波特率的误差只会在一帧数据中累计,只要一帧以内的误差没有超过bit位的边界,便可以得到正确的解码结果。

    当然,如果波形样本较少,比如波形中没有出现过单个bit宽度的脉冲,那么猜测的波特率很可能不正确,导致解码结果错误。当有不符合协议的波形出现时,UART解码器也会给出可能的错误提示,比如frame error等,如图 4‑2所示。有经验的工程师可以通过观察波形和解码结果,去调整波特率,以便获得正确的解码结果。

                      图 4‑2 解码错误


    4.2.         反相信号的解码

         在之前的章节我们提到,UART协议可以通过不同的物理信号进行传输,有些物理层的信号可能与协议信号是反向的关系(高低电平互换),比如RS232,或者RS485差分信号当中的B-信号。当我们采集到的信号是反向时,DSView的UART解码器也可以通过设置来获取正确的解码结果。

    用户只需要在UART解码器的设置中将“Invert Signal ?"选项设置为“yes"即可。反向信号的解码如下图所示。

                     图 4‑3 反向信号的UART解码


    4.3.     多组UART通讯的解码

          DSView的UART解码器特意设计成单通道的方式,这样可以方便多路通讯进行解码时通道的任意设置。例如对于一个全双工的UART通讯,既有TX信号又有RX信号,那么我们只需要分别添加两个UART解码器来对应TX和RX的解码即可。

    如下图所示,便是同时对3路UART信号进行解码的情况。

                     图 4‑4 多路解码器


    4.4.    起始位置导致的解码错误

          对于任何通讯过程来讲,设备必须从初始状态出发,才能正确的接收到通讯内容,也就是正确的对协议帧进行识别和分析。对于逻辑分析仪来讲也是一样,如果信号的采集正好从一帧数据的中间开始,那么错误的起始位置很可能导致错误的解码结果。如下图所示,设备不停的发送字符串“DreamSourceLab“,但是因为首捕获的位置正好位于数据帧的中间,导致第一段波形的解码变成了乱码。

                    图 4‑5 波形截断错误

    为了避免错误的解码数据,我们可以人为的设置解码的起始位置以及结束位置,从而避免被截断的数据帧导致的解码错误。解码位置可以是任意光标的位置,操作时只需要在插入对应的光标后,解码器的设置里面设置对应的起始和结束位置即可。如下图所示,设置起始位置避免了第一段截断波形的错误解码。

                        图 4‑6 区域解码

    5.   进阶分析


    5.1.   多层协议解析

           UART是一种使用非常广泛的基础协议,有很多在实际应用中使用的传输协议都是在UART的基础上扩展而来。例如:DMX512,LIN,MIDI以及Modbus等,其底层的通讯基础都是UART协议。、

    根据这个特点,DSView同时支持多层协议的解析堆叠。当我们添加一个复杂协议的解码器时,DSView会自动从顶层构建整个协议栈,从而使得解码的结果更加丰富和完善,非常有助于用户对协议的深入分析和理解。

    我们以Modbus RTU为例,来了解一下DSView分析多层协议的过程。基于UART的字节传输功能,Modbus RTU详细的规定了每个字节的具体意义,这样通过把多个UART协议帧组合在一起便形成了Modbus的帧结构。如下图所示。

         图 5‑1 Modbus RTU主站设备请求帧格式

    在使用DSView进行此类协议解码时,只需要在协议搜索框输入对应的协议并添加即可。DSView会自动构建整个堆叠协议的设置页面,如下图所示,用户进行相应的设置即可。

                  图 5‑2 Modbus解码器的设置

         如下图所示,从Modbus RTU的解码结果可以清晰的看出协议的堆叠结构。每一帧的Modbus由8个UART字节帧组成。Modbus帧的内容也会有清晰的注释标明其具体的含义。当出现传输错误时,这样的解码结果可以非常清晰的定位错误的位置,以及错误的原因(是底层UART的问题,还是Modbus协议层的问题)。如果不希望看到底层的细节,在解码器的设置页面把对应的解码内容隐藏即可。

                      图 5‑3 Modbus解码



参与评论

全部评论(0条)

获取验证码
我已经阅读并接受《仪器网服务协议》

热门问答

UAR协议分析


UART协议分析

梦源科技 2022-07-01


1. 协议基础


1.1.    协议简介

  UART是“Universal Asynchronous Receiver/Transmitter",通用异步收发器的缩写。在19世纪60年代,为了解决计算机和电传打字机通信,Bell发明了UART协议,将并行输入信号转换成串行输出信号。因为UART简单实用的特性,其已经成为一种使用非常广泛的通讯协议。我们日常接触到的串口,RS232,RS485等总线,内部使用的基本都是UART协议。

为了更好的理解和分析协议与总线的关系,我们通常把一个完整的通讯规范划分成物理层,协议层以及应用层。物理层只定义真实的信号特性(比如电压,电流,驱动能力等),以及电信号与逻辑信号0和1的对应关系;协议层不关心底层的0和1具体怎么实现,只规定逻辑信号的协议规范以及通讯过程(例如起始,数据以及结束等);应用层不关心数据是怎么获取的,只定义数据表示的意义,以及如何实现具体的业务逻辑。

                图 1‑1 通讯协议的分层实现

     简单的UART协议应用,通常物理层只需要两根传输线,一根用于发送,一根用于接收,从而实现全双工通讯。对于单向传输,也可以只使用一根传输线。此类应用最典型的实例就是单片机的RX/TX端口互相连接,从而实现基于TTL电平的UART通讯。对于不同的传输距离以及可靠性的要求,替换不同的物理层实现既可以得到我们常见的RS232、RS485等通讯总线。


1.2.   不同的物理层实现

     由于UART协议层的输入是逻辑0/1信号,而逻辑0/1信号在物理层可以通过不同的电平标准来区分。针对不同的通讯需求,便可以使用不同的物理层实现。例如简单的板内通讯,或者常见的设备调试场景,使用简单的LVTTL/TTL电平即可在两个设备间进行UART协议通讯。

               图 1‑2 不同的物理层电平标准

      通用的串口则使用的是RS232电平,可以增加传输距离,并且抵抗一定程度的信号干扰。付出的成本则是在物理层需要对应的电平转换芯片来实现,发送端需要将内部的高低电平信号转换成电压更高的+/-电压信号,接收端需要将+/-电压信号转换成内部的高低电平信号。

在工业通讯的场景下,为了进一步提高传输距离,以及增强信号的可靠性,一般会采用RS485的电平标准。在发送端将普通的高低电平信号转换成一对差分信号,在接收端将差分信号再转换成普通的高低电平信号。另外,RS485允许总线上连接多达128收发器,而TTL或者RS232则是点对点的连接。


1.2.1.    基于TTL的UART通讯

     基于TTL的UART通讯,是UART协议应用简单的使用场景。即直接把数字I/O输出的高低电平作为实际的物理信号进行传输。在物理连接上,只需要设备共地,通过一根信号线即可完成单向的设备通讯。如果需要双向全双工,使用两根信号线即可。

   

                 图 1‑3 基于TTL的UART通讯

     为了对比不同物理层实现的差别,我们可以观察发送相同数据时,不同物理层的实际信号有何不同。这里以发送字符‘D‘为例,通过璞石示波器,直接观察TTL实现传输的信号(探头接地端连接设备共地端,探头信号端连接上图蓝色信号线),可以获得如图 1‑4所示的信号波形。从波形可以看出,当没有数据传输时,UART信号会一直保持在高电平(具体信号幅度由I/O的供电电压决定),数据传输时信号发生跳变,传输完成后信号重新回到空闲的高电平状态。

                   图 1‑4 TTL的UART信号波形


1.2.2.     基于RS232的UART通讯

      为了增强驱动能力,以增加传输距离和可靠性,RS232总线采用了双极性电压信号来进行物理传输。信号在发送/接收之前,通过电平转换芯片实现内部信号和总线信号的互相转换。连接方式和TTL电平完全相同,整个物理层只是多了一层电平转换。

                图 1‑5 基于RS232的UART通讯

同样以发送字符‘D‘为例,璞石示波器的探头连接到信号端,可以采集到如图 1‑6所示的实际波形。可以看出,RS232波形在空闲时为负电压,当有数据传输时,信号开始在正负电压之间跳变,传输完成后重新回到空闲的负电压状态。

                  图 1‑6 RS232的UART波形



1.2.3.     基于RS485的UART通讯

      RS485为复杂的工业环境而设计,和其它UART协议的物理层相比,RS485总线最大的特点就是使用了差分信号传输。信号在发送之前,通过RS485的收发器把单端信号转换成差分信号,再发送到总线上进行传输;同样在接收之前,总线上的差分信号通过收发器的转换变成单端信号再送给UART控制器进行接收。在RS485总线上,如果希望进行全双工的双向通讯,需要两对差分信号线(即4根信号线)。如果只进行半双工的双向通讯,则仅需要一对差分信号即可。

              图 1‑7 基于RS485的UART通讯

      还是以发送字符‘D‘为例,使用璞石示波器2个通道的探头(共参考地),分别连接到其中一对差分信号的A/B端,可以采集到如图 1‑8所示的实际波形。可以看出,A/B端的波形为互补关系。A端波形为正向逻辑(空闲时为正电压),B端波形为反向逻辑(空闲时为负电压)。


                 图 1‑8 RS485的UART波形


2.        协议规范


2.1.      UART帧结构

      在上一节的介绍中,我们通过璞石示波器观察了实际的UART波形,那么这个波形到底是怎么被准确的识别成字符‘D‘,而不是其它内容的呢?这就涉及到UART协议帧结构的定义。如图 2‑1所示:



                     图 2‑1 UART协议帧结构

   当两个设备需要通过UART协议进行通讯时,它们需要同时约定好以下内容:

  • 每一位信号的时间长度T(波特率 = 1/T)

  • 帧结构中每一项的具体位数

  • 是否有校验位,以及校验位的机制(奇/偶/..)

有了这些约定,接收设备只需要等待起始位的到来,再对之后的波形进行固定间隔的采样即可获得传输的具体信息。以字符‘D‘的波形为例,其解析过程如图 2‑2所示:

                     图 2‑2 UART波形分析

2.1.1.     波特率

      波特率是UART协议,或者说所有异步串行协议,非常重要的一个概念,即单位时间内(1秒)可表示的bit位个数,或者也可以表述为bit位宽的倒数。例如一个波特率为115200的UART波形表示1秒可容纳115200个bit位,也就是说每一位bit数据占大约8.68uS的时长。

                    图 2‑3 波特率的定义

       UART等异步串行协议,为了简化信号物理连接,降低通讯成本,一般只有一根信号线,无法同时传输数据和时钟信号。收/发设备为了正确解析波形就需要在相同的波特率设置下。而相同的波形使用不同的波特率获取的信息可能会完全不同。对于接收设备来讲,只有起始位可以作为一帧数据的同步点,其它数据都是通过波特率来确定具体的取样位置。

还是以字符‘D’的波形为例,如图 2‑4所示,如果用错误的波特率接收,就可能会得到完全错误的数据信息。

                      图 2‑4 波特率错误

2.1.2.     空闲位

      设备之间不传输数据时以持续的高电平表示空闲。空闲位持续时间越长,两个数据帧间隔也越长,单位时间传输的数据就越少。

                       图 2‑5 空闲位

2.1.3.      起始位

UART接收端会一直检测信号线上的电平变化,开始传输数据时,发送端将信号线从高电平拉到低电平结束空闲状态,并保持一个bit位的时长。接收器检测到高低电平转换时,开始接收信号。

                       图 2‑6 起始位

2.1.4.     数据位

      数据位包含传输的实际数据,如果使用了奇偶校验,那么数据位长为5~8 bits,如果没有使用奇偶校验,则位长为5~9 bits。在一般情况下,数据位为 8 bits,数据首先从低有效位开始发送,高位在后。

                         图 2‑7 数据位

2.1.5.    校验位

    校验位可以用来提高传输的可靠性。如果信号在传输过程中因为干扰而导致某些位置的电平产生错误,通过计算接收的数据和校验位是否匹配即可判断数据是否有传输错误,从而给应用层提供有效信息来决定接受/丢弃对应的数据。

                         图 2‑8 校验位

2.1.6.    停止位

      停止位表示一帧数据的结束,实际信号是一段时间的高电平。停止位的时间长短可以设置为1、1.5或者2bits的停止位。大部分情况使用1bit的停止位。

因为UART是一个异步协议,每一帧的开头可以用跳变沿来同步,但是停止位只能通过波特率来计算相对位置,如果在停止位的位置识别到一个低电平,则会产生帧错误。在通讯过程中,为了减少波特率的误差导致的问题,可以设置不同的停止位长度来适配。

                      图 2‑9 停止位


3.   使用逻辑分析仪分析UART通讯


3.1.    示波器vs逻辑分析仪

       示波器作为主要的通用测试测量仪器,在观察模拟信号的细节方面有着天然的优势。比如说实时运行,配合高波形刷新率,可以方便的观察到突发的异常信号;再比如进行噪声评估以及信号质量优化时,示波器可以很好的对比同一条总线上,不同节点上信号的异同,从而找出隐藏的信号完整性问题。

但是示波器亦天然有着一些不方便的地方,除去通道少,屏幕普遍偏小,操作没有电脑+鼠标的方式灵活可控这些形态上的问题,针对数字信号的采集和分析,示波器最大的问题就是存储深度太小。一台几十万元的示波器存储深度也可能只有几百Mpts。同时,因为存储深度的限制,当需要做稍微长一点时间的采集时,示波器的真实采样率就会剧烈的下降,导致采集到的波形无法还原真实的信号,失去了分析的意义。

              图 3‑1 璞石示波器分析UART信号

               图 3‑2 DSLogic分析UART信号

       逻辑分析仪是只针对数字信号采集和分析而专门设计的测试测量仪器,其采集出来的波形结果只有高低电平两个状态(也就是逻辑上的0和1)。但是却很好的弥补了示波器在采集和分析数字信号上的不足。

  1.  1.     大部分逻辑分析仪都是在PC上操作,借助桌面处理器的强大性能,以及成熟操作系统的交互体验,极大了提升了数字信号分析的便捷性和效率。

  2.  2.     逻辑分析仪通道数多,入门级别的DSLogic逻辑分析仪就有16个通道可以同时采集,用户也可以以非常合理的成本获取拥有几十个,甚至上百个通道的逻辑分析仪产品。

  3.  3.     逻辑分析仪的存储深度更大,比如DSLogic在stream模式下可以达到16G的存储深度,并且同时保持相当高的采样率,远超绝大多数示波器的采集能力。

  4.  4.     逻辑分析仪普遍提供丰富的协议解码功能,可以对数字信号进行深入的分析。例如DSLogic目前支持的解码协议就多达100多种。大部分示波器的解码能力有限,而且大多需要单独购买相应的插件。

我们接下来将重点介绍如何使用逻辑分析仪进行各种情形下UART信号的采集和分析。


3.2.    建立逻辑分析仪的测试环境

3.2.1.     DSLogic的连接

DSLogic是一款基于USB连接的便携式逻辑分析仪。DSLogic主机负责信号采集和缓存,然后通过USB把数据传输给PC上的上位机软件DSView。DSView负责波形数据处理,显示,分析,以及对应的人机交互功能。

                 图 3‑3 连接DSLogic到PC

     使用时,只需要将DSLogic主机通过USB数据线直接连接到PC主板上的USB端口,打开DSView软件,并确认DSLogic主机上的指示灯变为常绿状态。此时便完成了逻辑分析仪的连接和初始化工作。如图 3‑4所示,在DSView软件上可以观察到左上角的当前设备名称,以及对应的连接状态。

               图 3‑4 DSLogic连接状态

3.2.2.      UART信号连接

      对于所有的测量来讲,测试设备和被测信号必须基于一个共同的参考平面,也就是通常我们所说的接地,这样被测信号才能被正确采集和测量。在某些情况下,会遇到没有做显性的接地,但是测量结果貌似没有问题的情景,这是因为测量设备与被测信号通过其它的方式进行了共地连接,比如使用的同一个电源供电,或者参考地同时接入了市电的接地端等等。但是在进行严谨的测量时,测量设备应根据被测信号进行就近接地处理。被测信号到测量设备的信号接地端环路面积越大,信号就越容易被干扰,从而产生测量误差甚至测量错误。

针对UART信号来讲,接入逻辑分析仪时,简单的情况只需要连接2根线,一根接参考地,一根接被测信号即可。针对我们之前提到的UART协议的不同物理层实现,信号连接的方式会稍有不同。

例如对于TTL电平的UART信号,除了连接参考地之外,只需要连接需要测试的信号(TX或者RX)分别接入逻辑分析仪对应的通道输入即可。

              图 3‑5 TTL信号与逻辑分析仪连接

      对于RS232总线信号,我们既可以直接测量电平转换之后的总线信号(DSLogic在排线输入端的耐压范围为+-30V,RS232的+-15V的信号范围可以直接接入),也可以测量电平转换之前的内部数字信号。其接线的方式和TTL信号一致,需要注意的是RS232信号对电平进行了翻转(空闲时为负电压,即低电平),在进行UART协议解码时,我们可以在DSView的解码设置窗口进行对应的信号电平翻转(Invert Signal选项设置为yes)。

             图 3‑6 RS232信号与逻辑分析仪连接

      RS485总线使用的是差分信号,当我们用逻辑分析仪进行信号采集时,需要特别注意被测信号的连接方式。首先,逻辑分析仪的参考地需要连接到对应的被测设备RS485收发器的参考地,这样才可以保证逻辑分析仪有正确的电平参考平面;其次,对于差分信号,逻辑分析仪只需要采集到与内部信号同极性的高低电平即可。从数字信号的角度来讲,差分的方式只是提高信号传输的可靠性,不增加额外的信息量。如图 3‑7所示,使用逻辑分析仪测试485总线信号时,连接对应设备收发器的参考地,以及差分总线上的的A+信号即可。

当然,如果只能采集到B-信号,我们也可以在DSView进行解码时,设置UART解码器进行信号翻转的方式来得到正确的协议解析结果。

             图 3‑7 RS485总线与逻辑分析仪连接

3.2.3.      阈值设置

       逻辑分析仪的阈值为高低电平的电压,也就是说当输入信号电压高于阈值电压时,采集到的便是高电平;当输入信号电压低于阈值电压时,采集到的便是低电平。

针对UART协议,我们之前已经介绍了其有不同的物理层实现,不同的物理层实现有不同的电平标准。我们只需要选择一个对应的阈值可以区分不同情况下的高低电平即可。如图 3‑8所示的阈值基本可以满足这个要求。

              图 3‑8 UART信号的阈值设置

      在某些情况下,因为配置或者调试的需要,RS485总线的差分信号幅度可能在比较大的范围变动。因为RS485的规范规定只要A-B之间的差分电压大于200mV既可以认为是高电平。此时我们可以借助璞石示波器,观察实际的信号电平幅度,再来决定合适的阈值设置。只需要确保设置的阈值电压可以合理的分辨出高低电平即可。


3.3.     简单的UART信号采集

      绝大部分UART信号都是低速信号,例如常用的波特率115200,表示信号频率只有115.2KHz。使用DSLogic的默认设置即可直接采集到此类信号。此处以主机固定1s间隔,重复发送字符‘D‘为例,介绍如何使用逻辑分析仪采集和分析此类UART信号。

3.3.1.                 信号采集

    在准备好硬件和信号连接之后,直接点击DSView软件的“开始“按钮,就可以以默认设置(1MHz采样率采集1s时长)采集被测信号。如果希望修改采样率和采集时长,直接在对应下拉框中选择对应的参数即可。采样率的设置原则推荐为被测信号最高频率的10倍或以上,例如对于115200波特率的UART信号,最快的信号频率为115.2KHz,当选择1M采样率时,每bit信号会有8或者9个采样点,对应的相位误差为+-1/8(12.5%);当选择10M采样率时,每bit信号会有86或者87个采样点,对应的相位误差为+-1/86(1.16%)。当然一般情况下也不推荐使用过高的采样率,因为采样率越高能采集的时长就越短,另外采样率过高可能采集到慢速信号单个跳变沿的多次跳变,从而给协议解码带来困扰。图 3‑9便是使用默认设置采集得到的信号波形。

                      图 3‑9 默认采集

       从图 3‑9可以看出,通道0采集到持续为高电平的信号,但是并没有发现有任何跳变。仔细观察波形窗口上面的时间标尺以及窗口底部的滚动条,可以得知当前窗口显示的只是采集到的部分波形,不是全部信号。此时可以通过鼠标滚轮缩放,或者在波形区域右键双击的方式显示整个采集时长的所有波形。得到如图 3‑10所示的结果。

                  图 3‑10 显示整个采集窗口

       在上图的基础上,我们希望只观察通道0的跳变部分。可以在“选项"窗口关闭其它通道的波形显示,调节通道信号的显示高度。然后将鼠标指向目标波形,并同时通过鼠标滚轮放大所指位置的波形;或者可以通过按住鼠标右键框选希望放大的波形区域。另外,按住鼠标左键可以对波形进行左右移动。得到如图 3‑11所示的波形细节。

                    图 3‑11 观察波形细节

       在观察波形时,把鼠标放到脉冲波形上既可以显示当前信号的脉冲宽度,周期,频率以及占空比等信息。同时,也可以通过鼠标双击左键的方式添加光标,移动光标时会自动吸附到靠近的跳变沿。

3.3.2.     UART解码

    逻辑分析仪采集到的信号波形只有高低电平(0/1)在时间上的变化,这不利于我们对信号传输的过程和内容进行有针对性的分析。虽然我们可以根据协议规范,用肉眼来翻译波形对应的协议内容,但是将大大降低分析的效率。DSView自带的解码器可以提供丰富的协议解码内容,使得枯燥的波形变成有意义的字符,标记以及数据内容。极大的方便了工程师对信号的分析和理解,从而找出错误信息或者关键数据。

在DSView软件里对已经采集到的波形进行协议解码非常简单,只需要打开“解码"面板,搜索到对应的解码器(这里我们选择1:UART协议),设置对应解码器的选项(包括显示/通道/帧结构/格式等),确定之后软件就会开始对选定通道进行UART的协议解码。并在协议通道显示解码的结果。如图 3‑12所示。

                   图 3‑12 添加UART解码

      在选择解码器时,DSView提供便捷的协议搜索功能,只需要在协议搜索框输入关键字符,DSView便会列出所有包含这些字符的解码器,用户在其中选择正确的解码器即可。如图 3‑13所示和UART相关的有两个协议0:UART和1:UART,其中0:UART是一个简化的解码器,其不进行bits信息的解析,也不支持高层协议的堆叠,当我们只想获取波形对应的数据时,可以使用此简化协议来减少解码的时间和占用的内存资源。

                        图 3‑13 协议搜索

      解码器的设置窗口有很多和解码相关的设置选项,不同协议的设置窗口内容也会不同。其中有一些所有解码器都必须设置的选项,比如通道和协议信号之间的对应关系。此处我们使用的是通道0抓取的UART信号,那么对应的需要解码的通道就应该设置成通道0。

和协议相关的设置选项我们在帧结构的部分都有详细讲解,在实际操作种也可以通过串口的上位机软件(串口调试助手等)来获取这些信息。如图 3‑14所示。

                    图 3‑14 协议相关的选项

    对于解码的数据内容,DSView支持不同的显示格式。例如之前采集的UART信号按照ASCII码的方式显示字符‘D’,也可以修改成十六进制(Hex)的显示方式,结果便会显示0x44。如图 3‑15所示。目前支持的显示格式有:hex(十六进制)、dec(十进制)、oct(八进制)、bin(二进制)以及ascii码。

                    图 3‑15 格式选择


3.4.     单次UART传输的采集

      当我们要捕获的波形是一个偶发信号时,我们并不知道什么时候波形会出现,如果使用直接的采集方式可能大部分时间就只能捕获到空闲的信号波形,无法抓取到实际传输时的信号。

这个时候便可以通过触发来进行捕获。通过设置对应的触发条件,我们可以根据波形的变化来控制信号采集的开始时间,从而精准的捕获到希望看到的信号波形。

3.4.1.    Buffer模式

    DSLogic支持两种采集模式:Stream模式和Buffer模式。在Stream模式下采集到的数据会实时的传输到PC,然后由DSView处理。Buffer模式采集到的数据会先缓存在DSLogic的内部硬件缓存中,等采集完成后再传输到PC,由DSView处理。

Buffer模式除了可以达到更高的采样率这个优点外,还支持更多的触发选项和设置,比如多级触发,串行触发以及触发位置的设置等。而Stream模式仅支持简单触发。

                       图 3‑16 模式选择

3.4.2.     触发设置

      对于简单触发,我们可以直接设置通道旁边的触发选项。其依次对应上升沿,高电平,下降沿,低电平以及任意边沿触发。在触发面板保持默认的简单触发模式即可。例如对于不知道什么时候发生的UART传输,我们可以选择下降沿触发。当UART 信号一直处于空闲状态时,触发就不会被满足。DSLogic会一直等待触发条件的到来,如图 3‑17所示。

                      图 3‑17 等待触发

当UART开始传输第一个起始位时,便会激活触发条件,DSLogic将采集到触发时的信号波形。如图 3‑18所示。

                     图 3‑18 触发采集

      我们考虑复杂一点的触发场景,例如设备A不断的随机给设备B发送数据,设备B则根据设备A发送的数据内容回复不同的数据。如果我们想要知道设备B发送数据0之前,设备A给设备B发送了哪些数据,该如何设置触发条件抓到对应时刻的波形呢?

这里有两个问题需要解决,首先我们需要设置触发的位置,从而看到触发之前的数据,而不是触发之后的数据;其次我们要找出设备B发送数据0的波形特征,并把其转换成对应的触发条件。

                          图 3‑19 触发位置

    根据UART的协议规则,发送数据0的波形会是一个比较宽的持续低电平脉冲信号。如果UART的波特率为115200,我们设置的采样率为1MHz,数据0的波形如图 3‑20所示,将会是一个78.125uS左右的低电平脉冲。

                   图 3‑20 UART发送数据0

      要设置高级触发或者触发位置都需要buffer模式的支持,需要首先在“选项"设置“运行模式"为“Buffer模式“,同时不要选中“RLE硬件压缩“的选项。设置高级触发条件为通道1出现持续的75个采样点的低电平(对应1MHz采样率,也就是75us的低电平),触发位置设置到80%,便于观察触发之前的数据。具体设置如图 3‑21所示。

                   图 3‑21 高级触发设置

根据这个触发条件,当设备B发送数据0时就会触发,采集到的波形如图 3‑22所示。

                    图 3‑22 触发位置

3.4.3.     重复采集

     在某些情况下,我们需要动态的观察一些信号的状态,比如每次Burst发送的数据内容,但是却又不知道数据什么时候发出,不可能频繁的去点击"开始“按钮。DSView提供了"重复“采集的模式,可以在满足触发时自动采集并更新波形。当我们调试一些周期的突发信号时,便可以通过重复模式非常方便的观察动态的采集和协议解析的结果。

重复模式可以按图 3‑23所示进行设置。重复间隔是指两次采样之间至少停留的时间,方便观察上一次采集的波形和解码结果。

                   图 3‑23 重复采集模式


3.5.         长时间UART传输的采集

    当需要采集超长时间的波形进行分析时,我们可以使用Stream模式。DSLogic在Stream模式下可以实现每个通道16G的采样深度。在1MHz的采样率下,采集时长可以达到16G/1M ≈ 16000s,也就是4个多小时。


3.5.1.                 Stream模式

Stream模式的设置如图 3‑24所示,不同的DSLogic硬件版本支持不同的stream模式通道选项。对于U3Pro16来讲,基于USB3.0的端口,可以实现3通道@最高1GHz采样率,6通道@最高500MHz采样率,12通道@最高250MHz采样率以及16通道@最高125MHz采样率。

                   图 3‑24 Stream模式设置

当采集的数据量比较大时,可以使用0:UART协议进行解码,和1:UART相比,其省略了bits信息的输出,不支持高层协议堆叠,可以缩短解码时间,减少内存占用。其它功能和1:UART相同。解码效果如图 3‑25所示。

                 图 3‑25 0:UART解码大量数据

3.5.2.    协议列表显示

      如下图所示,图形化的解码结果是和采集到的波形在时间上完全保持同步的,这有助于我们理解波形和找到问题,但同时因为时间的显示比例问题,不利于对解码结果的查看。列表显示可以很好的弥补这一缺陷,使得查看和分析大量的解码内容变得简单。

                      图 3‑26 列表显示

    DSView提供在图形结果和列表结果之间进行跳转的方式。在列表结果中单击任意一行即可自动跳转到对应的波形结果,同时你还可以在列表的选项里面选择跳转时是自动放大波形进行显示,还是固定波形当前的缩放比列。另外,当我们查看某一个时刻的波形时,如果希望跳转到这段波形对应的解码结果在列表显示的位置,只需要点击列表显示窗口右上角的定位按钮即可。

             图 3‑27 列表和图形解码的跳转

      另外,通过列表显示还可以把解码的内容导出到文件。如上图所示,点击列表显示的“保存"按钮,可以选择把当前解码的内容导出到csv或者txt文件,方便进行更多的第三方数据处理,比如输入到matlab进行分析,或者作为其它软件的数据输入。

3.5.3.      解码数据搜索

    列表显示的另一个优势就是可以把解码结果当成字符串进行结果搜索,比如搜索特定操作,或者特定字节数据,可以快速定位需要查看的位置。

在搜索框中输入需要搜索的关键字,然后按向前/向后按钮即可找到包含关键字的解码内容,同时波形界面也会跳转到相应位置,以供分析。如果正在分析某一段的解析结果,可以单击选中列表的某一行,向前/向后按钮则会以这一行为起始位置,查找前一个和后一个匹配项,而不用从头开始查找。

                    图 3‑28 协议内容搜索

对于UART协议,DSView还支持多行数据搜索。可以用于查找数据中出现的某些连续的字符串结果。如图 3‑29所示,多行数据搜索通过“-“字符来连接多个关键字。

                     图 3‑29 多行数据搜索

3.5.4.      波形搜索

      DSView不仅支持解码结果的搜索,还支持原始波形的搜索功能。在很多场景可以快速的定位波形。例如波形突发传输时,因为空闲周期比较长,无法同时看到多次传输的细节波形,可以使用波形搜索,在查看完前一时刻的波形,保证缩放比列不变的情况下,立即跳转到下一次的波形跳变处。

选中“搜索"工具栏,软件窗口的下方会出现搜索框,单击搜索框,弹出搜索设置窗口,确定通道跳变沿,即可通过左右键搜索符合条件的波形。同时,也可以手动移动搜索光标,以确定搜索的起始位置。

                      图 3‑30 波形搜索

选中搜索之后会出现带“S"标记的光标,初始状态为灰色,如果点击左/右搜索,并查找到了符合条件的波形,光标会变成蓝色,并自动移动到搜索的位置。如果手动移动了“S"光标,光标会重新变为灰色。

3.5.5.    光标运用

      DSView支持丰富的光标操作,不仅可以通过光标进行时序的测量,还可以通过光标来标记和追踪特殊波形。当波形空闲或者间隔时间较长时,可在每一个感兴趣的位置都插入光标,想要跳转到某一个感兴趣的波形时,只需要在标尺区域点击右键,再点击想要跳转的光标序号,既可以跳转到对应的光标位置。

如果想移动光标,只需要将鼠标移动到光标附近,当光标出现加粗显示时,单击鼠标左键即可选中,此时光标便会跟随鼠标移动,确定位置后再次单击左键即可释放光标。当希望光标吸附到特定通道波形的某一个跳边沿时,只需要将移动光标时的鼠标靠近跳变沿附近,光标会自动吸附到跳边沿位置。


图4-13 光标运用

3.5.6.      鼠标测量

      除了基于光标的测量,DSView还提供了更加便捷的鼠标测量功能。例如当前脉宽,周期,占空比以及频率的测量(只需要将鼠标放到变化的脉冲上);边沿个数的测量(在波形上点击开始和结束位置便会自动统计此区间的跳变沿);以及边沿距离的测量(鼠标点击起始边沿,再移动到结束边沿即可)。

如图 3‑31所示,移动鼠标到起始跳变沿的位置,单击鼠标左键,选中起始跳变沿,移动鼠标到结束跳变沿的位置,便会显示两个跳变沿之间的距离(时长/采样间隔点),再次单击鼠标左键完成测量。


      

                       图 3‑31 跳变沿间距


4.    常见问题


4.1.         确定未知的波特率

       当我们无法事先获取UART波形的波特率时,也可以通过采集到的波形来猜测真实的波特率。DSView提供“Guess bitrate"的解码器来猜测任意波形串的波特率参数。Guess bitrate 的原理就是依次找到波形中最窄的脉宽,作为一个bit的波形宽度,然后计算其倒数作为波特率。所以其可能出现多个结果,我们只需要观察对应的脉冲是不是合理的脉宽,然后选择最大的波特率结果即可。如图 4‑1所示。

               图 4‑1 猜测波特率

获取到波特率之后,便可以设置到UART解码器的选项中。因为 UART协议每次起始位都会重新同步,所以波特率的误差只会在一帧数据中累计,只要一帧以内的误差没有超过bit位的边界,便可以得到正确的解码结果。

当然,如果波形样本较少,比如波形中没有出现过单个bit宽度的脉冲,那么猜测的波特率很可能不正确,导致解码结果错误。当有不符合协议的波形出现时,UART解码器也会给出可能的错误提示,比如frame error等,如图 4‑2所示。有经验的工程师可以通过观察波形和解码结果,去调整波特率,以便获得正确的解码结果。

                  图 4‑2 解码错误


4.2.         反相信号的解码

     在之前的章节我们提到,UART协议可以通过不同的物理信号进行传输,有些物理层的信号可能与协议信号是反向的关系(高低电平互换),比如RS232,或者RS485差分信号当中的B-信号。当我们采集到的信号是反向时,DSView的UART解码器也可以通过设置来获取正确的解码结果。

用户只需要在UART解码器的设置中将“Invert Signal ?"选项设置为“yes"即可。反向信号的解码如下图所示。

                 图 4‑3 反向信号的UART解码


4.3.     多组UART通讯的解码

      DSView的UART解码器特意设计成单通道的方式,这样可以方便多路通讯进行解码时通道的任意设置。例如对于一个全双工的UART通讯,既有TX信号又有RX信号,那么我们只需要分别添加两个UART解码器来对应TX和RX的解码即可。

如下图所示,便是同时对3路UART信号进行解码的情况。

                 图 4‑4 多路解码器


4.4.    起始位置导致的解码错误

      对于任何通讯过程来讲,设备必须从初始状态出发,才能正确的接收到通讯内容,也就是正确的对协议帧进行识别和分析。对于逻辑分析仪来讲也是一样,如果信号的采集正好从一帧数据的中间开始,那么错误的起始位置很可能导致错误的解码结果。如下图所示,设备不停的发送字符串“DreamSourceLab“,但是因为首捕获的位置正好位于数据帧的中间,导致第一段波形的解码变成了乱码。

                图 4‑5 波形截断错误

为了避免错误的解码数据,我们可以人为的设置解码的起始位置以及结束位置,从而避免被截断的数据帧导致的解码错误。解码位置可以是任意光标的位置,操作时只需要在插入对应的光标后,解码器的设置里面设置对应的起始和结束位置即可。如下图所示,设置起始位置避免了第一段截断波形的错误解码。

                    图 4‑6 区域解码

5.   进阶分析


5.1.   多层协议解析

       UART是一种使用非常广泛的基础协议,有很多在实际应用中使用的传输协议都是在UART的基础上扩展而来。例如:DMX512,LIN,MIDI以及Modbus等,其底层的通讯基础都是UART协议。、

根据这个特点,DSView同时支持多层协议的解析堆叠。当我们添加一个复杂协议的解码器时,DSView会自动从顶层构建整个协议栈,从而使得解码的结果更加丰富和完善,非常有助于用户对协议的深入分析和理解。

我们以Modbus RTU为例,来了解一下DSView分析多层协议的过程。基于UART的字节传输功能,Modbus RTU详细的规定了每个字节的具体意义,这样通过把多个UART协议帧组合在一起便形成了Modbus的帧结构。如下图所示。

     图 5‑1 Modbus RTU主站设备请求帧格式

在使用DSView进行此类协议解码时,只需要在协议搜索框输入对应的协议并添加即可。DSView会自动构建整个堆叠协议的设置页面,如下图所示,用户进行相应的设置即可。

              图 5‑2 Modbus解码器的设置

     如下图所示,从Modbus RTU的解码结果可以清晰的看出协议的堆叠结构。每一帧的Modbus由8个UART字节帧组成。Modbus帧的内容也会有清晰的注释标明其具体的含义。当出现传输错误时,这样的解码结果可以非常清晰的定位错误的位置,以及错误的原因(是底层UART的问题,还是Modbus协议层的问题)。如果不希望看到底层的细节,在解码器的设置页面把对应的解码内容隐藏即可。

                  图 5‑3 Modbus解码



2022-07-14 14:20:01 229 0
wireshark网络故障协议分析视频教程
求陈鑫杰老师的wireshark网络故障协议分析视频教程小弟对网络很感兴趣,奈何手上米不够,看过陈老师的基础版本的对wireshark的讲解,但是对于网络故障分析这一块抓包之后不知道怎么去... 求陈鑫杰老师的 wireshark网络故障协议分析视频教程 小弟对网络很感兴趣,奈何手上米不够,看过陈老师的基础版本的对wireshark的讲解,但是对于网络故障分析这一块抓包之后不知道怎么去分析网络故障,找遍了网上的资源,还是没有找到,跪求有资源的大神指点迷经,不胜感激,本人以自己的名誉保证不外传资料。再次感谢! 大神您可以私信我,kali10010@outlook.com,这个是我的邮箱,再次感谢 展开
2018-04-17 01:42:40 341 2
怎么用逻辑分析仪分析IIC协议?
 
2018-12-07 09:27:27 329 0
ZLG致远电子逻辑分析仪支持自定义协议解码分析吗?
 
2015-11-11 19:47:20 310 1
modbus协议与tcp协议有什么关系?
控制器能设置为三种传输模式(ASCII、RTU或TCP)中的任何一种在标准的Modbus网络通信。
2011-04-14 20:58:36 307 3
DSLogic 逻辑分析仪 解析出来的IIC协议分析实在太WM了!

1. 协议基础

1.1.     协议简介

IIC-BUS(Inter-IntegratedCircuit Bus)是由PHilip半导体(现在被NXP收购)于1982年开发。主要是用来方便微控制器与外围器件的数据传输。它是一种半双工,由SDA(数据)和SCL(时钟)组成的两线式串行传输总线。

目前ZX的协议版本是2014版,官方链接如下:

https://www.nxp.com/docs/en/user-guide/UM10204.pdf

1.2.     物理信号


图1-1 IIC实际的波形


图1-2 IIC协议基本形式


IIC由一条时钟线和一条数据线组成。如图1-1是示波器抓取的实际信号、1-2是IIC协议数据传输的基本形式。

IIC的输入输出结构采用的是开漏的结构。开漏结构不能够自主得到高电平,所以需要通过外部上拉电阻Rp来的实现IIC通信过程中的高电平。Rp的大小取决于IIC不同模式时的灌电流大小。

图1-3和图1-4是描述IIC获得高低电平的情景。因为一条IIC总线上面可能会同时连接上多个设备,如果IIC使用的是推挽输出的话容易引起短路。IIC设备可以通过控制N-MOS管的开关来控制输出信号的电平高低。当MOS管G极为低电平时MOS管截止IIC总线上面由于有上拉电阻的存在而为高电平;当MOS管G极为高电平时MOS管导通,IIC总线相当于直接接地为低电平。

IIC的输入是通过TTL肖特基触发器将数据传输到输入数据寄存器当中,再提供给处理器处理。


图1-3




图1-4

 

IIC的电平标准:

由于种类的设备都有可能连接到IIC总线上面,比如说CMOS、NMOS等,所以IIC的高电平和低电平的标准是不一定的。高电平和低电平的值分别为0.7VDD和0.3VDD。


图1-5

 

1.3.     总线连接


图1-6


         IIC的时钟线总是由主机控制,主机与从机之间的数据传输只在SDA一根线上完成,不能同时发送和接收数据,所以IIC是一种半双工的通信协议。一条IIC总线上面可以挂载多个设备,每一个设备都有其对应的设备地址,设备之间数据传送只能由一个设备传送给对应地址的设备。

图1-7


IIC的总线连接可以接受多主机的模式,也就是说一条IIC总线上面可以有多个设备可以作为主机来使用,但是在一次数据的传输过程中只能有一个设备作为主机。一条IIC总线上面谁是主机取决于总线上面的时钟和数据信号由谁控制。如图1-7所示,这一条IIC总线上面挂载了多个设备,其中MCU1和MCU2都可以作为主机来使用,但是不能同时有两个主机。

如果两个MCU同时发起开始信号时(都试图成为主机),这时候IIC的仲裁机制会发挥作用来判定谁成为主机。


图1-8


IIC的仲裁机制得益于其开漏的输入输出结构。例如如图1-8所示,当SCL线上挂载的多个设备,其中的MCU2的SCL输出低电平,那么这条IIC总线SCL就会被MCU2拉低,这也就是“与”的特性。

IIC上的仲裁主要是由两部分组成SCL时钟同步、SDA线仲裁。


图1-9


如图1-9所示CLK1和CLK2都是连接在一条SCL线上的设备同时产生的时钟信号,由于IIC总线存在“与”的特性,所以两个设备高电平相同的部分形成了SCLZZ的时钟,也就是说同一条IIC总线上面的时钟都是相同的。


图1-10


    同样SDA仲裁也是基于“与”的特性。如图1-10所示当两个设备同时发出开始信号想要传送数据时,在DY个和第二个周期内DATA1和DATA2的数据都是相同的,然后两者继续传送数据,当在第三个时钟周期时DATA2与SDA的数据不一致,这个时候设备2就会停止发送数据,转而启动接收模式。这样SDA的数据就会与DATA1的数据保持一致,并且设备2停止发送数据也不会影响SDA的数据。

 


 

2. 协议规范

2.1.         编码规则

起始、停止条件:IIC的起始信号为当时钟信号线(SCL)为高电平时,数据线(SDA)产生一个下降沿,停止信号为当时钟信号线(SCL)为高电平时,数据线(SDA)产生一个上升沿。

图2-1


应答位、非应答位:当主机传送8位数据结束后,主机会将SDA线拉高,此时如果从机正确接收数据则会将SDA拉低并在SCL高电平时保持低电平,这个信号为ACK信号。如果在传输8位数据后从机没有将SDA拉低则该信号为NACK。如果出现NACK则表示数据传输出错。



图2-2


数据有效性:当时钟信号为高电平的时候,数据线上的信号需要保持不变也就是在时钟线为高电平的时候数据线出现上升下降沿的话就会产生停止和启动信号,从而导致数据的传输出错。


图2-3


byte组织:SDA上的数据传输是以8bit即一个字节为单位传输的,每一次传输的字节数没有限制,每传输完一个字节后必须跟随一个应答位。

我们以01001001(0X49)为例,其时序图如下:


图2-4

2.2.     信号传输

IIC总线上面的每一个设备都有WY的地址与之对应,信号传输时也是根据指定的地址找到设备来传输信号。

写操作:主机确定了从机的设备地址后,生成一个开始信号,然后向IIC总线上面发送设备的地址和读写方向标志。从机检测到该地址和自己设备地址相对应后,回复主机一个应答信号。主机接收到应答信号后就开始向这个设备以字节为单位发送数据,每一个字节后面都会带有从机的应答信号,直到主机发送完成ZH一个数据后生成一个停止信号结束此次数据的传输。


图2-5

 

读操作:读操作与写操作有一些类似,同样的是需要确定需要读取的从设备的地址。然后主机生成开始信号,再向IIC总线上发送从设备的地址和读数据的指令。从设备接收到地址与自己的吻合后会产生一个应答信号。就这从设备就开始向主机发送主机想要读取的数据,主机正确接收数据后会向从机回复应答信号,当主机想要结束读取操作时,主机会回复一个非应答信号,然后生成停止信号结束数据的读取。


图2-6


2.3.     传输示例


图2-7


    如图2-7所示是示波器采集的IIC信号,我们通过自己的观察得到这一段IIC包含的信息,主机向地址为0XA0 的设备写入0X0C。

    通过示波器我们可以观察到IIC信号真实的模样, 但是我们也可以体会到示波器在分析数字信号的过程中有很多不便之处。

(1)  示波器分析通道比较少:

一般我们使用的示波器都是双通道,而刚好IIC总线只有两根线组成,但是当我们需要测量的数字信号时由多根线组成的话(比如说spi),用两通道的示波器就不方便我们使用。

(2)  示波器的存储深度比较小:一般来讲示波器的存储深度有限,有与存储深度和采样率采样时长有很大的联系:

存储深度=采样率X显示时间

那么在上面的公式的原则下,示波器的存储深度是一定的,我们想要设置较高的采样率的话就无法显示较长的波形,如图2-8所示,想要的到足够长的波形的话采样率则会不足,如图2-9所示。

图2-8

图2-9低采样率

 

(3)  没有协议解码功能

如图2-7所示,示波器抓取到的波形只有光秃秃的波形,我们需要自己将波形放大去仔细辨认才能得到其中的信息。

图2-10逻辑分析仪解码结果


        而相比于示波器逻辑分析仪能更好的辅助工程师抓取,识别数字信号。如图2-10所示逻辑分析仪带有解码功能,它可以自动帮助工程师读取出其中数据。逻辑分析仪的通道数量一般都在16个以上,并且在存储深度这方面,逻辑分析仪要远远大于示波器,因此他可以记录很长的数据。

 


 

3. 逻辑分析仪准备

逻辑分析仪使用详情可参考:https://www.dreamsourcelab.com/doc/DSView_User_Guide.pdf

3.1.     设备连接和状态检查

逻辑分析仪带有一个type-c的接口,使用正确的连接线价格逻辑分析仪接入电脑的USB接口(如果逻辑分析仪是支持USB 3.0 接口的话接入USB 2.0接口会影响其ZG速率)。一定要等到逻辑分析仪指示灯显示为绿灯和软件上显示为正确的仪器设备,此时才能正确地操作和使用逻辑分析仪。


图3-1

3.2.     被测信号连接

正常连接好USB后,逻辑分析仪会亮绿灯,再将排线插入逻辑分析仪的检测通道。排线四个通道分为一组,基础版设备4个通道配一根地线,增强版每一个通道都配有地线,由于一般情况下的IIC速率都比较小,所以我们只需要连接两个通道和一根公共地线就行了。


图3-2

4. 波形抓取和协议分析

4.1.     采集设置

采集时长、采样率:关于采样率和采样时长,我们需要明白的一点是他们都和存储深度有关。存储深度=采样率*窗口显示时长

IIC总线的传输速率一般是几百KHZ,我们的传输速率设置为几MHz就行。这里我们采用4MHz的采样率对IIC进行采样。这里不同的采样率下逻辑分析仪的最长采样时长是不一样的,DSView会根据你设置的采样率来计算出最长的采集时长。你可以根据自己的数据量选择相应的采样时长。


图4-1


运行模式和阈值:DSView中逻辑分析仪抓取信号的运行模式有stream和buffer模式。stream模式下不同通道数有不同的ZG采样率,而buffer模式下ZG采样率是固定的。另外就是由于stream模式采用的是PC的内存所以有很长的采样深度。DSView的电压阈值可以设置的范围是0~5V之间。通常的3.3V数字系统,我们设置阈值电压为1.0V就可以,如果设置太低或者太高会导致信号不JZ。


图4-2


这里需要注意的是stream模式下DSView无法进行高级触发,只能进行一些简单触发,如果需要用逻辑分析仪抓取特定的数据的话需要将运行模式调整到buffer模式下。

图4-3

4.2.     触发条件设置和采集

简单触发:简单触发只需要通过设置某个通道的触发条件就可以实现信号的抓取。如图4-4所示我们设置触发条件为当通道1产生边沿信号,当通道1产生上升沿或者下降沿的时候就会触发。

图4-4


采集:DSView能够实现立即和正常捕获。立即捕获可以理解为立即抓取当前的IIC信号,不会顾及触发条件。当你的IIC信号比较短,并且你设置的采样时长比较短时可能会抓取不到波形。

正常捕获只需要点击开始按钮(或者按键盘S键)就可以进入正常捕获模式。正常捕获可以响应触发条件,并且可以设置采集模式。

图4-5

 

DSView运行单次采集和重复采集。单次采样只允许你采集一次便会停止采集。重复采集是完场一次采集后等待响应的时间间隔后又会重新开始采集并不断这样的循环。如图4-6所示我们可以设置间隔采集的时间,设置范围为1~10S。

图4-6

4.3.     波形查看和测量

缩放:波形的缩放通过鼠标滚轮就能够实现波形的缩放。也可以通过键盘上的左右键来缩放波形。还可以通过鼠标右键框选住波形来将波形细节放大(右键框选只可以放大不能缩小波形)。

 

图4-7右键框选放大


移动:按住鼠标左键能够实现波形的左右移动。

 

频率测量:直接将鼠标移动到波形的ZY,就可以计算这个信号的频率,周期等信息。

图4-8鼠标检测频率


光标运用:当你的波形比较长窗口无法完全显示的时候,我们可以使用光标标记你想观察的地方然后根据光标实现波形位置的跳转。在波形的上双击就能添加光标,光标的可添加数量不受限制。当你想要实现位置跳转的时候直接鼠标右击光标就会出现相应的序号,然后直接点击序号跳转到相应的光标。


图4-9光标跳转GIF图


4.4.     协议添加和解码分析

我们采集到的IIC总线上面的信号是两条波形图,比较生硬不利于我们了解其中包含的信息。这个时候我们就需要使用到DSView中所包含的解码功能。解码功能可以将IIC协议中包含的内容以直观的形式表现出来,方便我们分析。

步骤一:点击菜单栏上面的解码DSView界面右侧就会出现添加解码协议的窗口。


图4-10


步骤二:在右侧出现的窗口中选择IIC协议,在点击这个加号添加协议。


图4-11


    步骤三:点击完加号后下方就会出现一个IIC的协议,点击左侧的设置按钮(齿轮)进入解码设置的窗口。



图4-12


    步骤四:首先设置显示的内容,我们可以根据自己的需求设置,然后最重要的是需要将采集IIC的通道与SCL和SDA相对应,从机地址可以显示为包不包含读写位,ZH解码区域可以设置为开始到结束,这样采集到的所有数据都会被解码,如果想要解码特定的区域可以添加两条光标,解码区域设置为这两条光标之间。



图4-13

 

步骤五:结果分析


图4-14


    如图4-14所示我们设置了解码区间为光标1和光标2之间的区域。这一段IIC时序表达的意思就是从地址为1010000的设备之中的0X15的内部地址当中读取数据,读出的数据位0X54。


 

5.进阶分析

5.1.采集技巧

循环采集:当你遇到需要观察一个特定的信号时采用单次可能会不方便操作。比如不同按键代表不同的信息,我们可以设置循环采集抓取按键的信息。


图5-1


    触发定位:如果我们想观察一段完整的波形,可以将触发位置尽量调到最前(1%)或ZH(90%)。这样就能观察到触发前和触发后的波形,如图5-3所示。

图5-2

 

 

图5-3


5.2.高级触发

DSView中可以使用高级触发来分析传输的内容。

步骤一:首先需要在触发设置里面选择高级触发选项。



图5-4


    步骤二:设置触发位置, 触发位置可以根据自己的需要设置在任意位置。触发的位置决定了你要抓取的信号位于你抓取的全部信号的百分比位置。设置时只需要填入数值或者用鼠标拖动位置条。


图5-5


    步骤三:选择串行触发,IIC是一种串行的通信方式,所以我们选择的是串行触发,上面的总触发等级只在多级触发的时候使用。


图5-6


    步骤四:设置开始停止条件、时钟设置。

首先需要将通道与你测试的IIC线对应,例如通道0对应的是SCL,通道1对应的是SDA。IIC的开始条件为当SCL为高电平时SDA产生一个下降沿,停止条件为当SCL为高电平时SDA产生一个低电平,所以开始条件和停止条件设置为图5-7左侧所示。时钟设置用来定义时钟采样的时刻,一般情况我们可以设置为上升沿采样。


图5-7


步骤五:设置数据通道、数据位宽、数据值

    数据通道指的是SDA连接的是哪个通道,这里我们连接的是1通道。由于IIC协议中每传送1字节数据就需要一个应答位,所以数据位宽设置为9。例如我设置在出现0X57这个数据时触发,设置的数据值应该为010101110,ZH一位为应答位。

当然如果我们不需要抓取特定的数据时,数据值、数据位宽、数据通道三项可以不用设置。


 图5-8

         步骤六:查看数据

    逻辑分析仪抓取的结果会显示在主界面上面,触发的位置就是我们想要获得的数据的位置。

    我们还可以通过列表查询的方式来来抓取的这一串数据中的位置。如图5-10所示,输入要查询的数据再点击该数据就能在主界面中快速定位该数据。

 

图5-9


图5-10

5.3.Stack高阶协议解析

稍微复杂一点的协议都会采用分层的结构,例如使用IIC对EEPROM的读写操作,其协议是基于传统的IIC,但是在这其中还包含了更多的含义。

我们以对EEPROM操作展示Stack高阶协议解析过程

操作步骤:

(1)选择“1:IIC”。IIC协议添加“1:IIC”不能添加“0:IIC”,“0:IIC”不能显示多层协议。


图5-11


(2)点击“多层协议”


图5-12


(3)添加对应的EEPROM协议


图5-13


 

(4)  得到结果

从结果可以看出,这5层的解码将IIC协议通讯的从每一位到整体的意义描述的很详细。


图5-14

 



2020-12-11 15:57:13 736 0
ATP协议是什么
ATP协议是什么
2018-04-27 06:05:38 457 1
modbus rtu协议
仪表的modbus rtu 协议的保持寄存器地址是从40001,但是OPC软件上的modbus rtu 协议却是400001开始,我不知道怎么获取仪表上的数据,我软件上我要怎么跟仪表地址对起来。
2011-12-24 07:10:01 519 4
PROFIBUS现场总线协议结构中包含哪几部分协议?
 
2012-11-11 16:49:13 379 1
modbus通讯是用rtu协议还是ascii协议
 
2015-04-27 16:51:02 400 2
MODBUS下RTU协议ASCII协议之间的转换
这里有一块MODBUS卡只支持RTU协议,但是我这还有一个软件只支持ASCII协议,SO...... 需要一个转换工具,或者说是转换程序,让软件能够正常工作。万分感谢。
2014-12-17 18:15:18 470 1
ModBus RTU通讯协议与ModBus通讯协议有什么区别
 
2017-12-15 04:24:24 384 1
ModBus RTU通讯协议与ModBus通讯协议有什么区别
 
2018-11-29 12:35:26 280 0
ModBus RTU通讯协议与ModBus通讯协议有什么区别
 
2012-03-21 05:57:00 445 5
无线通讯协议测试系统
一、系统设计要求:能测试MASK体制的2通道接收/发送机;能测试MFSK体制的2通道接收/发送机;能测试MPSK体制的2通道接收/发送机;二、模块设计要求:设计一块2通道QPSK解调模块卡。参见... 一、系统设计要求: 能测试MASK体制的2通道接收/发送机; 能测试MFSK体制的2通道接收/发送机; 能测试MPSK体制的2通道接收/发送机; 二、模块设计要求: 设计一块2通道QPSK解调模块卡。 参见:何光亚,基于PXI总线的QPSK解调模块设计[硕士学位论文],电子科技大学,2004 怎么做啊,点思路都没有 展开
2014-10-08 05:27:58 290 1
can总线通讯协议
老师让做的作业是基于单片机的can总线的具体的通信协议是什么呢能举个实例么希望能举个具体的例子... 老师让做的作业 是基于单片机的can总线的 具体的通信协议是什么呢 能举个实例么 希望能举个具体的例子 展开
2006-04-22 02:04:55 401 3
RS-232的协议标准
 
2018-11-22 17:32:18 392 0
通讯接口和协议
我在工作中经常接触MODBUS协议或者RS485接口之类的东西我一直不明白有些资料会提RS485协议那它到底是接口还是协议啊接口和协议到底有什么区别和联系啊希望能从自动控制的角度给个解释... 我在工作中经常接触MODBUS 协议 或者RS485 接口之类的东西 我一直不明白 有些资料会提RS485协议 那它到底是接口还是协议啊 接口和协议到底有什么区别和联系啊 希望能从自动控制的角度给个解释. 有一种说法是协议是软的方面,接口主要指物理层面。 我想知道更深刻一点的呵呵 展开
2008-02-24 12:10:23 387 3
协议的通讯过程
 
2014-09-14 19:53:12 323 2
RS232通讯协议是什么?
 
2017-10-02 13:41:44 257 2

11月突出贡献榜

推荐主页

最新话题