本系统软件设计的一个难点在于关于CAN的编程。本系统处理的CAN程序模块有:CAN初始化子程序、CAN中断程序和CAN数据收发子程序。
CAN 是Controller Area Network 的缩写,是国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应"减少线束的数量"、"通过多个LAN,进行大量数据的高速通信"的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
CAN总线的基本特点:
*CAN协议废除了传统的站地址编码,采用数据通信数据块进行编程,可以多主方式工作。
*CAN采用非破坏性仲裁技术,当两个节点同时向网络上传送数据时,优先级低的节点主动停止数据发送,而优先级高的节点可不受影响地继续传输数据,有效避免了总线冲突。
*CAN采用短帧结构,每一帧的 有效字节为8个(CAN技术规范2.0A),数据传输时间短,受干扰的概率低,重新发送的时间短。
*CAN的每帧数据都有CRC效验及其他检错措施,保证了数据传输的高可靠性,适于在高干扰环境中使用。
*适用于现场设备与仪表之间或者与其上位设备间的通信网络,可以统一组态,相互操作,控制功能分散到最底层。
*CAN节点在错误严重的情况下,具有自动关闭总线的功能,切断它与总线的联系,以使总线上其它操作不受影响。
*CAN可以点对点、一点对多点(成组)及全局广播集中方式传送和接受数据
*CAN总线直接通讯距离最远可达10km/5Kbps,通讯速率最高可达1Mbps/40m.
*采用不归零码(NRZ-Non-Return-to-Zero)编码/解码方式,并采用位填充(插入)技术。
CAN控制器是以CPU存储器映像外围设备出现的。P80C592的CPU与CAN控制器之间的数据传输通过4个特殊功能寄存器来实现,即: CANADR、CANCON、CANSTA和CANDAT,通过这四个特殊功能寄存器,CPU可以访问CAN控制器内部的任一寄存器(地址为0~29)和 DMA逻辑。表1给出了这四个SFR的功能简述,其中CANCON和CANSTA的读写操作含义不同。
表1 SFR功能简述
CAN控制器初始化(图4)是CAN通信中一个非常重要的子程序,程序是否合理将直接影响整个通信过程。CAN控制器的初始化首先必须通过置位CAN控制寄存器的"复位请求"位,置位"复位请求"并不影响正在进行的一个收发作业,特别需要注意的是,只有当复位请求被置位时,CAN内部地址为4-8的寄存器方可被访问,在复位操作结束后必须将该位置0以保持所进行的设置并使CAN返回工作状态。
图4 CAN通信中一个重要的子程序
P80C592和其在片CAN控制器都具有中断寄存器,必须注意两者的区别。CAN中断子程序(图5)首先读CAN中断寄存器(IR)以判断中断类型,据此转入相应的操作。如果接收缓存器满而另一个报文的首字节又需要被存储时,数据超限位被置位,此时应清除超限并释放接收缓存,然后重新发送数据请求。在数据接受子程序中当数据被转入RAM区后,应及时释放接受缓存器,以便为接收下一帧数据做好准备。
图5 CAN中断子程序
数据发送子程序见图6.CAN控制器向总线发送数据时,首先将在片主RAM中数据存放的首地址写入CANSTA,然后读取CANSTA.6的值(读 CANSTA的操作其实是对CAN控制器内部状态寄存器的读操作,CANSTA.6是错误显示位,当至少有一个总线错误计数器计数达到CPU告警极限时,该位将被CAN控制器置位。),若检测出错,则执行CAN初始化子程序,若正常,则继续检测接收状态和发送缓冲器状态,若发送条件满足则在CANADR中写入发送缓存器地址并置位DMA控制位,DMA传送随即被启动,数据场由RAM拷贝到发送缓存器,置发送请求位后数据开始发送。
4 结语
用高性能的P80C592和AD1674A数据采集模块组成车辆环境数据采集系统具有较高的性价比,目前该系统已投入试用阶段,运行状况良好。CAN总线非常适合分布式控制或适时控制的串行通信网络,本课题只涉及了数据采集,如果在此基础上扩展车辆辅助控制和重要数据备份功能,系统将会有更广阔的应用前景。