CAN 通讯协议 学习笔记(1)


目录  CAN 通讯协议

    前沿:理论的协议 和 写CAN通讯程序(收发)是两回事,像CRC循环检测或错误检测都是硬件完成的,不需要我们再编写,最初的时候我也是一头雾水,

不知道该如何下手,这就是程序员和芯片设计者的不同。总之,不要以为看了协议就会写程序,还是网上找一个对应芯片的demo,好好研究其流程及可。

 1.来源与定义

 2.物理构成

 3.总线逻辑

 4.帧的格式以及分类

 5.数据竞争机制

 6.错误类型(5种)

 

1.来源与定义

    CAN是控制器局域网络(Controller Area Network,CAN)上的物理层和链路层的协议。是由德国BOSCH公司开发,并最终成为

国际标准11898,是汽车计算机控制系统和嵌入式工业网络控制的 现场总线。

     CAN属于现场总线范畴,她是一种有效支持分布式控制或实时控制的串行通信网络。

     协议11898.1,2,3(其中1是controor,2是高速收发器,例如检测或控制汽车车速,3是低速收发器,例如控制雨刮器)

----------->引出疑问?

(1)什么是物理层和链路层?

           设备之间通讯需要遵循一定的规范,物理层从硬件的角度实现链路层的逻辑电平。开放式系统互联通讯参考模型(Open

system interconnection Reference Model,简称OSI),一种试图将各种计算机在世界范围内互联的标准框架。

                           

其中

         物理层:表现电气特性和机械特性,两根总线加总线两端连接120欧姆的电阻。

         数据链接层:表现帧的格式,传输大小,过滤的设置。

 

(1)什么是分布式控制?

             分布式控制就是总线空闲时间内上任意节点都可以竞争发送消息,没有所谓的主机和从机的概念。

(3)与其他通讯协议比较?

                                


2.物理构成

           CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过两条线实现信号的串行差分传输,为了避免信号的反射和干扰,

还需要在CAN_H和CAN_L之间接上120Ω的终端电阻。为什么是120欧姆,因为其电缆的阻抗特性为120Ω。具体如下图所示。

                              

如果进一步将信号节点剖析,就会知道下面的信息

1.设备号 host   

2.控制器 controller

3.传送器transmitter ,控制  收发,高速、低速等

                                   


3.总线逻辑

 3.1显性和隐性

CAN总线上的数据位(又称CAN总线位数值)采用两种互补的逻辑值,即显性和隐性

  • 逻辑0:显性,只要有一个节点是逻辑0,总线就是逻辑0
  • 逻辑1:隐性,只要有一个节点是逻辑1,总线就是逻辑1CAN总线上的CAN信号使用差分电压传送,两条信号线被称为CAN_H和CAN_L.

3.2 差分电压

                                                         Vdiff =CAN_H - CAN_L

                                         

其中电位差Vdiff 决定其逻辑电平的显性和隐性。

3.3 CAN总线类型

CAN总线类型分别是 高速CAN、容错CAN(低速CAN)、单线CAN。

不同类型的CAN总线 电位差Vdiff对应的逻辑电平不同。

  •  高速CAN,只有在总线CAN_H=CAN_L,即Vdiff==0,隐性,即逻辑1。

如果有电位差且CAN_H>CAN_L,为显性,即逻辑0

  • 低速CAN,只有在CAN_L>CAN_H  ,隐性,即逻辑1

                 只有在 CAN_L<CAN_H  ,显性,即逻辑0

        

  • 单线CAN电平

                       

4.帧的格式以及分类(别名又叫报文)

                                  

1)数据帧和扩展帧

数据帧包括  =  SOF(1bit显性) + 仲裁域(11bit_ID+1bit_RTR) + 控制域(12bit)+ data(8 byte) + CRC校验(15bit数据校验和1bit隐性位的界定值)

