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适合单主机场景,因为没有总线仲裁功能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2016-10-15 儿童手环(2017年3月22日结束)