首页 > 编程知识 正文

can转换器,can通信协议简单理解

时间:2023-05-06 16:54:31 阅读:39958 作者:3446

(转自) 3359珠兰.智惠.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通信帧分为数据帧、远程帧、错误帧、过载帧、帧间隔5种。

http://www.Sina.com/http://www.Sina.com /

CAN-bus发布了ISO11898和ISO11519两种通信标准。 这两个标准的差异级别特性不同。

显性电平:如果总线上至少有一个节点驱动为显性,则总线表现为显性电平,逻辑分析为“0”。

隐藏级别:总线被表示为与隐藏位对应的级别,并且在逻辑上分析为“1”,除非总线上的每个节点将总线驱动到显性级别。

位填充:位填充是为防止意外错误而设置的功能。 如果同一级别持续5位,则添加1位反转数据。

http://www.Sina.com/http://www.Sina.com /

数据帧结构由七个段组成,根据仲裁段的ID代码长度分为标准帧(CAN2.0A )和扩展帧(CAN2.0B )。

1.

帧开始和帧结束用于定义单个数据帧,它们既包含在标准数据帧中,也包含在扩展数据帧中。

显形隐形电平

CAN-bus如何解决多个节点同时发送数据(总线竞争)的问题? 这个问题通过仲裁得出答案。

CAN-bus没有规定节点的优先级,但仲裁段帧ID规定了数据帧的优先级。 根据CAN2.0标准版本,帧ID分为11位和29位两种。 帧ID的值越小,优先级越高。

2.

控制段共6个比特,并且标准帧的控制段由扩展帧标志比特IDE、保留比特r0和数据长度码DLC组成; 扩展框架控制段由IDE、r1、r0和DLC组成。

数据帧

在一个数据帧中传输的数据量为0到8字节,这种短的帧结构具有很强的CAN-bus实时性,非常适合汽车和工程APP应用。

与其他总线协议相比,CAN-bus的短框结构具有以下优点:

优点1 :数据量少,收发时间短,实时性强。

优点2 :数据量少,受干扰概率小,抗干扰能力强。

2.1帧起始、帧结束

CAN-bus使用CRC校验进行数据错误检测,CRC校验值存储在CRC段中。 CRC校验段由15位CRC值和1位CRC修饰符组成。

//算法1u 16 can _ FD _ analyzer 33603360 compute CRC 15 (STD 33603360 vectorbitstatebits,U32 num_bits )/x 15 x 14 x 10 x 8x 7x7fofots i num_bits; I ) { BitState next_bit=bits[i]; //exclusiveorif ((CRC _ result0x 4000 )!=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 () (/normallybithigh.CRC _ result ^=0x 4599; } } return crc_result0x7FFF; //算法2u 16 can _ FD _ analyzer :3360 make CRC 15 (STD 33603360 vectorbitstatebits,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); //14 CRC[13] = CRC[12]; CRC[12] = CRC[11]; CRC[11] = CRC[10]; CRC[10] = (CRC[9] ^ DoInvert); //10 CRC[9] = CRC[8]; CRC[8] = (CRC[7] ^ DoInvert); //8 CRC[7] = (CRC[6] ^ DoInvert); //7 CRC[6] = CRC[5]; CRC[5] = CRC[4]; CRC[4] = (CRC[3] ^ DoInvert); //4 CRC[3] = (CRC[2] ^ DoInvert); //3 CRC[2] = CRC[1]; CRC[1] = CRC[0]; CRC[0] = DoInvert; } U16 result = 0; // CRC Result for (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, RTR:false(数据帧), DLC:0x8(8个数据),Data:数据,CRC为0x3845(15位), ACK:应答。

圆形白点:逻辑数据。

方形白点:填充位。

协议解析参数设置:

图1 CAN解析参数设置

图2 CAN标准帧

图3 仲裁域

图4 CRC域及ACK

另外,CAN解析参数显示的格式可以分为:二进制,十进制,十六进制,ASCII,及 ASCII&十六进制。同时可以将协议数据按包格式导出。

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。