CAN协议,全称为控制器局域网总线(Controller Area Network),是一种广泛应用于汽车、工业控制和其他自动化领域的串行通信协议。
MCU需要两路CAN,一路用于控制器间通讯CAN1,另一路用于诊断和标定CAN2
- 控制器间通讯CAN1
一路用作基本通讯,上面挂载整车控制器,电机控制器和电池管理控制器等节点 - 诊断和标定CAN2
车辆开发过程中通过标定协议XCP读取控制器内部变量或诊断协议UDS服务进行诊断通讯,通常叫做诊断CAN或标定CAN,量产后一般会被禁用
这条需求要求的是2路CAN的情况,那还有其他情况吗?随着汽车智能驾驶功能的增加,主机厂一般会需要再增加一路CAN,即所谓的ADAS CAN。当然也有些控制器只是负责简单的执行功能,这时可能就只需要1路CAN,即与其他控制通讯以及诊断标定共用一路CAN。
CAN FD的数据场长度。它是指CAN FD对数据场的长度作了很大的扩充,DLC最大支持64个字节,在DLC小于等于8时与原CAN总线是一样的,大于8时有一个非线性的增长,所以最大的数据场长度可达64字节,如下所示
这样,标准格式可表示的CAN ID(11位) 范围为 0X000~0X7FF,而扩展格式可表示的CAN ID(29位)范围为0X00000000~0X1FFFFFFF。一般乘用车上常用标准格式的CAN ID,而商用车上常用扩展格式的CAN ID。
假设目标电机扭矩为0X500,那么根据上表的转换关系,目标电机扭矩的物理值为320Nm。其转换过程为:先0X500转换成十进制为1280,再1280*0.25则为320,默认单位为Nm。以此类推,不难转换其他几个信号。
最后,对于CAN报文协议中的信号,除了控制器之间需要信息交互的信号,可能还包含保护或校验信息,比如校验和(Checksum)和滚动计数器(RollingCounter)。
1)Checksum。它是用来判断CAN报文传输过程是否会出现错误,报文的发送方采用特定的Checksum校验算法计算一条报文的CRC校验码,再将该校验码放到该报文数据中,与报文中的其他信号一起发送到CAN总线。然后报文的接收方会读取到该校验码,同时采用相同的Checksum校验算法计算出CRC校验码,再对比这两个校验码,如果一致,则说明报文传输过程没有出现错误,否则认为报文传输过程有误,这条报文有问题。
2)Rolling counter。它是用来判断报文传输过程是否出现丢帧,报文的发送方发送一条报文就计数器加1,从0累加到15,然后不断循环。如果出现计数器不连续或首尾值不对,报文的接收方会认为丢帧。