板内板间通信协议及接口(五)CAN总线

CAN总线协议


要了解报文数据帧的直接看第三点

1. CAN简介

CAN(controller area network)控制器局域网是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线

其特点有:

  1. 总线上节点不分主从
  2. 采用载波监听多路访问、逐位仲裁的非破坏性总线仲裁技术。
  3. 直接通信距离最远10km,速率5Kb/s
  4. 通信速率最高可达1Mb/s,距离40m
  5. 末端要有120欧终端电阻

11898协议

  • iso的osi模型
  • 11898-1对应controller
  • 11898-2对应高速can收发器
  • 11898-3对应低速can收发器
  • 11898-4增加时间触发通讯机制

can总线协议主要工作在osi模型中的物理层和数据链路层

ISO 11898-2 和 ISO 11898-3主要应用于物理层,两种can收发器主要是对应的茶分电压不一样。

ISO 11898-1主要应用于数据链路层。

2. CAN总线电平

can总线采用差分电压传输数据,分别是CANH和CANL两根总线。总线上的信号电平分为这两条线之间的差分电压。

​V d i f f = V C A N H − V C A N L V_{diff} = V_{CANH} - V_{CANL}Vdiff​=VCANH​−VCANL​

image-20210928153423098

CAN总线具有两种逻辑电平:隐性电平和显性电平。

隐性电平:CANH和CANL之间的差分电压近似为0,表示逻辑1

显性电平:CANH和CANL之间的差分电压近似为2~3V,表示逻辑0

CAN总线上的逻辑是“线与”的形式,显性电平可以覆盖隐性电平,因此0可以覆盖1

3. CAN数据帧

CAN的报文帧可以分为标准帧和扩展帧两大类型。

3.1 标准帧 Standard CAN

image-20210928141242303

  • 帧起始:SOF仅由一个显性位构成。在总线空闲时才允许节点发SOF。
  • 仲裁场:由11位ID号(标识符)远程请求位RTR组成。ID号以高位到低位的顺序发送,其中高7位(ID.10~ID.4)不能全为隐位。RTR在数据帧中必须是显位,在远程帧中必须为隐位。当需要请求另一个节点的信息时,RTR位为显性表示远程帧,所有的节点都会收到请求并根据ID号确认响应节点。
  • 控制场:由扩展标识符IDE、保留位r0数据长度码DLC组成。IDE位为0表示改帧为标准帧。DLC为4bits,允许使用数目为0~8。r0保留显性位0。
  • 数据场:最多64bits即8个字节长度数据
  • CRC场:由15位CRC序列和1位界定符组成。
  • 应答场:ACK由2bits组成,包括应答间隙和应答界定符。应答场中发送器发出2位隐性位,如果接受器正确接收到数据,则发送一个显性位告知正确收到有效报文。即接收节点当CRC校验结果正确时会在应答间隙内发一个显性位。第二位应答界定符必须是隐性位。
  • 帧结束:EOF由7个隐位组成。当接收到EOF 字段的最后一位且全为隐性位时,该消息被认为是有效的。 若 EOF 字段中出现显性位将会使发送器重复发送信息。

image-20210928145714011

7 位字段标志 CAN 帧的结束并禁用位填充,当出现显性时表示填充错误。

位填充:正常工作时,当连续出现5位相同逻辑电平时,将填充一位相反的逻辑电平到数据中。

3.2 扩展帧Extended CAN

image-20210928150336145

为区别标准帧和扩展帧,将CAN2.0A标准中的r1改为扩展ID号IDE。

  • SRR为替代远程请求位,用于取代标准帧中的RTR位,作为扩展帧中的占位符,同样是在数据帧中为隐性位。
  • IDE为扩展标识符,隐性位表示后面有更多的标识符位(ID位),IDE位后面跟着18位扩展ID。
  • r1和r0都是保留位,保留显性0。

扩展ID位IDE位在标准帧中为显性,在扩展帧中为隐性电平。可根据IDE位电平判断帧格式。

