调试嵌入式系统设计中的低速串行总线
造商都在使用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位标识符)标准帧和CAN 2.0B (29位标识符)扩展帧。控制字段还包括数据长度代码(DLC)。DLC长4位,表明数据帧中数据字段的字节数或远程帧请求的字节数。
– 数据 – 数据字段由0-8个数据字节组成。
– CRC – 15位循环冗余校验代码和隐性分隔符位。
– ACK – 确认字段长两位。第一个位是时隙位,作为隐性位传输,但之后被成功地收到传输消息的任何节点传送的显性位覆盖。第二个位是是隐性分隔符位。
– EOF – 七个隐性位,表明帧尾(EOF)。
三个隐性位的间断(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所示。
事件表以带时戳的表格形式显示了采集中每条消息解码的消息内容。它不仅可以简便地查看总
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)
- VxWorks几种常用的延时方法介绍(05-16)