CAN、CAN FD

1、概念
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。在汽车和工业行业被广泛使用。
2、协议
CAN协议经过ISO标准化后有两个标准ISO11898标准和IS011519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准(闭环),而IS011519-2是针对通信速率为125Kbps以下的低速通信标准(开环)。
2.1CAN的组成:
CPU与控制器和收发器组成。这三个器件可分开也可以组合,例如CPU和控制器组合,外接一个收发器,也可以全部组合(组合指MCU内部集成)。在这里插入图片描述
需要注意的是:如果MCU内部已经集成了CAN控制器,外接CAN收发器,那集成在MCU内部的CAN控制器出来的信号为TTL信号,也就是TXD和RXD,与CAN收发器连接,CAN 收发器将TTL信号转化为差分信号,在CAN总线上传输。
2.2CAN bus:
CAN总线按照OSP1189标准,最大长度40m,最大传输速率为1Mbsp,总线两端配置一个120欧的电阻,作为阻抗匹配,减少回波反照。
在这里插入图片描述
3、数据传输原理
由于CAN通讯使用的是差分信号进行通讯,所以CAN通讯属于半双工的方式进行通讯。所以只需要两根线即可,CAN_HIGH和CAN_LOW

按照定义:

CAN_High - CAN_Low < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1",即高电平。

CAN_High - CAN_Low > 0.9V 时候为显性的,逻辑信号表现为"逻辑0",即低电平。
在这里插入图片描述
在没有数据发送或者发送数据0时,两条线的电平一样都为2.5V,两条线的电压差小于0.5V;当发送数据1时,CAN_High电压升高,CAN_Low电压降低,两条线电压差大于0.9V时,认为数据为逻辑0; 所以CAN使用的是差分信号,差分信号稳定性更好,因为即使环境问题导致CAN_High电压发送变化,则CAN_L也会发送同等变化,两者做差即可抵消由于这个环境引起的变化。
在这里插入图片描述
隐性、显性之间存在天然的优先级特性:显性(逻辑0)的优先级比隐性(逻辑1)高;该优先级的特性,可以用来进行多主机的仲裁;
在总线上显性电平具有优先权,只要有一个节点输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)

CAN收发器的作用:
CAN的收发器:CAN_Rx和CAN_Tx分别是从MCU中接出来的引脚,比如MCU要发送一个逻辑1,则只要将CAN_Tx设置为1,经过CAN收发器转换,CAN_High和CAN_Low 线上的电压均为 2.5v,即传到总线的电压差 Vh-Vl=0V,总线上的状态则就是逻辑1。同样,当CAN_High和CAN_Low 读取到 CAN总线电压分别3.5V和1.5V,即压差为2V,经过收发器转换,MCU则可通过CAN_Rx读取到信号0。
CAN通讯过程:
CAN空闲状态:
在CAN协议中,当总线上的上出现连续的11位隐性电平(两根线电压差小于0.5V),表示总线就处 于空闲状态。
每次发送数据前,节点都会监听总线的状态,如果总线状态为空闲时,它就会立即向总线上发送自己的数据,这个数据里不仅有数据,还有本身的ID信息或者其他的控制指令,应称为数据包(数据帧),也叫做报文。当报文被传输到其它节点时,只要这些节点按格式去解读,就能还原出原始数据。
CAN报文的组成:
在这里插入图片描述
数据帧是在 CAN 通讯中最主要、最复杂的报文,它以一个显性位(逻辑 0)开始,以 7 个连续的隐性位(逻辑 1)结束。在它们之间,分为仲裁段、控制段、数据段、CRC 段和 ACK 段,以标准数据帧为例
在这里插入图片描述
CAN数据帧标准格式

