嵌入式Linux学习(2)——经典CAN介绍(上)

目录

一. CAN与ISO-OSI Model

二. CAN通信

2.1 接线方式

2.1.1 闭环网络

2.1.2 开环网络

2.2 收发流程

2.2.1 发送

2.2.2 接收 

三. CAN BUS访问与仲裁

3.1 “线与”机制​

3.2 仲裁机制

REF


CAN(Controller Area Network)总线协议是由 BOSCH 发明的串行通信总线,它起初用于实现汽车内ECU之间可靠的通信,后因其简单实用可靠等特点,而广泛应用于工业自动化、船舶、医疗等其它领域。 

与 I2C、SPI 等具有时钟信号的同步通讯方式不同,CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。由于 CAN 总线协议的物理层只有 1 对差分线,在一个时刻只能表示一个信号,所以对通讯节点来说,CAN 通讯是半双工的,收发数据需要分时进行。在 CAN 的通讯网络中,因为共用总线,在整个网络中同一时刻只能有一个通讯节点发送信号,其余的节点在该时刻都只能接收。

CAN帧抓取:Ubuntu安装PCAN-View-CSDN博客

一. CAN与ISO-OSI Model

在 ISO-OSI 模型中 CAN 属于 L2 层的协议。 


 

二. CAN通信

CAN总线是一种多主控(Multi-Master)的总线系统。CAN网络的消息是广播式的,即在同一时刻网络上所有节点侦测的数据是一致的,它是一种基于消息广播模式的串行通信总线。采用CAN总线网络结构,可以达到信息共享、减少布线、降低成本以及提高总体可靠性的目标。

2.1 接线方式

2.1.1 闭环网络

上图是遵循 ISO11898 标准的高速、短距离“闭环网络”,也称之为“高速CAN”的接线方式。它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个“120 欧”的电阻。两端的R电阻是为了避免信号的反射和干扰。

2.1.2 开环网络

上图是遵循 ISO11519-2 标准的低速、远距离“开环网络”,也称之为“低速CAN”的接线方式。它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻。

2.2 收发流程

2.2.1 发送

发送数据时CPU将信号发给CAN Controller,CAN Controller再将信号转为逻辑电平(逻辑0表示低电平,逻辑1表示高电平)发给CAN Transceiver,CAN Transceiver再将逻辑电平转为差分信号发到CAN总线上。 

差分情况如下:静态情况下CAN-High和CAN-Low两条信号线的电压都处于2.5V;逻辑0表示显性电平,即CAN-High拉高到3.5V,CAN-Low拉低到1.5V;逻辑1表示隐性电平,即CAN-High和CAN-Low都是2.5V。

2.2.2 接收 

差分信号的0/1表示不变,只是把上述过程逆向而已。

三. CAN BUS访问与仲裁

3.1 “线与”机制

1. “0”表示显性,“1”表示隐性,在&操作中,但凡有0则CAN-Bus即为0,也称之为“显性”位可以覆盖“隐性”位;

2. 只有所有节点都发送“隐性”位, 总线才处于“隐性” 状态。

上述1,2即为“线与”机制的特点,这些特点使CAN总线呈现显性优先的特性。显性优先的特点奠定了后面所提到的“ID越小,优先级越高”。例如ID为0x75(1110101)就比0x100(1111000)的优先级更高,因为从左往右比较,0为显性。

3.2 仲裁机制

CAN总线的仲裁是一种“非破坏性仲裁机制”。非破坏性仲裁机制是一种既不会造成已发送数据的延迟,也不会破坏已经发送的数据的仲裁机制。

CAN总线的仲裁的原则:

1. 在总线空闲状态下,任意节点都可以向总线上发送信息。最先向总线发送信息的节点获得总线的发送权。

2. 当多个节点同时向总线发送消息时,优先级高的节点仲裁成功,从而获得总线的发送权;仲裁失败的节点,会在下次总线空闲时自动重发ID越小,优先级越高

3. 高优先级的节点不能中断低优先级节点的发送。例如ID-75的节点正在向总线发送报文,这时候ID-25的节点也想向总线发送报文,即使ID为25的优先级更高,但是也不能中断ID为75的报文的发送。

在 t1 时刻节点 A、B、C 同时向 CAN 总线上发数据触发总线仲裁,节点 A 的 ID 为75,优先级最高,所以节点 A 发送数据;等到 t2 时刻总线空闲了,再来仲裁节点 B 和节点 C ,节点 B 优先级更高,获得发送权...依次类推。

ID为20和ID为80的报文不能中断ID为100的报文发送 ,只能等到总线空闲后再来仲裁ID-20和ID-80的报文发送。

通过上图进一步来说明发送节点是如何获取到发送权的。节点在发送数据的同时还会回读总线的状态,在第10-6位比对中,A/B/C都是相同的电平信号;当到第5位的时候,通过“线与”机制可知,此时总线也是0,这时候 A 发现读出来的总线电平状态和自己的不一样,因此 A 就变为监听状态,丧失总线发送权;同理, B 和 C 继续比对到 RTR 位,节点 B 这时候读到的总线状态和自己不一样,因此节点 B 这时候也变为监听状态。最终节点 C 获取到总线的发送权。

REF

https://www.eet-china.com/mp/a211601.html

CAN_C: CAN学习模块 | Vector E-Learning

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值