image-20210928160033001

图片来源:CSDN

4. CAN总线仲裁

如果两个节点试图同时占用总线,CAN协议协议采用非破坏性逐位仲裁来决定总线的占有权。赢得仲裁的节点只需继续处理消息,不会被其他节点破坏信息完整。

CAN总线的一个特性是为节点ID号的消息分配优先级。ID号越低,优先级越高。最高优先级ID为0。

如果两个或以上节点同时开始传输,则进入总线仲裁,由于CAN总线的特性决定显性电平可以覆盖隐性电平,在逐位仲裁的过程中,ID号高位为1的节点主动退出竞争,最终使具有最高优先级(ID号最小)的节点获得总线通信权,保留对CAN总线的控制并继续完成其消息传送。

image-20210928153702137

上图显示由 CAN 控制器自动处理的 CAN 仲裁过程。

由于每个节点持续监控自己的传输状态,当节点 B 的隐性位被节点 C 的显性位覆盖时,B 检测到总线状态与自身传输的位不匹配。因此,节点 B 停止传输,而节点 C 继续发送其消息。

一旦节点 C 释放总线,节点 B 将尝试传输消息。

5. 帧的有效性

CAN 协议包含五种错误检查方法:三种在消息级别,两种在位级别。

消息级别错误检查

消息级别由CRC校验和 ACK 应答间隙强制执行。 还有一个帧检查,查找帧中始终为隐性的字段,即SOF、EOF、ACK界定符和CRC界定符,若检测到出现显性位则产生错误。

位级别错误检查

位级别由发送器数据监测位填充规则执行。数据监测是在节点发送数据时会不断检测总线电平与自己发送的数据是否一致,如果发现不一致则产生一个位错误。位填充是在连续5个相同电平的位之后填充一个极性相反的位。如果下一位不是补码,则会产生错误。在将数据转发到应用程序之前,接收节点的控制器会删除填充位。

如果消息未通过任何一种错误检查,则该消息无效,接收节点生成错误帧,强制发送节点重新发送消息,直到它被正确接收。

如果故障节点通过不断重复错误而挂断总线,则在达到错误限制后,控制器将取消其传输能力。

6. 报文帧类型简介(扩展)

6.1 数据帧

image-20210928180128242

数据帧是最常见的消息类型,包括仲裁字段、数据字段、CRC 字段和确认字段。 仲裁字段包含图 2 中的 11 位标识符和 RTR 位,该位对数据帧起主导作用。 在图 3 中,它包含 29 位标识符和 RTR 位。 接下来是包含 0 到 8 个字节数据的数据字段,以及包含用于错误检测的 16 位校验和的 CRC 字段。 最后是确认字段。

6.2 远程帧

image-20210928171430167

6.3 出错帧

image-20210928171441409

CAN总线电平(隐性与显性)与RS232标准电平
CAN总线上的数据位采用具有两种互补的逻辑值,即显性(Dominant)和隐性(Recessive)。显性电平在逻辑层面表现为0,隐性电平在逻辑层面表现为1,即显性电平用逻辑“0”表示,隐性电平用逻辑“1”表示。
总线按照线与机制对总线上任一潜在的冲突进行仲裁,显性电平覆盖隐性电平,即只有总线上所有单元都输出隐性电平时,总线上才为隐性电平。
CAN使用差分电压传送(CAN_H、CAN_L),Vdiff=CAN_H-CAN_L。
典型地:
CAN总线为“隐性”(逻辑1)时,CAN_H和CAN_L的电平为2.5V(电位差Vdiff为0V);
CAN总线为“显性”(逻辑0)时,CAN_H和CAN_L的电平分别是3.5V和1.5V(电位差Vdiff为2.0V左右)。
具体如下图。


添加链接描述
https://blog.csdn.net/gtkknd/article/details/104813633(下图来源于此网络链接)
图中120欧终端电阻的作用是进行阻抗匹配,以减少回波反射。

