义乌做网站哪家好,六安三十铺,长春网站建设吉网传媒实力牜,中唯建设工程有限公司网站转自#xff1a;https://zhuanlan.zhihu.com/p/343607068
CAN接口兼容规范2.0A和2.0B(主动)#xff0c;位速率高达1兆位/秒。它可以接收和发送11位标识符的标准帧#xff0c;也可以接收和发送29位标识符的扩展帧。 扩展帧的仲裁域有29位#xff0c;可以出现2^29中报文https://zhuanlan.zhihu.com/p/343607068
CAN接口兼容规范2.0A和2.0B(主动)位速率高达1兆位/秒。它可以接收和发送11位标识符的标准帧也可以接收和发送29位标识符的扩展帧。 扩展帧的仲裁域有29位可以出现2^29中报文且在数据链路上是有间隙的(对操作者透明)。 标准帧的仲裁域是连续的11位可以出现2^11种报文 控制帧中的DLC(数据长度)完全相同但保留位不同标准帧IDE、R0扩展帧R1、R0必须以显性电平发送(由数据链路层操作)对程序员透明 其它的都一模一样所以其实CAN标准帧和扩展帧只是在ID的长度上不一样扩展帧可以支持更多的CAN节点而已。 注意这里的帧ID 并不是表示发送的目的地址而是表示访问总线的消息的优先级帧ID值越小优先级越高最小是0x00000000。
-bus通信帧共分为数据帧、远程帧、错误帧、过载帧和帧间隔五种类型。
1. 显形隐形电平
CAN-bus发布了ISO11898和ISO11519两个通信标准此两个标准中差分电平的特性不相同。 显性电平总线上只要有1个节点驱动为显性则总线表现为显性位电平逻辑解析为“0”。
隐形电平只有总线上的各节点都不将总线驱动成显性电平总线才表现为隐形位对应的电平逻辑解析为“1”。
位填充位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。
2. 数据帧
数据帧结构上由7个段组成其中根据仲裁段ID码长度的不同分为标准帧CAN2.0A和扩展帧CAN2.0B。 2.1帧起始、帧结束
帧起始和帧结束用于界定一个数据帧无论是标准数据帧或扩展数据帧都包含这两个段。 2.2仲裁段
CAN-bus是如何解决多个节点同时发送数据即总线竞争问题该问题由仲裁段给出答案。
CAN-bus并没有规定节点的优先级但通过仲裁段帧ID规定了数据帧的优先级。根据CAN2.0标准版本不同帧ID分为11位和29位两种。帧ID值越小优先级越高。 2.3 控制段
控制段共6位标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成扩展帧控制段则由IDE、r1、r0和DLC组成。 2.4 数据段
一个数据帧传输的数据量为08个字节,这种短帧结构使得CAN-bus实时性很高非常适合汽车和工控应用场合。 与其他总线协议相比CAN-bus的短帧结构具有以下优势
优势1数据量小发送和接收时间短实时性高。
优势2数据量小被干扰的概率小抗干扰能力强。
2.5 CRC段
CAN-bus使用CRC校验进行数据检错CRC校验值存放于CRC段。CRC校验段由15位CRC值和1位CRC界定符构成。 //算法1
U16 Can_FD_Analyzer::ComputeCrc15(std::vectorBitState bits, U32 num_bits)
{//X15 X14 X10 X8 X7 X4 X3 X0.U16 crc_result 0;for (U32 i 0; i num_bits; i) {BitState next_bit bits[i];//Exclusive orif ((crc_result 0x4000) ! 0) {next_bit Invert(next_bit); //if the msb of crc_result is zero, then next_bit is not inverted; otherwise, it is.}crc_result 1;if (next_bit mSettings-Recessive()) { //normally bit high.crc_result ^ 0x4599;}}return crc_result 0x7FFF;
}//算法2
U16 Can_FD_Analyzer::MakeCRC15(std::vectorBitState bits, U32 num_bits)
{//X15 X14 X10 X8 X7 X4 X3 X0.U16 CRC[15] { 0 };for (U32 i 0; i num_bits; i) {U32 DoInvert (bits[i] mSettings-Recessive()) ^ CRC[14]; //XOR required?CRC[14] (CRC[13] ^ DoInvert); //14CRC[13] CRC[12];CRC[12] CRC[11];CRC[11] CRC[10];CRC[10] (CRC[9] ^ DoInvert); //10CRC[9] CRC[8];CRC[8] (CRC[7] ^ DoInvert); //8CRC[7] (CRC[6] ^ DoInvert); //7CRC[6] CRC[5];CRC[5] CRC[4];CRC[4] (CRC[3] ^ DoInvert); //4CRC[3] (CRC[2] ^ DoInvert); //3CRC[2] CRC[1];CRC[1] CRC[0];CRC[0] DoInvert;}U16 result 0; // CRC Resultfor (U32 i 0; i 15; i) {result result | (CRC[i] i);}return (U16)result;
}2.6 ACK段
当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时它将在ACK段发送一个显性电平。 3. 远程帧
与数据帧相比远程帧结构上无数据段由6个段组成同理分为标准格式和扩展格式且RTR位为1隐形电平。 v 数据帧与远程帧的区别 4. 错误帧
4.1 CAN-bus 错误类型
尽管CAN-bus是可靠性很高的总线但依然可能出现错误CAN-bus的错误类型共有5种。
序号错误类型详细1CRC错误发送节点计算得到的CRC值与接收到的CRC值不同2格式错误传输的数据帧格式与任何一种合法的帧格式不符3应答错误发送节点再ACK阶段没有接收到应答信号4位发送错误发送节点在发送时发送总线电平与发送电平不同5位填充错误通信线缆上传输信号违反“位填充”规则
当出现5种错误类型之一时发送或接收节点将发送错误帧。错误帧的结构如下其中错误标识分为主动错误标识和被动错误标识。 为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧干扰其他节点通信CAN-bus规定了节点的3种状态机器行为。 5. 过载帧
当某些接收节点没有做好接收下一帧数据的准备时将发送过载帧以通知发送节点过载帧由过载标志和过载帧界定符组成。过载帧结构如下 由于存在多个节点同时过载且过载帧发送有时间差问题可能出现过载标志叠加后超过6个位的现象。 6. 帧间隔
帧间隔用于将数据帧或远程帧和他们之前的帧分离开但过载帧和错误帧前面不会插入帧间隔。 7. CAN-bus整个链路层处理数据流程 8.波形实例
本实例使用 Kingst LA5016 usb 逻辑分析仪检测CAN数据通讯。下图2是一个完整的数据包分析截图。从图中可以看到LA5016的CAN解析模块将协议数据分析为 ID协议id号RTR远程帧/数据帧标识, DLC数据长度Data传输数据 CRC ACK/NAK 。
图1数据包的ID号为0x002 RTRfalse数据帧 DLC:0x88个数据Data数据CRC为0x384515位 ACK应答。
圆形白点逻辑数据。
方形白点填充位。
协议解析参数设置 图1 CAN解析参数设置 图2 CAN标准帧 图3 仲裁域 图4 CRC域及ACK
另外CAN解析参数显示的格式可以分为二进制十进制十六进制ASCII及 ASCII十六进制。同时可以将协议数据按包格式导出。