� paper@ mesnet . com . cn(投稿专用) � 2006年第 9 期 M icrocontrollers & Embedded Syst ems � 37���
实时监控系统中的时分复用 CAN协议
� 华中科技大学 � � 钟波� 卢益民 � 罗姝
� 摘 � 要
分析 CAN总线的特点及其在实时数据传输过程中存在的问
和出现问题的原因。基于 CAN 的底层协
议,设计一种时分原理的 CAN应用层协议,对周期性和非周期性实时数据,设计两种不同的传输模式。
解决了 CAN的多主式模式中节点随机发送数据时因信息帧碰撞而产生的信息阻塞问题,并在实际项目
中实现了这种通信模式,有利于实时数据的传输。
� 关键词 实时监控系统 � CAN 协议 � 时分复用 � 时间同步 � 时间主节点
引 � 言
CAN( Cont roller A rea Netw ork)即控制器局域网络,
在现有的现场总线中, CAN 总线具有通信速率高、可靠性
高、连接组网方便以及性价比高等诸多优点。自 20 世纪
90年代以来 , CAN 总线的应用领域不断扩大 ,并取得了
一定的应用成果[ 1 2]。不过,仅有物理层和数据链路层的
CAN2. 0B协议在面对一些总线负载较重, 实时性要求高
的复杂环境时, 却存在一些不足。CAN 总线使用的是
CSMA/ CA 媒体访问技术,采用其独特的 位仲裁!技术解
决 数据碰撞问题! ,在总线载荷较轻的情况下, 能够保证
数据传输的确定性和实时性,为解决数据碰撞带来的系统
开销也非常小;但是,在总线利用率较高的情况下,由于采
用固定优先级仲裁机制,系统中的节点就不能平等地共享
总线带宽,使低优先级信息帧传送的实时性和可靠性存在
问题;当总线载荷达到饱和或过载时,低优先级数据不能
实时发送,其发送节点甚至可能因多次发送失败而退出总
线。由于 CAN 总线的非抢占性,即使具有最高优先级的信
息帧也要等到当前帧结束才能发送,即有一个随机时延,优
先级越低,这个随机时延的上限就越长,给数据的传送带来
不确定性。为解决这些问题,提出了以 CAN总线消息时间
触发机制为基础的时间触发协议 TTCAN[ 3]。但是,
TTCAN 也存在着灵活性差, 不支持节点的临时加入、退
出,只考虑了周期性数据,不适合处理大量事件触发的数
据这些缺点。本文是笔者在 CAN 总线的实际应用中, 以
对 TTCAN 协议的研究为基础,提出一种在实时监控系统
中切实可行的动态时分复用 CAN 总线应用层协议,并在
由 T I公司的 TMS320LF2407A 芯片组成的实时监控系统
上实现这一协议。该协议使得 CAN 总线具有很好的实
时性和灵活性,有很高的实用价值。
1 � CAN总线基本情况
CAN2. 0B协议包括物理层和数据链路层。其中数据
链路层包括媒体访问控制 ( MAC)子层和逻辑链路控制
( LLC)子层,数据链路层集中了 CAN 总线的主要技术特
点。CAN 总线中的数据发送主要是通过标准数据帧和扩
展数据帧,两者的区别只是在标识域( 即 ID) 的长度一个
为 11位,一个为 29位。图 1 为 CAN 的扩展数据帧结构。
29位标识域和远程发送请求位( RTR)组成仲裁域, MAC
些优化方法同样适用于C5000系列其他型号的 DSP,优化
的思想也适用于 G. 729A 声码器在其他平台上的实现。
� � 编者注: 本文为期刊缩略版,全文见本刊网站 ww w.
mesnet . com. cn。
参考文献
[ 1] ITU T G. 729, Coding of Speech at 8kbit/ s Using CS ACELP.
Mar , 1996.
[ 2] TMS320VC5410 Fixed�Point Dig ital Signal Processor Data
Manual SPRS075E Copyr ight ( c) TI. 2000 12.
[ 3] Texas Instrument. TMS320C54x DSP Reference Set. Volume
2: Mnemonic Instruction Set. 1998.
[ 4] 李天新. SCDMA 系统 G. 729声码器的实现与保护: [硕士论
文] . 成都:西南交通大学, 2003.
(收修改稿日期: 2006�05�16)
38��� 2006年第 9期 adv@ mesnet. com. cn(广告专用) �
图 1 � CAN2. 0B协议扩展型数据帧结构
层以此作为解决 数据碰撞问题!的依据。 数据碰撞问
题!是指总线上有 2 个或 2 个以上节点同时发送数据, 导
致信息帧的碰撞。在仲裁阶段, CAN 总线上每个发送数
据的节点,在发送信息的同时,监听总线的状态,将自己发
送的位和总线的状态相比较。如发送一个隐性位( 1! )而
在总线上监测到显性位( 0!) , 则说明这时在总线上有优
先级更高的信息帧在同时发送,并确定本节点已失去仲
裁,即终止发送,等总线空闲时,再试图重发。在发送完所
有仲裁域的数据后, CAN 的仲裁机制保证了碰撞时除了
赢得竞争的那个节点外, 其他节点都停止发送[4]。CAN
总线通过这种方式实现了确定的无损位仲裁。
在 LLC子层中进行数据过滤, 总线上的每个节点根
据总线上正在传输的数据帧的标识域( ID)决定是否接受
该信息帧。也就是说,每个数据帧中的标识域( ID)是该帧
的特有标志及优先级标志,而非目标节点的地址。
可以证明, CAN 总线中一个数据帧的传送时间,与数
据帧的优先级和网络的带宽利用率有关。优先级越高,带
宽利用率越低,这个时间就越小。也就是说 CAN 协议不
能提供给不同的设备以同等的传输带宽分配[ 4]。这就造
成了一个实时系统中的 CAN 总线在其数据流量达到饱
和时,由于数据碰撞,优先级低的数据帧因为 CAN 的位
仲裁协议实时性受到影响,整个实时系统的实时性也无法
得到保证。
一个实时系统中, CAN 总线上的数据帧大致可分为
3类: 第 1类是包含要求周期性传送的实时性数据的数据
帧;第 2类是包含要求非周期性传送的实时性数据的数据
帧;第 3类是包含非实时性数据的数据帧。时间触发机制
主要是面向第一类数据帧,将时间域分成大量的离散时间
间隔(称为 时间片!或 时间窗口!) ,通过同步机制将消息
的传输分配在一定的时间窗口内完成。它的实现以 CAN
总线上所有节点的同步为基础,而这一同步通过同步信息
来实现。所谓同步消息是指时间意义上的主节点(即时间
主节点)发出的,可以被总线上所有节点(包括时间主节点
自身)识别的, 具有重发功能的周期性数据帧, 也就是参
考帧。
2 � 系统时分结构
系统中所有周期发送数据的节点至少发送 1 次周期
性数据帧的时间定义为 系统周期!,而每个系统周期包含
n个基本周期。每个基本周期由 1个参考帧、8 个基本时
间窗口和 1 个自由时间窗口组成。而 CAN 数据帧就在
给定的时窗中发送,其中基本时间窗口用于发送周期性数
据帧,自由时间窗口用于发送非周期性的实时及非实时数
据。时分结构的形式如图 2所示。
图 2 � 时分结构
每个参考帧和基本时间窗口的长度均为一个数据帧
的传输时间再加上一定的冗余,作为时钟误差的补偿, 使
得相邻的两时窗在时域内是完全正交的,以保证相邻时
窗内的信息帧不会相互干扰。本系统中的时钟误差主要
是由于各个节点的 TMS320LF2407A 芯片需要进行大量
的信号采集和处理。这些工作都是在中断中完成的, 而
且其中断的级别高于 CAN收发,则有可能因为中断冲突
造成收发延时。此外, 芯片进行中断处理也需要一定
时间。
3 � 系统时间同步
时分复用技术的关键在于所有的时间片(时窗)在时
域内应是完全正交的。由于每个节点本地时间总具有一
定的漂移(如晶振带来的漂移) ,因此必须首先保证系统中
所有节点的时间同步。这里所指的时间同步是指总线上
的相对时间同步,即指定 CAN 总线上的一个节点作为时
间主节点,主节点周期性地在每个基本周期内发送参考帧
(参考帧同时也具有分配所在基本周期的专有时窗的功
能) ,网络中其余节点接收到参考帧后启动本地时钟。
本系统中,在每个基本周期,由时间主节点在总线上
广播一个参考帧,包括时间主节点自身在内的每个节点都
应收到此帧,作为同步时间基准,以校正总线上每个节点
的本地时钟与系统时钟同步。总线上包括时间主节点在
内的所有节点接收到总线上的参考帧后,在相应进行的中
� paper@ mesnet . com . cn(投稿专用) � 2006年第 9 期 M icrocontrollers & Embedded Syst ems � 39���
断处理中,启动计时器 T0和 T1。其中, T 1 的周期长度为
基本周期, T 0 的周期长度为基本时间窗口的时间。在每
个节点上应有一个计数器 T imer,在收到参考帧后清 0,每
次在计时器 T0引起的中断中执行 T imer + + , 并再次启
动计时器 T0。当 T imer 的值为 8时, 即执行 8 次基本周
期后,不再启动 T0,直到下一次收到参考帧。这个时间段
就是自由时间窗口。
4 � 系统组成及参数设置
本系统中, 节点由一块集成有 CAN 2. 0B模块的 T I
图 3 � 节点结构
公 司 的 DSP 芯 片
TMS320LF2407A 和驱
动器 PCA82C250 组成,
如图 3所示。
� � TMS320LF2407A
的时钟频率为 40 MHz,时钟周期为 0. 025 �s, CAN 总线
波特率为1 Mb/ s。总线上采用标注数据帧,每帧均传送 8
字节数据,填充位按照最大的 23 位计算, 每数据帧均为
131 位,在总线上的传输时间为 131 �s。芯片每次采样中
断的时间为 0. 375 �s。考虑内部处理时间和采样中断的
时间,基本时间窗口的值约定为 140 �s。另外, 考虑系统
中的数据是以周期发送的数据为主,因而将自由时间窗口
定为两个基本时间窗口的长度,即将自由时间窗口周期定
为 280 �s。每个基本周期包含 8个基本时间窗口,长度为
1 540 �s。
本系统中数据帧的 ID 为 11位,其中前 7位用于表示
数据 帧 的 优 先 级, 后 4 位 表 示 数 据 帧 的 类 型。
TMS320LF2407A 中共有 3 个可接收数据的邮箱。其中
邮箱 0专门用于接收参考帧和节点加入、退出总线时发出
的申 报 数 据 帧 ( 具 体 见 5. 1 节 ) , 参 考 帧 ID 为
00000000001,申报数据帧 ID为 00000000000,为优先级中
最高的两个,要确保这两种重要数据帧的正常发送。邮箱
1和 2则接收其他数据帧,屏蔽前 7位,按照后 4 位接收数
据帧。
5 � 系统调度策略
5. 1 � 周期性数据调度策略
周期性数据的调度分为静态调度和动态实时调度,它
们各有优缺点。静态调度是按照系统要求离线生成调度
表,其优点是系统资源占用少,缺点是灵活性小;动态信息
调度是动态产生信息调度表, 可实时跟踪系统要求的改
变,但对系统的资源占用大。TTCAN 最大的缺点就是灵
活性差,不支持节点的临时加入、退出,根本上就是因为时
间主节点中周期性数据的调度是静态调度。综合以上情
况,结合两种方式的优点,系统中的周期调度表采取静态
生成、动态修改的方式。在编程时生成基本调度表;在运
行过程中,如果发生节点的加入、退出,则由节点自动修改
基本调度表。
每一个 基本 周期 开始时, 作 为时 间主 节点 的
TMS320LF2407A 读取内部的调度表,获取本基本周期内
要发送周期数据的节点号及顺序;参考帧中的 8个字节数
据按顺序分别对应一个基本时间窗口,在每个字节的前 4
位中标明这个基本时间窗口中可以发送周期数据帧的节
点编号,后 4位预留出来作为对于节点的控制命令。周期
上的各个节点(包括时间主节点)在收到参考帧后,检查收
到的 8个字节的数据。如在某个字节中发现自身编号,则
在相应基本时间窗口发送周期数据帧。
如有临时加入的节点,则这个节点等待参考帧。在第
一次收到参考帧后,节点首先与系统同步,并在自由时间
窗口以 ID0x00 发送一个请求加入系统的申报数据帧, 描
述自己的周期性数据的发送情况及接收数据类型,也就是
向主节点请求基本时间窗口。主节点在收到这个数据帧
后,将这些周期性数据的发送加入调度表,则此节点加入
系统。考虑到时间主节点中的调度表出错的可能,一个节
点在一个系统周期内如果都未获得基本时间窗口,则此节
点也应发送一个请求加入系统的申报数据帧。
如有节点退出,则这个节点在最近的一个在自由时间
窗口以 ID为 00000000000 发送一个请求,退出系统的申
报数据帧,节点描述自己周期性数据的发送情况。主节点
在收到这个数据帧后,将这些周期性数据的发送从调度表
中去掉,则此节点退出系统。
除时间主节点外,其他总线上的节点邮箱 0也同样会
收到 ID 为 00000000000的两种申报数据帧。这些节点也
会按照这些数据更新自己内部的调度表。而新加入总线
的节点,按照主节点在每个基本周期内发送的参考帧, 在
自己内部逐步建立这个系统的调度表。
5. 2� 非周期性的实时和非实时数据调度策略
在自由时间窗口中,各节点发送非周期性的实时及非
实时数据。将非周期性实时数据和非实时性数据在优先
级上分成对应的两类,实时性信息为高优先级类,而非实
时信息为低优先级类。这样,可保证实时数据传送的实时
性。同时,为了使各个节点能平等地获得自由时间窗口中
的带宽,采用动态优先级机制。具体地说, 将所有实时性
数据帧的 ID首位定为 0(这其中包括参考帧和申报数据
帧) ,所有非实时性数据帧的 ID首位定为 1。在每个节点
中,初始设定其非周期性实时数据的 ID 前 7 位为
0001000,非实时性数据的 ID前 7位为 1001000,均处于自
身优先级范围内的中间。如果本次发送成功, 则将 11 位
40��� 2006年第 9期 adv@ mesnet. com. cn(广告专用) �
ID加上 16,即在前 7 位中加上 1,将优先级降低 1 级; 反
之,如果本次发送失败,则将 11位 ID 减去 16,即在前 7 位
中减去 1,将优先级提高1 级。实时性数据的 ID前 7 位的
范围为 0000000~ 0111111;非实时性数据的 ID 前 7位的
范围为 1000000~ 1111111。ID前 7 位用变量 IDH 记录。
通过这种动态优先级机制,确保各个节点的非周期数
据能平等地占用带宽,避免了某些节点的数据始终无法发
送的情况。特别是对于实时性数据,这是很重要的。
5. 3 � 系统调度补充说明
由于本协议设计时在参考帧的 8 个字节数据中均保
留了后 4位作为对节点的控制命令,因此, 只要通过对时
间主节点内部程序的修改,就可以变为轮询的数据交换方
式,也就是时间主节点通过参考帧中一个数据的后 4位来
要求对应的节点上传特定数据,使系统非常灵活。而轮询
的数据交换方式对于一些通过计算机进行整体监控的系
统是适用的。
在本系统中,时间主节点只是在同步控制这个层面上
定义的,与其他节点不同的只是,它是总线上惟一承担发
送参考帧任务的节点,在软件内容、硬件结构上与其他节
点没有任何不同。也就是说,可以在总线上定制任何节点
担任时间主节点。本系统在时间主节点因为故障或其他
原因退出系统时,由一个节点随机地通过总线竞争成为时
间主节点,防止总线通信崩溃。首先在普通节点中启动
T1,如在 T1时间到而仍未收到参考帧,则认为时间主节
点故障,普通节点发送一个内部数据为全 0 的特殊参考
帧,申请担任主节点。如发送成功,则将自己定为主节点;
如发送失败,则继续等待参考帧。
在一个系统周期中,所要发送的周期数据帧并不一定
是 8的倍数。也就是说,在最后一个基本周期里, 基本时
间窗口数不一定是 8。对这一情况,本系统采取的是将空
闲的基本时间窗口均与这个基本周期中的自由时间窗口
合并为一个大的自由时间窗口,并通过参考帧告知所有
节点。
6 � 系统性能分析
本系统中的数据发送是由基本时间窗口中发送的准
动态调度的时分 CAN(主从式)和自由时间窗口中发送数
据的动态优先级 CAN(仍然多主式)组成的。主要应用在
具有实时性要求的网络控制系统中,可以保证系统中周期
性和突发性数据传送的实时性要求。
∀ 解决了在网络利用率高时,传统 CAN 的带宽分配
问题,实现了数据的实时传送。对于周期性数据,其时延
精度达到一个基本时间窗口的宽度,对于突发性数据的传
送,时延在一个基本周期的范围内。
# 利用参考帧传送调度信息,网络系统简单,给网络
的调度也带来极大的灵活性,信息调度精度精确到一个基
本时间窗口的宽度, 并且可以很容易地改为轮询的调度
方式。
∃ 每个基本周期只安排一个自由时间窗口, 其长度
由 T1 确定, 修改十分方便。利用动态优先级 CAN 来实
现同类信息帧对网络带宽的平等共享,防止由于固定优先
级带来的信息阻塞。
参考文献
[ 1] 张培仁,等. 自动控制技术和应用. 合肥: 中国科学技术大学
出版社, 2001.
[ 2] 邬宽明. CAN 总线原理和应用系统设计. 北京:北京航空航
天大学出版社, 1996.
[ 3] Leen G, Heffernan D. TT CAN: a new t imer�tr iggered con�
tro ller area net work. Microprocesso rs and Microsystems,
2002, 26( 2) : 77 94.
[ 4] 史久根,等. CAN 总线在实时系统中应用的研究. 中国科学
技术大学学报, 2005.
[ 5] 刘和平,等. TMS320LF240X DSP C语言开发应用. 北京: 北
京航空航天大学出版社, 2003.
(收稿日期: 2006�05�24)
关于本刊网络版与网络补充版
本刊遵循来稿字数不限,以内容精彩为录用准则; 但由于来稿数量多,质量亦佳,为保证本刊每期都有足够多的稿件与读者见面,
采取了网络补充版及网络版的形式:
1. 网络补充版。对于来稿篇幅较大, 有源程序、算法、实例等内容的文章,将源程序、实例等作为附属部分, 从文章中裁剪下来放
在本刊网站发表, 而主体部分在期刊上发表。
2. 网络版。对于内容丰富、有参考价值,但篇幅过大,不易划分出附属部分(如源程序、实例等)的文章, 作为网络版文章(不限字
数)发表在本刊网站上; 同时要求作者提供一个网络版文章的压缩版本, 即将网络版文章压缩为 6 00
以内的文章, 在期刊上发表。
本刊提倡语言精练、重点突出。在此前提下,希望作者投稿时,将篇幅过大的文章作成网络补充版或网络版, 以缩短编审时间, 使
您的稿件尽快与读者见面。
本刊编辑部