ISO 11989只规定了CAN总线的物理层和链路层协议,在实际应用中,为保障不同厂家设备的兼容性,需要统一CAN总线的应用层协议。常见的应用层协议有:SAE J1939、CANOpen和DeviceNet。
- SAE J1939
SAE J1939基于CAN2.0B,通信速率250kbit/s,最多可带30个设备,最大总线长度可达40 m,节点线最长1米。SAE J1939定义了29位Indentifier和数据域的使用方法。定义协议数据单元(PDU = Indentifier+数据域),PDU格式:
优先权P:值越小,报文的优先权越高。
参数组编号PGN:参数组编号唯一标识一个参数组,表征报文的内容和用途,确定报文的类型和传播数据需要的帧数目。
扩展数据页EDP与数据页DP:没啥特别解释的,分类用的。
PDU格式PF:PDU有两种类型PDU1和PDU2,PDU1向特定地址发送报文,PDU2向全局地址发送报文。当PF为0239时,表征报文为PDU1;当PF为240255时,表征报文为PDU2。
特定域PS:功能由PF决定,当PF为PDU1时,PS表示目标地址;当PF为PDU2时,与PF的4个最低有效位能够共同确定4096个PDU2格式参数组。
源地址SA:发送消息的电控单元(ECU)地址。
数据域:CAN2.0的数据域最多支持8字节的数据,如果PDU的数据小于等于8字节,1个PDU用1个CAN2.0帧传输即可;如果PDU的数据大于8字节,就需要在发送时进行拆包,在接收时进行重组。接收端如何识别是否需要重组以及怎么重组呢?J1939的做法是在拆包的情况下,将8字节的数据区的第一个字节用于表示拆包后的序号(1-255);因此,最长的PDU为255×7字节。
例子:
;---------------------------------------------------------------------- (特定目标地址通讯)
PDU1
P R DP PF PS(DA) SA Data Field
3 1 1 8 8 8 0-64
;---------------------------------------------------------------------- (广播)
PDU2
P R DP PF PS(GE) SA Data Field
3 1 1 8 8 8 0-64
;---------------------------------------------------------------------
18FEDF00
110| 0 0 | 11111110 11011111 | 00000000
优 | | |
先 | | PGN | 源地址
级 | | |
优先级:110 ro 6
参数组:FEDF or 65247DEC
源地址:00H
及就是PF>240,则没有目标地址,只有源地址00XXBB
PF<240,则有目标地址,有源地址,PGN既就是00XX00
TP.CM报文的PF=EC,EC<F0,所以TP.CM的CANID是包含目标地址的,但是目标地址是FF,是广播地址,而PGN则应该是00EC00,而不是00ECFF。