CAN 总线介绍

简介

高速CAN(经典CAN):ISO11898

低速CAN:ISO11519

CAN FD:兼容经典CAN 

使用场景

 多主机场景,每个设备都可以主动发送数据

物理层

CAN收发器的功能是将CAN控制器的TTL信号转换成CAN总线的差分信号

和单片机连接的接收引脚的信号表示总线当前的信号,主要两个目的:

A.监测其它节点发送出来的信号:别人给它发送数据;

B.监测自身节点发送出去的信号:自己发送是否失败。比如自己发送一个隐形信号,结果监测出来是显性信号,那就说明是别人在发送数据。

 

 

这里说的显性和隐性信号,指的是总线传输的bit位信号。当总线两者信号都有时,总线表现出来的就是显性信号,因为CAN总线空闲表现为隐性状态

 

电压的大小根据芯片型号而定,一般常见的CAN收发芯片有3.3V和5V两种芯片。

如上图,为5V CAN收发芯片,在逻辑0和逻辑1时电压情况:

逻辑0时:显性,CAN_H=3.5V,CAN_L=1.5V;

逻辑1时:隐性,CAN_H=2.5V,CAN_L=2.5V;

 

帧格式

can 总线规定了数据在物理层上传输的帧格式

识别码:表示这个数据帧是发送给哪个设备

RTR位:为0表示数据帧,为1表示远程请求帧(无数据码)

IDE位:规定识别码的位数,为0表示识别码占11位(标准数据帧),为1表示识别码占29位(扩展数据帧)

DLC位:表示数据码字节数 

ACK确认位:CRC界定位后的一位,为1表示发送端发送的数据帧,为0表示接收端的应答

ACK界定位:ACK确认位后的一位,固定为1

最后7位:都是1,表示数据帧传输结束

SRR:等同于标准帧的RTR,所以扩展帧有两个RTR,功能一样

r0:空闲位(保留位)

 

两个CAN设备同时向总线发送数据帧,以哪个数据帧为准呢

识别码不仅是CAN设备ID,也表示设备的优先级。当总线同时出现逻辑0和逻辑1的时候,总线会被置为逻辑0,此后试图置总线为逻辑1的设备不再发送数据

 

CAN 位时序

规定了一位数据的哪个时刻读取电平

图有误:是PBS,非PSB

 

 

CAN 工作模式

正常模式

静默模式

回环模式

回环静默模式

CAN和485的差别

CAN通信和485通信一样,属于半双工。

总线利用率

CAN收发器工作原理与485具有较大差异。从上面的差分信号可以看得出来,两种信号同时存在,只有显性信号有效,隐形信号不会影响总线传输。简单来说就是CAN总线具有自动仲裁功能,这样就提高了总线的利用率。

RS485总线是一种常规的通信总线,它不能够做总线的自动仲裁,也就是不能够同时发送数据以避免总线竞争,所以整个系统的通信效率必然较低。

当然,CAN相比485具有明显优势,主要原因还是在于CAN控制器。

可以不使用CAN收发器吗?

UART可以直接通过TX连接对方的RX引脚,利用TTL信号进行通信,那么CAN也可以吗?

答案:单向传输可以,双向传输就不行。 原因很简单,CAN控制器会实时监测发送出去的信号是否正确。也就是说TX要与RX信号一致才行,否则CAN控制器认为你发送失败。所以发送端需要把TX和RX短接,然后接到接收端的RX,进行单项传输。

使用场景

CAN适合多主机场景,每个设备都可以主动发送数据。485适合单主机场景,因为没有总线仲裁功能。

 

posted @   流水灯  阅读(420)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2016-10-15 儿童手环(2017年3月22日结束)
点击右上角即可分享
微信分享提示