【CAN总线】手把手教你学习CAN总线(一)

简介: 【CAN总线】手把手教你学习CAN总线(一)

一、CAN总线概念

CAN(Controller Area Network):控制器局域网网络,由德国博世汽车电子厂商开发出来。

  • CAN使用差分信号,具有较强的抗干扰能力和传输稳定性。
  • CAN属于多主通信,网络中所有的节点都可以作为主设备进行通信。
  • CAN的网络扩展极其方便,CAN网络中扩展了新的通信单元,网络中旧的单元和硬件无需任何改变
  • CAN具有较强的纠错能力,可以发现传输中出现的错误,并对错误节点进行隔离。

二、CAN的差分信号

模分信号是使用电平的绝对值来表示逻辑的差别。差分信号是使用两个电平的差值来表示逻辑值。

CAN传输使用两根数据线——CANH和CANL

高速ISO11898标准:


如果CANH(3.5V)和CANL(1.5V)的电压差 = 2V,此时表示逻辑0,叫做显性电平。

如果CANH(2.5V)和CANL(2.5V)的电压差 = 0V,此时表示逻辑1,叫做隐性电平。

三、CAN总线的通信协议

CAN使用5种通信帧,以数据帧为例来介绍帧结构。

数据帧的分析:

标准数据帧和扩展数据帧

D——显性电平 R——隐形电平

数据帧由7个部分组成

1、 帧起始

表示数据帧开始的段,1位显性电平。

2、仲裁段

用来实现帧的优先级和帧的过滤。标准格式和扩展格式的仲裁段不同

(1)标准帧:

标准数据帧的仲裁段由11位ID和1位RTR位组成。RTR用来区分数据帧(显性电平)和遥控帧(隐性电平)。

(2)扩展帧:

扩展数据帧由29位ID、1位RTR、1位SRR和1位IDE组成,RTR用来区分数据帧(显性电平)和遥控帧(隐性电平),SRR用来代替标准帧中的RTR位,SRR是隐性电平,相同ID的标准帧的优先级高于扩展帧。

IDE用来区分标准帧(显性电平)还是扩展帧(隐性电平)

报文的优先级

由总线通过ID仲裁来判断,当总线上同时出现显性电平和隐性电平时,最终显示为显性电平。当多个节点同时竞争总线占有权时,谁先出现隐性电平,谁将失去总线占有权,转为接收状态。

3、控制段

r0、r1为保留位,默认为显性电平

4位DLC表示数据段的长度(0~8)

4、数据段

长度0~8字节,先发高位,再发地位。

5、CRC段

CRC错误校验,由15位CRC校验码和1位CRC界定符组成。

校验出了错误信息,可利用错误帧请求重发,重发次数可设定。

6、ACK段

由1位ACK槽和1位ACK界定符组成,发送发的ACK槽是隐性电平,接收方取人受到正确的数据后以显性电平应答。

7、帧结束

7位隐性电平

四、CAN的位时序

由于CAN是没有时钟线的,所以这个目的是为了保证每传输一位的数据的时间是固定的,不会由于时钟误差和传输延迟等原因造成不同位传输的时间不一致。

CAN传输1位由四段组成:同步段、传播段、相位缓冲段1、相位缓冲段2,1位结束后会使用再同步补偿宽度(SJW)进行再补偿。

这样设计的原因是让发送方和接收方的时序保持一致(消除误差)。

1、同步段(SS)

同步段用于实现时序的调整,完成显性/隐性电平的转换,也就是准备该位要发送的电平。

2、传播时间段(PTS)

用于吸收网络上的物理延迟,物理延迟包括发送的延迟,接收的延迟和信号传播的延迟。


3、相位缓冲段(PBS)

对于电平转换未被包含的部分进行补偿,同时和SJW一起补偿各单位的时钟误差,电平的读取在该段完成。

4、再同步补偿宽度(SJW)

补偿前面同步的误差(二次补偿)。

小结:接收方的采样一定在PBS1和PBS2之间,由于SS和PTS误差的变动,PBS的补偿也会随着误差的变化而变化。实现传输1位时间的固定,SJW对PBS的补偿进行二次补偿。

1位时间 = 8 ~ 25Tq

SS = 1Tq

PTS = 1 ~ 8Tq

PBS = 2 ~ 8Tq

SJW = 1 ~ 4Tq

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
CAN总线位时序的介绍
CAN总线利用CAN_H和CAN_L线的电位差传输数据,显性电平(0,2.5V差值)对应逻辑0,隐性电平(1,0V差值)对应逻辑1。由于NRZ无返回零通信方式,同步是个挑战,特别是距离远时。为解决同步问题,CAN总线采用硬件同步和再同步技术,位时序分为同步段、传播段、两个相位缓冲段,每个段由Tq时间量子构成,允许调整以确保多个单元间的同步采样。
759 0
|
监控 网络架构
CAN-TP传输协议详解
CAN-TP传输协议详解
CAN-TP传输协议详解
|
5月前
|
IDE 自动驾驶 Linux
深度解析 CAN 总线:从底层物理层到 SocketCAN 编程实战
CAN总线是工业通信的关键技术,以其高可靠性和实时性广泛应用于自动驾驶、轨道交通等领域。其核心技术包括差分信号传输(物理层)和非破坏性逐位仲裁机制(数据链路层),确保在极端环境下稳定工作。CAN协议支持标准帧(11位ID)和扩展帧(29位ID),并通过严密的错误检测(5种机制)和节点健康管理(TEC/REC计数器)实现自我修复。进阶的CAN FD技术提升了数据传输能力(64字节负载,5Mbps速率)。Linux环境下可通过SocketCAN实现CAN通信模拟。
1492 8
|
存储 缓存 IDE
CAN通信的基本原理与实现方法
CAN通信的基本原理与实现方法
3452 2
|
IDE 开发工具
【通信协议讲解】单片机基础重点通信协议解析与总结之CAN(四)
【通信协议讲解】单片机基础重点通信协议解析与总结之CAN(四)
850 1
|
网络架构
详解CAN总线:CAN协议分层结构及功能
CAN协议涵盖了 ISO 规定的 OSI 基本参照模型中的传输层、数据链路层及物理层如下表 所示
详解CAN总线:CAN协议分层结构及功能
|
IDE 开发工具 芯片
|
存储 缓存
[simulink] --- simulink模块(一)
[simulink] --- simulink模块
11568 0
|
算法 安全 架构师
浅浅瞅瞅RSA-PSS 算法
浅浅瞅瞅RSA-PSS 算法
1483 0
一文搞懂CAN总线协议帧格式
CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。