【通信协议见解析】 CAN通信协议解析

CAN通信协议解析

控制器局域网 (Controller Area Network,简称CAN或者CAN bus) 是一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。 它基于消息传递协议,设计之初在车辆上采用复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。CAN建立在基于信息导向传输协定的广播机制(Broadcast Communication Mechanism上。其根据信息的内容,利用信息标志符(Message Identifier,每个标志符在整个网络中独一无二)来定义内容和消息的优先顺序进行传递,而并非指派特定站点地址(Station Address)的方式。因此,CAN拥有了良好的弹性调整能力,可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外,消息的传递不基于特殊种类的节点,增加了升级网络的便利性。

帧ID:是CAN的一种“地址”。CAN有个特点是竞争机制,帧ID越小越有占用总线资源的权利,越会优先发送。

一、通信架构

高速CAN所有节点通过两根平行的总线连接在一起。两条电线组成一条双绞线,并且接有120Ω的特性阻抗。ISO 11898-2,也称为高速度CAN。它在总线的两端均接有120Ω电阻。

1920px-CAN_ISO11898-2_Network

高速CAN总线在传输显性(0)信号时,会将CAN_H端抬向5V高电平,将CAN_L拉向0V低电平。当传输隐性(1)信号时,并不会驱动CAN_H或者CAN_L端。 显性信号CAN_H和CAN_L两端差分标称电压为2V。 终端电阻在没有驱动时,将差分标称电压降回0V。显性信号(0)的共模电压需要在1.5V到3.5V之间。隐性信号(1)的共模电压需要在+/-12V。

1920px-ISO11898-2

ISO 11898-3,也被称作低速或者容错CAN。它使用线性主线,星形主线或者连接到一个线性主线上的多星结构主线著称。每个节点都有终端电阻作为全局终端电阻的一部分。全局终端电阻不应低于100 Ω。

1280px-CAN_ISO11898-3_Network

低速/容错CAN信号在传输显性信号(0)时,驱动CANH端抬向5V,将CANL端降向0V。在传输隐性信号(1)时并不驱动CAN 总线的任何一端。在电源电压Vcc为5V时,显性信号差分电压需要大于2.3V,隐性信号的差分电压需要小于0.6V。CAN总线两端未被驱动时,终端电阻使CANL端回归到RTH电压(当电源电压Vcc为5V时,RTH电压至少为Vcc-0.3V=4.7V),同时使CANH端回归至RTL电压(RTL电压最大为0.3V)。两根线需要能够承受-27V至40V的电压而不被损坏。

1920px-ISO11898-3_Waveform

二、帧结构

1920px-CAN-Bus-frame_in_base_format_without_stuffbits

基本帧结构

屏幕截图 2023-10-30 105210

扩展帧结构

can-扩展帧

远程帧:通常数据传输是在数据源节点(例如传感器)发出数据帧的情况下自主执行的。但是,目标节点也可以通过发送远程帧来从信息源请求数据;数据帧和远程帧之间有两个区别。首先,RTR位在数据帧中作为显性位传输,其次在远程帧中没有数据段。DLC字段表示所请求的消息的数据长度,而不是发送的数据长度。也就是说:在数据帧和具有相同标识符的远程帧同时发送的情况下,由于数据帧标识符之后的RTR位是显性,它将赢得仲裁。

错误帧:错误帧由两个不同的字段组成:

  • 第一段由不同站点提供的错误标志(6-12个显性位/隐性位)的叠加给出。
  • 接下来的第二段是错误帧定界符(ERROR DELIMITER,8个隐性位)。

错误标志也有两种:

  • 主动错误标志

    六个显性位 - 由网络上错误状态为“主动错误”的出错的节点传送。

  • 被动错误标志

    六个隐性位 - 由网络上错误状态为“被动错误”的出错的节点传送。

CAN有两种错误计数器:

​ 1.传输错误计数器(Transmit error counter,简称TEC)
​ 2.接受错误计数器(Receive error counter,简称REC)

  • 当传输错误计数器TEC或接受错误计数器REC大于127且小于255时,将在总线上传输被动错误帧。
  • 当传输错误计数器TEC或接受错误计数器REC小于128时,将在总线上传输主动错误帧。
  • 当传输错误计数器TEC或接受错误计数器REC大于255时,节点进入主线离线状态,不会传输帧。过载帧

过载帧

包含两个位字段:过载标志(Overload Flag)和过载定界符(Overload Delimiter)。有两种过载条件可导致过载标志的传输:

  1. 接收器的内部条件,要求延迟下一个数据帧或远程帧。
  2. 中断检测到一个显性位。

由于情况1引起的过载帧只允许在预期中断的第一位时间开始,而由情况2引起的过载帧在检测到显性位后一位开始。过载标志由六个显性位组成,其整体形式与主动错误标志的形式相对应。过载标志的形式破坏了中断区的固定形式。因此,所有其他站点也会检测到过载情况,并在它们自己的部分开始传输过载标志。过载定界符由8个隐性位组成,与错误分隔符的形式相同。

位填充:传输器会在相同极性的五个连续位之后插入一个相反的极性的位,以确保足够的转换来保持同步。这种做法被称为*位填充*,并且对于CAN这样的不归零(NRZ)编码是必要的。填充的数据帧由接收器去掉填充。除了CRC定界符,ACK字段和结束位这样固定字长的区域之外,帧中其他所有字段都会被填充,这些字段是固定大小且未被填充。在使用位填充的字段中,具有相同极性的六个连续位(111111或000000)被视为错误。 当检测到错误时,节点可以发送主动错误标志。主动错误标志由六个连续的显性位组成,违反了位填充规则。

can-位填充

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值