CAN(Controller Area Network)是汽车电子中应用最广泛的一种通信总线。就目前笔者所接触到的开发模式,都是从EB或者Vector公司买来软件包进行配置,然后自动生成这部分代码,也就是说手写的不多。虽然不需要手写代码,但是基本的框架和思想还是要知道的,不然很可能出现即使有工具也配不出来的情况。
1 CAN通信协议的概念
在AUTOSAR框架下,CAN通信协议栈位于运行时环境(RTE)和微控制器抽象层(MCAL)之间,以实现应用层和底层之间的数据交互,总体框架如下图所示:
图1 CAN协议栈架构
(1)CAN Driver:硬件相关,CAN驱动
(2)CAN IF:CAN Interface,主要实现驱动和上层之间联系的接口
(3)CAN TP:CAN Transport Protocol,负责CAN报文的组包拆包
(4)PDUR:PDU(Protocol Data Uint),PDU路由器,起路由作用。 CAN的通信消息分为3种,App报文、NM报文和诊断报文,PDUR将接收到的App报文和诊断报文区分开来,分别发给 COM模块和DCM模块
(5)COM:服务层通信,COM层就是负责App报文通信的
(6)DCM:诊断通信模块
2
通信过程
数据发送:
图2 CAN总线数据发送示意(图源:Vector)
(1)COM层收到应用层信号(Signal),写入PDU Buffer
(2)PDUR将PDU发送至Interface相应通道
(3)Interface再把数据发送到CAN驱动,最终实现数据发送
数据接收:
图3 CAN总线数据接收示意(图源:Vector)
(1)CAN Driver发出Rx中断,数据被传输到Interface
(2)Interface传给PDUR
(3)PDUR把数据传给COM层,最终通过RTE层传给应用层