标题 CAN总线电平、RS232标准电平与TTL电平
CAN总线:使用差分电压传送(CAN_H、CAN_L),Vdiff=CAN_H-CAN_L。
EIA-RS-232C: RS232是个人计算机上的通讯接口之一,由电子工业协会(Electronic Industries AssociaTIon,EIA) 所制定的异步传输标准接口。是用正负电压来表示逻辑状态。RS-232C中任何一条信号线的电压均采用负逻辑,规定+3V~+15V之间的任意电平为逻辑“0”电平,-3V~-15V之间的任意电平为逻辑“1”电平。
逻辑1:-3  ~ -15V;
逻辑0:+3 ~ +15V 。
TTL电平:以高低电平表示逻辑状态。TTL电平一般为5V为逻辑正,0为逻辑负。

显性电平在物理层面表现为差分高电平,隐性电平在物理层面表现为差分低电平。
显性电平在逻辑层面表现为0,隐性电平在逻辑层面表现为1。

​​​​​​​​​

CAN总线定义了OSI模型里的物理层与数据链路层。

RS485通讯跟CAN通讯在物理层在某些内容很相似(比如120欧终端电阻,特性阻抗120欧的双绞线缆等)。但是,RS485只定义了OSI模型里的物理层而已。


二、CAN信号的电平
一般所说的CAN总线,其实就是指ISO11898标准的高速CAN,最高的波特率是1Mbps,电位差分别是2.00V(显性0)与0V(隐性1)。ISO11519-2标准的是低速容错CAN,最高的波特率是125Kbps,它主要用于汽车上。从表格看到,低速容错CAN加大了电位差,所以电信号通讯的效率变低。高速CAN与低速CAN在显性与隐性时的电位差不一样,所以用示波器捕捉电平后就能区别出高速CAN与低速CAN。

三、为什么要采用两根线(双绞线)的差分电平信号?
例如在工厂里,会有各种各样的设备摆在一起,组成一条流水线。在这种情况下,很大概率会有干扰产生。双绞线传输差分信号时受到共模信号干扰后,电平差值不变(差模信号没有收到影响,因为两根线的差值保持不变),信号解码保持正常。但是需要注意的是,如果线缆双绞的程度不正确,将会导致共模干扰无法消除。

差模又称串模,指的是两根线之间的信号差值;而共模噪声又称对地噪声,指的是两根线分别对地的噪声。


总之,设计CAN总线的同学,千万不能分别用两根单芯线来传递CAN信号,根本没法对抗干扰。

四、线与原理
多个CAN节点并接到同一总线时,只要其中一个节点输出低电平,总线就为低电平,当所有节点输出高电平时,总线才为高电平。CAN总线利用线与原理来实现仲裁机制,后续在数据链路层讲到。

读CAN总线的书时,都会涉及到总线电平的问题,CAN总线的电平分为显性电平与隐性电平,这是CAN总线物理层的核心部分,也是总线仲裁的基础。那何为显性,何为隐性呢?

根据孔丙火(微信公众号:孔丙火)的理解,最直接的解释就是波形,用示波器测量CANH和CANL上的差分波形,可以清晰的看到有高低电平,在短距离通信中,高电平在2-4V之间(实测),低电平为0V。那么,从波形上看,最显眼的肯定是高电平,不显眼的是低电平,那么高电平就是显性电平,低电平就是隐性电平。如图1所示。

———那么,另外一个问题来了,我们在看CAN总线资料的时候,总会看到一个线与的概念,显性电平的逻辑为0,隐性电平的逻辑为1,所以在仲裁的时候ID越小的帧优先级越高。显性电平为什么逻辑为0呢,其实,这都是CAN收发器芯片完成的工作,在收到显性电平的时候,芯片会在Rx脚输出低电平,即0,这样就实现了CAN差分电平与TTL电平的转换。孔丙火(微信公众号:孔丙火)认为,我们在使用中,只要知道显性电平的差分电平为高,逻辑电平(TTL电平)为低,就可以了,否则在测试CAN波形时可能会有疑惑。—————————————

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值