CAN总线系统设计中的几个问题北京航空航天大学管理学院(100083) 邬宽明摘 要:论述了CAN总线系统设计中系统时钟和位时间的选定、CAN中断服务程序编制以及较长报文拼接等问题。
关键词:CAN总线设计 系统时钟 位时间 中断服务 报文拼接 CAN总线是德国Bo sch公司在80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信总线,它是一种多主总线系统,通信介质可以是双绞线、同轴电缆或光导纤维。
通信速率可达1M bp s。
CAN总线通信控制器中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括零位的插入 删除、数据块编码、循环冗余检验、优先级判别等项工作。
CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。
采用这种方法的优点是可使网络内的节点个数在理论上不受限制,数据块的标识码可由11位(按CAN技术规范210A)或29位(按CAN 技术规范210B)二进制数组成,因此可以定义211或229个不同的数据块。
这种按数据块编码的方式,还可使不同的节点同时接收到相同的数据,这一点在分布式控制系统中非常有用。
数据段长度最多为8个字节,可满足通常工业领域中控制命令、工作状态及测试数据的一般要求。
同时,8个字节不会占用总线时间过长,从而保证了通信的实时性。
CAN协议采用CRC检验并可提供相应的错误处理功能,保证了数据通信的可靠性。
CAN的这些卓越特性,极高的可靠性和独特的设计,特别适合工业过程监控设备的互连,因此,越来越受到工业界重视,并已被公认为最有前途的现场总线之一。
1993年11月ISO正式颁布了道路交通运载工具—数字信息交换—高速通信控制器局部网(CAN)国际标准(ISO11898)。
为控制器局部网标准化、规范化推广铺平了道路。
可以预料,控制器局部网在我国迅速发展和普及是指日可待的。
本文分别论述CAN总线系统设计中经常遇到的系统时钟和位时间如何选定、CAN中断服务程序如何安排以及较长报文如何拼接等几个问题。
1 系统时钟和位时间的选定在CAN控制器中提供两个总线定时寄存器,其中总线定时寄存器0(BR T0)可决定波特率予分频(BR P)和同步跳转宽度(SJW)的数值,其低六位(D5~D0)用来确定系统时钟,而其高二位(D7,D6)用来确定同步跳转宽度(SJW)。
总线定时寄存器1(BR T1)可决定位周期宽度、采样点位置和在每个采样点进行采样的次数,其D3~D0用于T SEG1,而D6~D4用于T SEG2并按下式计算:t TSEG1=t SCL(8T SEG1.3+4T SEG1.2+2T SEG1.1 +T SEG1.0+1)t TSEG2=t SCL(4T SEG2.2+2T SEG2.1+T SEG2.0+1)图1 每位时间和采样点位置T SEG1和T SEG2可确定每位的时钟周期数目和采样点位置,如图1所示若P8XC592复位请求位被置为高,这两个寄存器均可被访问(读 写)。
系统时钟t SCL可使用下列等式计算:t SCL=2t CL K(32BR P.5+16BR P.4+8BR P.3+4BR P.2 +2BR P.1+BR P.0+1)其中:t CL K为P8XC592振荡器的时钟周期实例:设晶体振荡器频率为16M H Z,BTR0=00H, BTR1=14H,计算系统时钟和位时间由给定BTR0和BR T1值可知:BR P.5,BR P.4,BR P.3,BR P.2,BR P.1和BR P10均为0,另外,除T SEG112和T SEG210为1外,其余系数均为01因此有,t SCL=2t CL K(32×0+16×0+8×0+4×0+2×0 +0+1)=2t CL Kt TSEG1=t SCL(8×0+4×0+2×0+1)=5t SCLt TSEG2=t SCL(4×0+2×0+1×0+1)=2t SCLt b=(1+5+2)t SCL=2×8×t CL K=1M bp s此时同步跳转宽度(SJW)为t SJW=t SCL(2SJW.1+SJW.01+1)=t SCL即1 8(Λs)实例2:设晶体振荡器频率为16M H z,BTR0= 7FH,BTR1=7FH,计算系统时钟和位时间由给定BR T0和BR T1值可知:BR P15,BR P14,BR P13,BR P12,BR P11,和BR P10,均为1,另外,T SEG11X和T SEG21X亦均为81四通电脑应用美国德州工控机6257723062577231 《电子技术应用》1998年第9期11因此有,t SCL =2t CL K (32×1+16×1+8×1+4×1+2×1×1+1)=128t CL Kt TSEG1=t SCL (8×1+4×1+2×1+1×1+1)=16t SCL t TSEG2=t SCL (4×1+2×1+1×1+1)=8t SCL t b =(1+16+8)t SCL =25×128×t CL K =5kbp s此时同步跳转宽度(SJW )为t SJ W =t SCL (2SJW .1+SJW .01+1)=(2×0+1×1+1)t SCL=2×128t CL K 即16(Λs )实例1和实例2所得位速率1M p s 和5kp s 为CAN 总线位速率的最高和最低极限值CAN 总线的位速率与总线长度的关系如图2所示。
图2 CAN 总线们速率与总线长度的关系2 最大允许位时间的确定在实时应用场合,要求系统具有在限定的时间范围内处理和传送信息的能力。
最大位时间受限于最大传输延迟时间,最大传输延迟时间是指从传送初始化至接收到信令,例如从编程发送CAN 命令寄存器位0(发送请求)至高电平直到接收CAN 2器件由于验收报文而中断时刻之间的时间间隔。
最大允许位时间(t b m ax )可计算如下:t b m ax ≤t 最大传输时间(n 位报文+n 位最大延迟)其中:t 最大传输时间为最大允许传输延迟时间n 位报文为报文的位个数,它除要计及传输数据字节n 数据字节的个数(0…8)外,还要考虑填充位情况,因此有,11+8n 数据字节≤n 位报文≤52+10n 数据字节其中 44是考虑了自S 0F 开始至E 0F 结束的帧结构内的各位数52与10是考虑了填充位情况52与10是考虑了填充位情况n 位最大延迟为以位个数表示的最大延迟时间,其取决于CAN 网络的实际状态(例如:另一个报文已在网络上)1为计算机n 位最大延迟,我们假设:(1)在发送前,其它CAN 控制器占用最大为1位时间(2)在报文开始发送前,曾发生过一个错误,因而导致附加传送一帧出错帧(3)所发送报文具有最高优先级则可给出n 位最大延迟≥44+8n 数据字节,最坏情况+18;n 位最大延迟≤52+10n 数据字节,最坏情况+18;其中,n 数据字节,最坏情况是指在给定CAN 网络中,使用的最长报文所包括的数据字节数目。
附加18位是由于在所发送报文之前的错误帧和间歇场的位数。
因此,可计算最大允许位时间(t b m ax )如下:假设 t 最大传输时间=10(m s )n 数据字节,最坏情况=6;t 数据字节=4则 n 位报文≤52+10×4=92n 位最大延迟≤52+10×6+18=130;因此 t b m ax ≤10(m s )(92+130)=45(Λs )3 CAN 中断服务程序编制为实现当外部事件和实时驱动的在片外围设备需要CPU 异步地执行专门的程序代码段进行时对于正常程序执行的异步激活功能,P 8XC 592提供了包括CAN 控制器中断在内的15个中断源,二个优先级的中断系统。
在使用16M H Z 晶体时,中断响应滞后时间为2125~715Λs 。
但在CAN 2DM A 传送期间,中断系统被禁止。
中断服务程序入口分别位于程序存储器中的各个中断向量地址,中断向量指明相应中断服务子程序开始的程序存储器位置。
同时,通过IEN 0或IEN 1寄存器中的相应位,每个源均可被分别开放或禁止。
使用IP 0和IP 1寄存器中相应位,每个中断均可被编程为高优先级和低优先级。
所有开放的源也可全局地被禁止或开放。
CAN 控制器的收发功能均需借助其中断服务执行。
本节通过一个CAN 中断服务程序软件实例(包括高速DM A 传送)说明CAN 中断服务程序的编制方法。
OR G 002BH ;CAN 中断服务程序入口 L JM P CAN I N TCANI N T : PU SH PS W ;保护现场PU SH A CC M OV A ,CAN CON ANL A ,#1FH M OV CAN I N T I M A GE ,A;取中断标志I N T T ES 0:JBC CAN I N T RX ,RX SERV91《电子技术应用》1998年第9期 四通工控 A 2B 软起动器经销商 62626144 62626145;接收中断I N T T ES1:JBC CAN I N T TX,TX SERV;发送中断I N T T ES2:JBC CAN I N T KR,KR SERV;出错中断I N T T ES3:JBC CAN I N T OV,OV SERV;超载中断I N T T ES4:JBC CAN I N T W K,W K SERV;唤醒中断L JM P I N T OU TRX SERV:CL R A;RA R Y O FST为当前相对于访问此阵列的程序计数器数值,RA R Y STR为接收报文的目的地址阵列,若报文已通过接收滤波,但CPU并不需要它,此时,阵列全部数据被置为0,以作为判断依据。
ADD A,#RA R Y STR2RA R Y O FST M OV C A,@A+PCRA R Y O FST:JZ RX R EAD YM OV CAN STA,A ;数据存储器地址M OV CANADR,#96II;启动RX DM ANO PNO PRX R EAD Y:M OV CAN CON,#04H;释放接收缓存器M OV A,CON I N T I M A GEJN Z I N T T ES1L JM P I N T OU T ;退出中断TX SERV:……KR SERV:……OV SERV:……W K SERV:……I N T OU T:PO P A CCPO P PS WR ET I RA R Y STR: DB …… ;接收报文缓存区DB ……END4 报文拼接CAN协议规定,每次收发最多只能传送八个字节,这可以满足大多数工业领域中控制命令、工控状态和测试数据的一般要求,但实际应用中,往往出现传送多于八个字节的要求,此时应通过报文的拆卸和拼接技术予以实现。