域段 域段名 位宽:bit 描述
帧起始 SOF(Start Of Frame) 1 数据帧起始标志,固定为1bit显性('b0)
仲裁段 Identify(ID) 11 本数据帧的 ID 信息, ID 信息的作用:① 如果同时有多个节点发送数据时,作为优先级依据(仲裁机制);② 目标节点通过 ID 信息来接受数据(验收滤波技术)
RTR Remote Transmission Request BIT 1 RTR标识是否是远程帧(0,数据帧;1,远程帧),在数据帧里这一位为显性('b0)
IDE Identifier Extension Bit 1 IDE用于区分标准格式与扩展格式,在标准格式中 IDE 位为显性(‘b0),在扩展格式里 IDE 位为隐性(’b1)
R0 保留位 1 1bit保留位,固定为1’b0
DLC data length 4 由 4 位组成,MSB 先行(高位先行),它的二进制编码用于表示本报文中的数据段含有多少个字节,DLC 段表示的数字为0到8,若接收方接收到 9~15 的时候并不认为是错误
数据段 data 0~64 据帧的核心内容,它由 0~8 个字节(0 ~ 64位)组成,MSB 先行
CRC段 CRC 15 段用于检查帧传输错误,发送方以一定的方法计算包括:帧起始、仲裁段、控制段、数据段;接收方以同样的算法计算 CRC 值并进行比较,如果不同则会向发送端反馈出错信息,重新发送;计算和出错处理一般由 CAN 控制器硬件完成或由软件控制最大重发数。
CRC界定符 1 CRC 界定符(用于分隔的位),为隐性位(1’b1),主要作用是把CRC 校验码与后面的 ACK 段间隔起来
ACK 槽 ACK slot 1 在 ACK 槽位中,发送端发送的为隐性位,而接收端则在这一位中发送显性位以示应答;发送 ACK/返回 ACK这个过程使用到回读机制,即发送方先在 ACK 槽发送隐性位后,回读到的总线上的电平为显性0,发送方才知道它发送成功了,不用重发
ACK界定符 1 在 ACK 槽和帧结束之间由 ACK 界定符间隔开,为隐性位
帧结束 EOF 1 由发送端发送 7 个隐性位表示结束

当接收方接收到发给自己的数据时,会首先CRC校验,如果校验通过,则会向总线发生显性电平,发送方收到显性电平后,会

### CAN FD (Controller Area Network Flexible Data-rate) 原理与应用 #### 一、CAN FD 的基本概念和发展背景 CAN FD 是一种增强型的汽车网络协议,旨在解决经典 CAN 总线带宽不足的问题。随着车辆电子控制单元数量增加以及数据传输需求的增长,传统的 CAN 协议已经难以满足现代汽车对于高速率和大数据量的需求。因此,在保留原有 CAN 特性的基础上进行了扩展,允许更高的比特率和更大的有效载荷长度。 #### 二、技术特点 - **灵活的数据速率**:不同于标准 CAN 只能在整个消息周期内保持固定的速度,CAN FD 支持在一个帧内部改变波特率的能力。这意味着可以在仲裁阶段采用较低速度以确保兼容性,而在数据传送部分则提高到更快速度从而加快整体通讯效率。 - **增大的最大负载大小**:相比于传统 CAN 报文中最多只能携带8字节的有效信息,CAN FD 将这一数值提升到了64字节,极大地提高了单次传输所能承载的信息量[^1]。 - **改进错误检测机制**:为了适应更高频率下的可靠运行,CAN FD 对原有的错误探测算法做了优化调整,引入了更强健的方法来保障信号质量不受干扰影响而丢失准确性[^2]。 #### 三、硬件要求和支持情况 由于涉及到新特性的实现,要使设备能够支持 CAN FD 功能,则必须配备相应的新型控制器及物理层器件。旧版本仅能解析常规类型的包结构;而对于那些具备更新能力的新一代产品来说,则既可以接收也可以发出符合最新规格的消息格式。 #### 四、实际应用场景举例 在智能交通系统中,比如高级驾驶辅助系统的传感器间通信就非常适合利用 CAN FD 来完成。因为这类场景往往涉及大量实时性强且精度高的传感数据交换工作,所以借助于该技术所提供的高效稳定的连接方式可以帮助构建更加安全可靠的车载环境监控体系。 ```python # Python 示例代码用于展示如何初始化一个基于 Linux SocketCAN 接口的 CAN FD 设备 import socket import struct def setup_canfd_interface(interface_name='can0'): s = socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) try: # 设置套接字选项启用 CAN FD 模式 s.setsockopt(socket.SOL_CAN_RAW, socket.CAN_RAW_FD_FRAMES, 1) # 绑定接口名称至套接字对象上 s.bind((interface_name,)) print(f"Successfully set up {interface_name} as a CAN FD interface.") except Exception as e: print(e) raise setup_canfd_interface() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值