目录
一. 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