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