CAN协议学习(四)

ISO 11989只规定了CAN总线的物理层和链路层协议,在实际应用中,为保障不同厂家设备的兼容性,需要统一CAN总线的应用层协议。常见的应用层协议有:SAE J1939、CANOpen和DeviceNet。

1. SAE J1939

SAE J1939基于CAN2.0B,通信速率250kbit/s,最多可带30个设备,最大总线长度可达40 m,节点线最长1米。SAE J1939定义了29位Indentifier和数据域的使用方法。定义协议数据单元(PDU = Indentifier+数据域),PDU格式:

                                                         PDU
                                 PGN    
优先权 扩展数据页 数据页 PDU格式 PDU特定域 源地址 数据域
P EDP DP PF PS SA Data
3bit 1bit 1bit 8bit 8bit 8bit 0~8byte

优先权P:值越小,报文的优先权越高。

参数组编号PGN:参数组编号唯一标识一个参数组,表征报文的内容和用途,确定报文的类型和传播数据需要的帧数目。

扩展数据页EDP与数据页DP:没啥特别解释的,分类用的。

PDU格式PF:PDU有两种类型PDU1和PDU2,PDU1向特定地址发送报文,PDU2向全局地址发送报文。当PF为0~239时,表征报文为PDU1;当PF为240~255时,表征报文为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字节。

你可能感兴趣的:(CAN协议学习(四))