调试嵌入式系统设计中的低速串行总线
今天,嵌入式系统几乎遍布在人类社会的每个角落。嵌入式系统可以简单定义为属于大型系统或机器一部分的一种专用计算机系统,其目的是为该系统或机器提供监测和控制服务。典型的嵌入式系统在开机时会开始运行某些专用应用,直到关闭时才会停止。当前设计和生产的几乎每个电子设备都是嵌入式系统。嵌入式系统实例包括:
-电子闹表
-自动柜员机
-移动电话
-计算机打印机
-防抱死刹车控制器
-微波炉
-导弹使用的惯性引导系统
-DVD播放机
-个人数字助理(PDA)
-工业自动化和监测使用的可编程逻辑控制器(PLC)
-便携式音乐播放机
-可能还包括烤面包机…
嵌入式系统可能包含许多不同类型的设备,包括微处理器、微控制器、DSP、RAM、EPROM、FPGA、模数转换器、数模转换器和I/O。这些设备在传统上一直使用宽并行总线相互通信及与外部世界通信。然而今天,嵌入式系统设计中使用的越来越多的构件将用串行总线代替宽并行总线,原因如下:
● 减少了要布线的信号数量,降低了要求的电路板空间
● 降低了成本
● 降低了功率要求
● 减少了封装上的针脚数量
● 嵌入式时钟
● 差分信令,改善抗噪声能力
● 采用标准串行接口的器件大量供应
尽管串行总线提供了大量的优势,但它们也给嵌入式系统设计人员带来了某些重大挑战,因为它以串行方式传送信息,而不是以并行方式传送信息。本应用指南讨论了嵌入式系统设计人员的常用挑战,及怎样使用泰克新推出的DPO4000系列示波器中提供的功能迎接这些挑战。
并行与串行比较
在并行结构中,总线的每个组件都有自己的信号路径。可能有16条地址线、16条数据线、一条时钟线和各种其它控制信号。通过总线发送的地址或数据值会通过所有并行线路同时传送。因此,使用大多数示波器和逻辑分析仪中的状态触发或码型触发功能触发感兴趣的事件相对简便。同时,可以简便地一目了然地了解在示波器或逻辑分析仪显示屏上捕获的数据。例如,在图1中,我们使用逻辑分析仪从微控制器中采集时钟线、地址线、数据线和控制线。通过使用状态触发,我们隔离了我们查找的总线。为“解码”总线上发生的情况,我们需要查看每条地址线、数据线和控制线的逻辑状态。
在串行总线中,所有这些信息都必须以串行方式在相同的少数导线(有时是一条)上发送。这意味着一个信号可能包括地址信息、控制信息、数据信息和时钟信息。例如,看一下图2中所示的控制器区域网(CAN)串行信号。
这条消息包含帧头、标识符(地址)、数据长度代码、数据、CRC和帧尾及少量其它控制位。时钟嵌入在数据中,使用填充位保证接收设备拥有数量充足的边沿锁定时钟,这使情况变得进一步复杂化。即使是经过训练的眼睛,也很难迅速了解这一消息的内容。现在想象一下这是一条有问题的消息,一天只发生一次,您需要触发采集这条消息。传统示波器和逻辑分析仪不能有效处理这类信号。
即使是比较简单的串行标准,如I2C,与并行协议相比,观察总线上传输的内容仍要明显困难得多。I2C采用分开的时钟线和数据线,因此至少在本例中,您可以使用时钟作为参考点。但是,您仍需要找到消息开头(数据变低,时钟为高),手动检查和记下每个时钟上升沿上的数据值,然后把各bit位整理成消息结构。在长采集中解码一条消息就会需要几分钟时间,而您不知道这是不是实际要找的消息。如果不是,您需要在下一条消息上重新开始这一麻烦的、容易出错的过程。最好只触发查找的消息内容,但多年来示波器的逻辑分析仪上使用的状态触发和码型触发并不能发挥作用。它们是为了考察多条通道中同时发生的问题设计的。为处理串行总线,其触发引擎深度必需有几千种状态(每个bit位一个状态)。即使存在这种触发功能,但为所有这些bit位逐个状态编程也不是件好玩的事。必须找到一种更好的方式!
DPO4000系列提供了一种更好的方式。下面几节重点介绍了可以怎样在嵌入式系统设计最常用的低速串行标准中采用DPO4000系列。
I2C背景知识
I2C或“I squared C”是指集成电路间总线。它最初是飞利浦公司在二十世纪80年代研制的,为把控制器连接到电视机上的外设芯片提供了一种低成本方式,但之后其已经发展成为嵌入式系统设备之间通信的一项全球标准。它采用简单的两线设计,广泛用于领先芯片制造商生产的各种芯片中,如I/O、模数转换器、数模转换器、温度传感器、微控制器和微处理器,芯片制造商则包括:Analog Devices, Atmel, Infineon, Cyprus, 英特尔, Maxim, 飞利浦, Silicon Laboratories, ST Microelectronics, 德州仪器, Xicor等等。
工作方式
I2C的物理两线接口由双向串行时钟(SCL)和数据(SDA)线组成。I2C支持总线上多个主从设备,但一次只能激活一个主设备。任何I2C设备可以连接到总线上,允许任何主设备与从设备交换信息。每台设备都使用惟一的地址识别,可以作为发射机或接收机操作,具体取决于设备功能。在开始时,I2C只使用7位地址,但随着时间推移,它演变成也支持10位地址。它支持3种位速率:100 kbps (标准模式), 400 kbps (快速模式)和3.4 Mbps (高速模式)。最大设备数量取决于400 pf的最大容量,或大约支持20~30台设备。I2C标准规定了下述格式,如图4所示:
- 开始 -表明设备控制总线,一条消息将开始传送
- 地址-7位或10位数字,表示将要读取或写入的设备地址
- R/W Bit-1位,表明是否将从设备中读取数据或向设备写入数据
- 确认 -1位,来自从设备,确认主设备的操作。通常每个地址和数据字节有一个确认位,但不总是有确认位
- 数据 -从设备中读取或写入设备的字节的整数
- 结束 -表明消息结束,主设备已经释放总线
处理I2C
通过DPO4EMBD串行触发和分析应用模块,DPO4000系列成为处理I2C总线的嵌入式系统设计人员的强大工具。前面板有两个总线按钮(B1和B2),允许用户把到示波器的输入定义为一条总线。I2C总线的设置菜单如图5所示。
通过简单地定义时钟和数据位于哪条通道上及用来确定逻辑1和0的门限,示波器可以理解通过总线传输的协议。有了这些知识,示波器可以触发任何指定的消息级信息,然后把得到的采集数据解码成有意义的、容易理解的结果。边沿触发已经过了好多天了,希望您已经采集到感兴趣的事件,然后逐条消息手动解码消息,找到问题。
例如,考虑一下图6中的嵌入式系统。I2C总线连接到多台设备上,包括CPU、EEPROM、风扇速度控制器、数模转换器和大量的温度传感器。
这部仪器被退回工程部分析故障,该产品持续过热,自动关机。要检查的第一件事是风扇控制器和风扇本身,但似乎一切正常。然后要检查温度传感器是否有问题。风扇速度控制器定期轮询两个温度传感器(位于仪器中不同的区域),调节风扇速度,稳定内部温度。您怀疑其中一个或两个温度传感器读数不正确。为查看传感器与风扇速度控制器之间的交互。我们只需连接到I2C时钟和数据线,在DPO4000上设置总线。我们知道,两个传感器在I2C总线上的地址分别是18和19,因此我们决定设置触发事件,查找地址18上的写入操作(风扇速度控制器轮询传感器的当前温度)。触发的采集结果如图7中的屏幕图所示。
在这种情况下,通道1 (黄色) 连接到SCLK,通道2 (青色)连接到SDA。紫色波形是我们向示波器中输入一些简单的参数定义的I2C总线。显示器的上方部分显示了整个采集。在这种情况下,我们已经捕获了大量的总线空闲时间,中间是我们放大的突发活动。显示屏下方的较大部分是缩放窗口。您可以看出,示波器已经解码了经过总线的每条消息的内容。DPO4000系列上的总线使用表1中的颜色/标记,表明消息中的重要部分。
看一下采集的波形,我们可以看到,示波器触发地址18上的写入操作(如显示屏左下方所示)。事实上,风扇速度控制器试图写入地址18两次,但在这两种情况下,在试图写入温度传感器时它没有收到确认。然后它检查地址19上的温度传感器,收回希望的信息。因此,为什么第一个温度传感器没有对风扇控制器作出响应呢?看一下电路板上的实际部件,我们发现其中一条地址线焊接不当。温度传感器不能在总线上通信,结果导致设备过热。由于DPO4000系列的I2C触发和总线解码功能,我们只需几分钟时钟,就成功地隔离了这个潜在的难检问题。
在图7所示的实例中,我们触发了写入操作,但DPO4000强大的I2C触发还包括许多其它功能。
- 开始 -在SDA变低、SCL为高时触发。
- 重复开始-在没有上一个停止条件下发生开始条件时触发。这通常是主设备发送多条消息、而没有释放总线时发生的情况。
- 结束-SDA为高、SCL为高时触发。
- 丢失确认 -从设备通常配置成在每个地址和数据字节后发送确认。在从设备没有生成确认位的情况下示波器可以触发采集。
- 地址- 触发用户指定的地址或任何预先编程的专用地址,包括全呼、开始字节、HS模式、EEPROM或CBUS。地址可以是7位或10位地址,以二进制或十六进制输入。
- 数据 -触发二进制或十六进制输入的最多12字节的用户指定数据值
- 地址和数据-可以输入地址数据值及读写,捕获确切的感兴趣的事件
这些触发可以隔离您感兴趣的特定总线业务,解码功能则可以即时查看采集中总线上传输的每条消息的内容。
SPI背景知识
串行外设接口总线(SPI)最初是摩托罗拉在20世纪80年代末为其68000系列微控制器研制的。由于该总线简单、流行,许多其它制造商也已经采用这一标准。它现在用于嵌入式系统设计常用的各种器件中。SPI主要用于微控制器和直接外设之间。它通常用于移动电话、PDA和其它移动设备中,在CPU、键盘、显示器和内存芯片之间通信。
工作方式
SPI (串行外设接口)总线是一种主/从结构的4线串行通信总线。4个信号是时钟(SCLK), 主输出/从输入(MOSI), 主输入/从输出(MISO)和从选择(SS)。在两台设备通信时,一台设备称为“主设备”,另一台设备称为“从设备”。主设备驱动串行时钟。它同时收发数据,因此是一种全双工协议。SPI使用SS线路指明与哪台设备传送数据,而不是总线上的每台设备都有一个惟一的地址。这样,总线上的每台惟一的设备都需要从主设备提供自己的SS信号。如果有3台从设备,那么主设备有3条SS引线,每条引线都连接到每台从设备上,如图8所示。
在图8中,每台从设备只与主设备通话。但是,SPI可以串联多台从设备,每台从设备依次进行操作,然后把结果发回主设备,如图9所示。因此您可以看到,SPI实现方案没有“标准”。在某些情况下,在不要求从设备向回到主设备通信时,MISO信号可以完全省略。
在SPI数据传送发生时,8位数据字移出MOSI,不同的8位数据字移入MISO。这可以视为16位循环位移寄存器。在传送发生时,这个16位位移寄存器位移8个位置,从而在主设备和从设备之间交换8位数据。一对寄存器-时钟极性(CPOL)和时钟相位(CPHA)决定着驱动数据的时钟边沿。每个寄存器有两种可能的状态,支持4种可能的组合,所有这些组合互不兼容。因此,主/从设备对必须使用相同的参数值进行通信。如果使用多个固定在不同配置的从设备,那么每次需要与不同的从设备通信时,主设备必须重新进行配置。
处理SPI
DPO4EMBD串行触发和分析应用模块还可以为SPI总线实现类似的功能。我们可以再次使用前面板B1或B2按钮,简单地输入总线基本参数,包括SCLK, SS, MOSI和MISO位于哪条通道上、门限和极性,来定义一条SPI总线 (参见图10)。
例如,考虑一下图11中的嵌入式系统。一条SPI总线连接到一个合成器、一个DAC及某个I/O上。合成器连接到VCO上,VCO为其余系统提供一个2.5 GHz时钟。在启动时,CPU应该对合成器编程。但是不知道哪里出了问题,VCO在产生3 GHz的信号。调试这个问题的第一步是考察CPU和合成器之间的信号,确定存在信号,没有物理连接问题,但我们找不到发生了什么问题。然后,我们决定看一下SPI总线上传送的合成器编程使用的实际信息。为捕获这些信息,我们把示波器设成在合成器Slave Select信号激活时触发采集,并对DUT通电,捕获启动编程命令。采集结果如图12所示。
通道1 (黄色)是SCLK,通道2 (青色)是MOSI,通道3 (洋红色)是SS。为确定我们是否对设备正确编程,我们看一下合成器的产品资料。总线上的前3个消息假设是初始化合成器、加载分路器比率、锁存数据。根据技术数据,前3个传送中最后半个字节(一个16进制字符)应该分别是3, 0和1,但我们看到的是0, 0和0。在消息末尾全是0时,我们认识到,我们在SPI中犯了一个最常见的错误,即在软件中以相反的顺序在每个24位字中对各个位编程。在迅速改变软件配置后,得到下面的采集,VCO正确锁定在2.5 GHz,如图13所示。
在上面的实例中,我们使用简单的SS Active触发。DPO4000系列中完整的SPI触发功能包括下述类型:
- SS Active - 在从设备选择行对从设备变真时触发。
- MOSI -在从主设备到从设备用户指定最多16个字节时触发。
- MISO - 在从设备到主设备用户指定最多16个字节时触发。
- MOSI/MISO - 在主设备到从设备及从设备到主设备用户指定最多16个字节时触发。
这些触发也可以隔离感兴趣的特定总线业务,解码功能则可以立即查看采集中总线传送的每条消息的内容。
CAN背景知识
CAN (控制器区域网)总线是博世公司在二十世纪80年代专门研制的一种分层串行数据通信协议,以在电气噪声环境中作为设备之间的通信总线。1992年,梅塞德兹-奔驰率先在其汽车系统中采用CAN。今天,几乎每个汽车制造商都在使用CAN控制器和网络,控制雨刷器马达控制器、雨水传感器、安全气囊、门锁、传动系统和电动车窗等等。由于能够容忍电气噪声、减少连线、校验错误及高速传送速率,CAN正迅速扩展到其它应用中,如工业控制、舰队、医疗、航空等领域。
工作方式
CAN总线是一种平衡的(差分) 2线接口,在屏蔽双绞线(STP)、非屏蔽双绞线(UTP)或带状电缆上运行。每个节点使用公头9针连接器。非归零(NRZ)位编码与位填充一起使用,保证紧凑的消息及最小的转换数量和高抗噪声能力。CAN总线接口采用异步传输方案,在总线空闲时每个节点可以开始传送信息。消息广播到网络上的所有节点。在多个节点同时发起消息时,位仲裁用来确定哪条消息的优先权较高。消息可以是4种类型中的一种:数据帧、远程传输请求(RTR)帧、错帧或过载帧。总线上检测到错误的任何节点会传输一个错帧,导致总线上所有节点能够看到当前消息不完整,传输节点会重新发送消息。接收设备发起过载帧,表明还没有准备好接收数据。数据帧用来传输数据,远程帧由用来请求数据。数据帧和远程帧由每个帧开头和结束的开始位和停止位控制,包括下述字段:仲裁字段、控制字段、数据字段、CRC字段和ACK字段,如图14所示。
● SOF-帧以帧头(SOF)位开始
● 仲裁-仲裁字段包括标识符(地址)和远程传输请求(RTR)位,用来区分数据帧和数据请求帧,其也称为远程帧。标识符可以采取标准格式(11位-2.0A版)或扩展格式(29位-2.0B版)。
● 控制-控制字段由6个位组成,包括标识符扩展(IDE)位,它区分CAN 2.0A (11位标识符)标准帧和CAN 2.0B (29位标识符)扩展帧。控制字段还包括数据长度代码(DLC)。DLC长4位,表明数据帧中数据字段的字节数或远程帧请求的字节数。
● 数据-数据字段由0~8个数据字节组成。
● CRC-15位循环冗余校验代码和隐性分隔符位。
● ACK-确认字段长两位。第一个位是时隙位,作为隐性位传输,但之后被成功地收到传输消息的任何节点传送的显性位覆盖。第二个位是是隐性分隔符位。
● EOF-7个隐性位,表明帧尾(EOF)。
3个隐性位的间断(INT)字段表明总线空闲。总线空闲时间可以是任意长度,包括零。
它定义了大量的不同数据速率,最高数据速率为1Mb/s,最低数据速率为5kb/s。所有模块必须支持至少20kb/s的速率。电缆长度取决于使用的数据速率。正常情况下,系统中所有设备都以统一的固定位速率传送信息。最大线路长度在低速时可以达到几千米;典型情况是1Mbps时40米。在电缆每端使用端接电阻器。
处理CAN
DPO4AUTO串行触发和分析应用模块可以对CAN总线实现类似的触发和分析功能。我们可以再次使用前面板B1或B2按钮,简单地输入总线的基本参数,包括探测的CAN信号类型及位于哪条通道上、位速率、门限和样点(位时间的%),来定义CAN总线,参见图15。
想象一下您需要进行相关定时测量,确定从司机在司机车门仪表板上按下摇车窗开关开始到车窗实际开始移动之间的时延。通过指定司机车门中CAN模块的ID及与“下摇车窗”命令有关的数据,您可以触发采集正在查找的数据帧。通过同时探测司机车门的下摇车窗开关及车门中的马达驱动,可以非常简便地完成这一定时测量,如图16所示。
图中的白三角形是我们放在波形上作为参考点的标记。通过简单地按示波器前面板上Set/Clear Mark (设置/清除标记)按钮,可以在屏幕中增加或从屏幕中删除标记。按前面板上的Previous和Next按钮,缩放窗口从一个标记跳到另一个标记,从而可以简便地在采集中感兴趣的事件之间导航。
现在想象一下,如果没有这些功能会怎样执行这一任务。
如果没有CAN触发功能,您将不得不触发开关本身,捕获时间窗口足够长的活动,然后在CAN总线上逐帧手动解码,直到最终找到适当的帧。以前需要几十分钟或几个小时完成的工作,现在只需要一会儿就可以完成。
DPO4000强大的CAN触发功能包括下述类型:
- 帧头–触发SOF字段。
- 帧类型–选项包括数据帧, 远程帧, 错帧和过载帧
- 标识符–使用读/写判定触发特定的11位或29位标识符
- 数据–触发1~8字节用户指定的数据
- Missing Ack–在接收设备没有提供确认时触发
- 帧尾–触发EOF字段
这些触发类型可以轻松隔离CAN总线上查找的几乎任何项目。但触发只是开始。调试通常要求检查触发前和触发后的消息内容。可以通过DPO4000系列的事件表简单地查看一次采集中的多个消息的内容,如图17所示。
事件表以带时戳的表格形式显示了采集中每条消息解码的消息内容。它不仅可以简便地查看总线上的所有业务,还可以简便地在消息之间进行定时测量。事件表还可以用于I2C和SPI总线。
触发与搜索
正如我们在本应用指南中讨论的那样,必须拥有强大的触发系统,隔离串行总线上感兴趣的事件。但是,一旦已经采集了数据 (示波器被停止),而且想分析数据,那么触发就没有什么用了。如果示波器具有类似触发的资源、分析停止的波形数据不是更好吗?DPO4000系列的Wave Inspector为您提供了强大的搜索功能。本文中讨论的所有总线触发功能还作为已采集数据的搜索标准使用。例如,在图18中,示波器已经在长采集记录中搜索了具有特定地址和数据内容的每条CAN消息,并在显示屏顶部在每条消息上标明空心的白三角形。为在发生的消息之间导航,用户只需按前面板上的Previous和Next按钮即可。
当然,搜索也可以用于比较传统的触发类型。搜索类型包括边沿、脉宽、欠幅脉冲、建立时间和保持时间、逻辑和上升时间/下降时间。
结语
尽管嵌入式系统设计从并行总线转向串行总线带来了许多好处,但它也给设计工程师带来了许多挑战。通过传统测试测量工具,触发查找的事件要困难得多,这些工具仅仅查看模拟信号,几乎不可能告诉用户其提供了哪些信息,而且手动解码长时间的总线活动、诊断问题是非常耗时、非常容易出错的过程。DPO4000系列改变了这一切。由于其强大的触发、解码和搜索功能,当前的设计工程师可以以极高的效率解决嵌入式系统设计问题。