+相应ack(2bit)+EOF(7bit隐性)+ITM(帧间隔)其中ITM被用来判断节点是否过载,不属于数据帧的内容,先列出来。

------------------------------------------------------------------------------->流程

BUS idle

SOF(START OF FRAME)

1bit 显性位

仲裁域:

         数据帧的ID(标识符)就是节点的ID,只有接收方的过滤器没有屏蔽你的ID,你发送的消息才能被接收。同理作为接受方,你没有屏蔽对方的消息,你才能收到

数据帧。

         RTR是表示数据帧和远程帧。远程帧没有数据端date,是对方设备发送命令请求而已。

控制域

       IDE:标准帧还是扩展帧(11bit还是29bit)

      R1 过渡帧

      DLC:发送数据、接收数据的长度

数据域

      8byte

CRC

      CRC 校验位15bit数据校验和1bit隐性位界定符

EOF(end of frame)

7位 隐性位

ITM :帧间隔,实际不属于帧内的区域,必须等待帧间隔才能发送消息

正常是3bit 隐性位,如果出现过载帧就会导致出现显性位0

BUS IDLE

---------------------------------------------------------------------------------->结束

 

 

2.远程帧(RTR REMOTE TRANSMIT REQUEST)

                   

3.错误帧:就是传输中出现相关错误

     

4.过载帧:过载帧是接收节点向总线上其它节点报告自身接收能力达到极限的帧。

                      过载帧是接收节点向总线上其它节点报告自身接收能力达到极限的帧。我接收节点Node_A已经没有能力处理你们发来的报文了。

                 

对于过载帧的帧结构的理解:接收节点Node_A达到接收极限时,就会发送过载帧到总线上。显然过载标志的6个连续显性位屏蔽掉总线上其他节点的发送

也就是这个时候node_A通过发送过载帧的方式来破坏其他节点的发送,这样在Node_A发送过载帧期间,其他节点就不能成功发送报文,于是就相当于把其他节点

发送给她的报文推迟,也就是Node_A发送过载帧的这段时间得以“休息”。

 

有三种情况会引起过载帧:

  • 接收节点自身原因。接收节点由于某种原因需要延迟接收下一个数据帧或者遥控帧。
  • 在帧间隔(ITM)的间隔段的第一位和第二位检测到一个显性位(正常的间歇段都是隐性位)帧间隔的间隔段本应是三个连续的隐性位,如果接收节点Node_A在间隔段检测到显性位,那么就意味着此时有报文发向接受节点Node_A,但这个时候是不应该有报文发来的,于是Node_A发送过载帧。
  • CAN节点错误界定符过载界定符(8位隐性位)的第八位(最后一位)听到一个显性位0,节点会发送一个过载帧,且错误计数器不会增加

 

5. 数据竞争机制  

意义:解决多个节点在同一时间发消息的问题。

1)仲裁:

1.帧ID越小,优先级越高

2.数据帧优先于远程帧

2)风险

 行为:EOF节点会自动在检测到总线空闲的第一时间再次尝试联系,风险:在网络负载率很高,也就是消息很多的时候,低优先级的消息可能会延迟很久才能发送成功。

 

6.错误检测机制

        CAN总线上每个控制器都会尝试检测错误的报文。

        如果发现错误,发现错误的节点会发送错误标志,从而中断总线通信。其他节点会接收到错误标志,采取合理的措施,如丢弃报文

        存在5中错误帧的类型:

1)位监测

2)位填充

3)帧检查

4)应答检查

5)冗余检查

   

     

       

 

未完待续

 

 

 

参考资料:

1.https://jingyan.baidu.com/article/46650658243a5ff548e5f873.html

2.野火STM32F10X零死角教程

3.https://blog.csdn.net/qq_40242571/article/details/118672112

4.https://blog.csdn.net/weixin_40528417/article/details/79871311(过载帧)

 

 

Date:2021-10-24   8:05:21 PM  in BingJiang library
Date:2021-11-03  21:51:45       in Z-control research institution
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM