CAN是Controller Area Network 的缩写,是ISO国际标准化的串行通信协议。
CAN协议
CAN的通信是通过下列5种类型的帧进行的:
数据帧
用于发送单元向接受单元传送数据的帧。
帧起始:表示帧开始的段,由1个位的显性电平构成;
仲裁段:表示数据的优先级的段,扩展格式和标准格式在此构成不同;
控制段:由6位构成,表示数据段的字节数。保留位(r0,r1)必须全部以显性电平发送,接收方可以接收显性,隐形及其任意组合的电平。数据长度码(DLC)表示数据字节数(0~8),但是接收方对DLC = (9~15)的情况不视为错误;
数据段:数据段可包含(0~8)字节的数据,从MSB(最高位)开始输出;
CRC段:检查帧传输错误的帧,由15个位CRC顺序和1个位的CRC界定符构成。CRC顺序是指根据多项式生成的CRC值,计算范围包括帧起始、仲裁段、控制段、数据段;
ACK段:用来确认是否正常接收,由ACK槽和ACK界定符两个位构成。发送单元的ACK段发送2个位的隐形位,接收单元接收到正确数据时在ACK槽发送显性位;
帧结束:表示该帧的结束的段,由7个位的隐性位构成;
遥控帧
接收单元向发送单元请求发送数据所用的帧,遥控帧由6个段构成,没有数据帧的数据段。遥控帧的RTR位为隐性位。
帧起始:表示帧开始的段,由1个位的显性电平构成;
仲裁段:表示数据的优先级的段,可请求具有相同ID的数据帧;
控制段:由6位构成,表示数据段的字节数。保留位(r0,r1)必须全部以显性电平发送,接收方可以接收显性,隐形及其任意组合的电平。数据长度码(DLC)表示数据字节数(0~8),但是接收方对DLC = (9~15)的情况不视为错误;
CRC段:检查帧传输错误的帧,由15个位CRC顺序和1个位的CRC界定符构成。CRC顺序是指根据多项式生成的CRC值,计算范围包括帧起始、仲裁段、控制段、数据段;
ACK段:用来确认是否正常接收,由ACK槽和ACK界定符两个位构成。发送单元的ACK段发送2个位的隐形位,接收单元接收到正确数据时在ACK槽发送显性位;
帧结束:表示该帧的结束的段,由7个位的隐性位构成;
错误帧
用于接收和发送消息时检测出错误,并通知错误的帧,错误帧由错误标志和错误界定符构成。
错误标志:包括主动错误标志和被动错误标志,主动错误标志是6个位的显性位,被动错误标志是6个位的隐性位;
错误界定符:由8个位的隐性位构成;
过载帧
用于接收单元通知其尚未完成接收准备的帧,过载帧由过载标志和过载界定符组成。
过载标志:6个位的显性位,与主动错误标志的构成相同;
过载界定符:8个位的隐性位;
帧间隔
用来分离数据帧和遥控帧的帧,数据帧和遥控帧可以通过插入帧间隔将本帧和前面的任何帧分开。过载帧和错误帧前不能插入帧间隔。
间隔:3个位的隐性位;
总线空闲:隐性位,无长度限制,本状态下可视为总线空闲;
延迟传送:8个位的隐性位,只在被动错误状态的单元刚发送一个消息后,帧间隔中包含的段;
优先级的确定
在总线空闲阶段,最先开始发送消息的单元获得发送权;
在多个单元同时发送时,各发送单元从仲裁段的第一位开始仲裁,连续输出显性电平最多的单元可继续发送。
1. 具有相同ID的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权。
2. 标准格式ID和具有扩展格式的ID的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的RTR位为显性位的具有优先权。
位填充
是为了防止突发错误而设定的功能,当同样的功能电平持续5位时,则添加一个位的反型数据。
发送单元的工作:在发送数据帧和遥控帧时,SOF~CRC段间的数据,相同的电平如果持续5位,则在在第6位插入与前5位相反的电平;
接收单元的工作:在发送数据帧和遥控帧时,SOF~CRC段间的数据,相同的电平如果持续5位,需要删除第6位数据。若第6位数据电平与前5位相同,则发出错误帧;
位时序
由发送单元在非同步的情况下发送的每秒中的位数称为位速率,一个位可以分为4段。这些段又由的最小时间单位构成。
采样点是指读取总线电平,将读到的电平作为位值的点。