CAN 总线学习笔记

本篇文章就是一个自己的小笔记,后续会慢慢修改

笔记来源https://www.bilibili.com/video/BV1vu4m1F7Gt/?spm_id_from=333.999.0.0

目录

1.什么是can总线

1.1特点

1.2区别

扩展

2.can总线的硬件电路

2.1硬件电路

2.2电平标准

2.3CAN收发器

2.4 CAN物理层特性

3. can总线的帧格式

3.1 数据帧

3.1.1 帧起始

3.1.2 仲裁段

3.1.3 控制段

3.1.4 数据段

3.1.5 CRC段

3.1.6 ACK段

3.1.7 帧结束

3.1.8 总结

3.2 遥控帧

3.3 错误帧

3.4 过载帧

3.5 帧间隔

3.6 位填充

3.7 波形实例

4.can总线接收方的采样

4.1 位时序

4.2 硬同步

4.3 再同步

4.4 波特率计算

5.can总线多设备发送遇到的问题

5.1 规则1-先占先得

5.2 规则2- 非破坏性仲裁

5.3 非破坏性仲裁过程

6.can总线的错误处理

6.1 错误类型

6.2 错误状态

6.3 错误计时器


1.什么是can总线

can总线是一种简洁易用,传输快,易扩展,可靠性高的串行通讯总线,广泛用于汽车、嵌入式、工业控制等领域。

1.1特点

差分信号通讯、(CAN_H、CAN_L)、抗干扰能力、强线路少,无需共地
高速CAN(ISO11898):125k~1Mbps, <40m
低速CAN(ISO11519):10k~125kbps, <1km
异步、无需时钟线、通讯速率由各自设备决定
半双工、可挂载多设备,同时发送数据、通过仲裁判断先后顺序
11位/29位报文ID,用于区分消息功能,决定优先级
可配置1~8字节有效载荷
可实现广播式和请求式两种传输方式
有应答、CRC校验、位填充、位同步、错误处理等特性

1.2区别

名称引脚双工时钟电平设备应用场景
CANCAN_H、CAN_L半双工异步差分多设备多主互通
UARTTX、RX全双工异步单端点对点两设备互相通讯
SPISS、SCK、MOSI、MISO全双工同步单端多设备一主多从
I2CSCL、SDA半双工同步单端多设备一主多从

UART原理图

d548e1bf4b6f47b3a97efef2545fea97.png

I2C原理图

ac0803dc3c4f482ba04a85555cb4b9cc.png

SPI原理图

cbb44ddf2d72472192c2a3e494f9ebda.png

扩展

串行通讯特点
单工数据只能单向传输
半双工数据可以双向传输但不能同时
全双工数据可以同时双向传输
时钟特点
异步无需时钟线、通讯速率由各自设备决定
同步有时钟线、按照同一个时钟节拍工作
电平特点
单端用一个线传输,是信号线和地的电势差,抗干扰性弱
差分两个线传输,一方变化另外一方也会变化,抗干扰信号强

2.can总线的硬件电路

2.1硬件电路

每个设备要通过CAN收发器挂载在CAN总线上,CAN控制器引出的引脚TX、RX要和CAN收发器相连,而CAN收发器引出的CAN_H和CAN_L分别和总线的CAN_H和CAN_L相连

高速CAN使用的是闭环线路,CAN_H和CAN_L两端添加120Ω的终端电阻

cac45d98b2064947ab8b0062af5dcd62.png

低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻

ebea15f78aa0426ba04f05bd529a8bde.png

2.2电平标准

CAN总线采用差分信号,即两线电压差(VCAN_H-VCAN_L)传输数据位 高速CAN规定: 电压差为0V时表示逻辑1(隐性电平) 电压差为2V时表示逻辑0(显性电平)

低速CAN规定: 电压差为-1.5V时表示逻辑1(隐性电平) 电压差为3V时表示逻辑0(显性电平)

cccb100464f04256974c963976064a2b.png

注意:

在低速CAN中隐性电平中电压不相等(因为长久传输可以会出现压降,所以把1和0的电平电压差距加大),所以在电路中总线两端不能闭合在一起。

同理在高速中的隐性电平两端电压相等,所以在电路中总线闭合电阻有利于总线快速回归隐性电平。回归快所以传输就快

2.3CAN收发器

2.4 CAN物理层特性

fccde5e6f5e548aeb70b07333c613398.png

3. can总线的帧格式

CAN协议规定了以下5种类型的帧

帧类型用途
数据帧发送设备主动发送数据(广播式)
遥控帧接收设备主动请求数据(请求式)
错误帧某个设备检测出错误时向其他设备通知错误
过载帧接收设备通知其尚未做好接收准备
帧间隔用于将数据帧及遥控帧与前面的帧分离开

3.1 数据帧

1075e10255fe4ac69dd1d49a5b2fd3b1.png

3.1.1 帧起始

一个数据位,是为显性0电平,通知各个节点有数据传输,其他节点通过帧起始信号的电平跳变沿来进行硬同步。

3.1.2 仲裁段

*仲裁段包括:报文ID和RTR组成/SRR。RTR是远程请求位/SRR,协议升级留下的无意义位。*

RTR:数据帧为显性0

选择帧为隐形1。

报文ID:标准格式为11位,

扩展格式为29位。

仲裁通过ID来确定的。在物理层上,当总线上发同时出现显性电平和隐形电平,总线的状态会被置为显性电平。所以当两个节点同时竞争CAN总线时,若首先出现隐形电平,就会进入接收状态,里一个继续发送

1e13c028df7f40a0b15eec769362c834.png

仲裁段ID的优先级也影响着接收设备对报文的反应。因为在CAN总线上数据是以广播的形式发送的,所有连接在CAN总线的节点都会收到所有其它节点发出的有效数据,因而我们的CAN控制器大多具有根据ID过滤报文的功能,它可以控制自己只接收某些ID的报文。

3.1.3 控制段

控制段包括:IDE、r0和DLC

IDE:标识符扩展位,用于区分标准格式(显性电平位)和扩展格式(隐性电平)。

DLC: 数据长度码,表示本报文数据段多少字节,4位数据位,表示对数字为0~8。

r0: 保留位,默认显性电平。

3.1.4 数据段

数据段为数据帧核心内容,是节点要发送的原始信息,由0~8个字节组成,MSB先行。

3.1.5 CRC段

CRC段包括:CRC校验码和CRC界定符。

CRC校验码:保证报文正确传输,当接收节点算出的CRC码(从SOF到DATA这些数据位)和接收到的CRC码不同,就会向发送节点反馈出错信息,利用错误帧请求重写发送。

CRC界定符: 把CRC校验码和ACK间隔起来,隐性位1。

3.1.6 ACK段

ACK段包括:ACK槽和ACK界定符。

ACK槽:类似I2C总线,发送节点位隐性位,接收节点位显性位。

ACK界定符:把ACK槽和帧结束间隔起来,隐性位1。

3.1.7 帧结束

译为帧结束,帧结束段由发送节点发送的7个隐性位 表示结束。

3.1.8 总结

名称功能
SOF帧起始,表示后面一段波形为传输的数据位
ID标识符,区分功能,同时决定优先级
RTR远程请求位,区分数据帧和遥控帧
IDE扩展标志位,区分标准格式和扩展格式
SRR替代RTR,协议升级时留下的无意义位
r0/r1保留位,为后续协议升级留下空间
DLC数据长度,指示数据段有几个字节
Data:数据段的1~8个字节有效数据
CRC循环冗余校验,校验数据是否正确
ACK应答位,判断数据有没有被接收方接收
界定符为应答位前后发送方和接收方释放总线留下时间
EOF帧结束,表示数据位已经传输完毕

3.2 遥控帧

遥控帧无数据段,RTR为隐形电平1,其他部分和数据帧相同

31c84a3aa37c4ab4a9bb37c166a1d9b3.png

3.3 错误帧

总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备

e8190fda748c464db4e9c968b3f7707e.png

3.4 过载帧

当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失

65265ceb7d2945e2a4f6a6b0de07be1c.png

3.5 帧间隔

将数据帧和远程帧与前面的帧分离开

6cf2eca160fb418394957912f74484e0.png

3.6 位填充

位填充规则:发送方每发送5个相同电平后,自动追加一个相反电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原始数据

例如:

即将发送100000110100000111100111111111110
实际发送10000011101000001111100011111011111010
实际接收10000011101000001111100011111011111010
移除填充后100000110  10000011110       0111111111110

位填充作用:

  1. 增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握数据采样时机 。
  2. 正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性 。
  3. 保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲(当can总线有11个隐性1则为空闲)。

3.7 波形实例

标准数据帧,报文ID为0x555,数据长度1字节,数据内容为0xAA

a953bdfb04364af9a61192ddbb744ea0.png

标准数据帧,报文ID为0x666,数据长度2字节,数据内容为0x12, 0x34

09b3c72c33164b92887df207931904b1.png

扩展数据帧,报文ID为0x0789ABCD,数据长度1字节,数据内容为0x56

5b67badbd76d4523b01bd8df05189e33.png

*标准遥控帧,报文ID为0x088,数据长度1字节,无数据内容**

ad269d724d73457da0f5ca5bee02af78.png

4.can总线接收方的采样

4.1 位时序

为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)传播时间段(PTS)相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成

3674362067f34c1c9bf886490344eb62.png

4.2 硬同步

每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到SOF的下降沿时接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步 硬同步只在帧的第一个下降沿(SOF下降沿)有效 经过硬同步后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近。

但是不能每个数据跳变沿执行硬同步,因为数据波形抖动时,接收方秒表周期反复调整多次,这样数据就会出错

f6070b481cb049cf8f870c09aa320b03.png

例子:接收方以约定的位时长进行采样,但是采样点没有对齐数据位中心附近

9c749b545ba04136a1b2358d2359dd6a.png

4.3 再同步

若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据再同步补偿宽度值(SJW)通过加长PBS1段,或缩短PBS2段,以调整同步 再同步可以发生在第一个下降沿之后的每个数据位跳变边沿 SJW=1~4Tq

7479957437d344078e4e0e1bb38fbf50.png

例子:接收方刚开始采样正确,但是时钟有误差,随着误差积累,采样点逐渐偏离

31792e0b1c204186bfde2519e9953187.png

4.4 波特率计算

波特率 = 1 / 一个数据位的时长 = 1 / (TSS + TPTS + TPBS1 + TPBS2) 例如: SS = 1Tq,PTS = 3Tq,PBS1 = 3Tq,PBS2 = 3Tq Tq = 0.5us 波特率 = 1 / (0.5us + 1.5us + 1.5us + 1.5us) = 200kbps

f43d3748dfa243df92342648d2253224.png

例子:如果CAN通讯速率位125kbps那 SS PTS PBS1 PBS2 Tq 怎么设置。

1/x=125 kbps、x=8 us、Tq=0.8 us、SS=0.8us、PTS=2.4us 、PBS1=2.4us 、PBS2=2.4us

5.can总线多设备发送遇到的问题

CAN总线只有一对差分信号线,同一时间只能有一个设备操作总线发送数据,若多个设备同时有发送需求,该如何分配总线资源?

f0bebfa59a0449efab853990d4cffa4e.png

5.1 规则1-先占先得

  1. 若当前已经有设备正在操作总线发送数据帧/遥控帧,则其他任何设备不能再同时发送数据帧/遥控帧(可以发送错误帧/过载帧破坏当前数据)

  2. 任何设备检测到连续11个隐性电平,即认为总线空闲,只有在总线空闲时,设备才能发送数据帧/遥控帧

  3. 一旦有设备正在发送数据帧/遥控帧,总线就会变为活跃状态,必然不会出现连续11个隐性电平,其他设备自然也不会破坏当前发送

  4. 若总线活跃状态其他设备有发送需求,则需要等待总线变为空闲,才能执行发送需求

5.2 规则2- 非破坏性仲裁

多个设备的发送需求同时到来或因等待而同时到来,则CAN总线协议会根据ID号(仲裁段)进行非破坏性仲裁,ID号小的(优先级高)取到总线控制权ID号大的(优先级低)仲裁失利后将转入接收状态,等待下一次总线空闲时再尝试发送。 ​ 实现非破坏性仲裁需要两个要求:

  1. 线与特性:总线上任何一个设备发送显性电平0时,总线就会呈现显性电平0状态,只有当所有设备都发送隐性电平1时,总线才呈现隐性电平1状态,即:0 & X & X = 0,1 & 1 & 1 = 1

  2. 回读机制:每个设备发出一个数据位后,都会读回总线当前的电平状态,以确认自己发出的电平是否被真实的发送出去了,根据线与特性,发出0读回必然是0,发出1读回不一定是1

5.3 非破坏性仲裁过程

数据位从前到后依次比较,出现差异且数据位为1的设备仲裁失利

69d72f7c52d0493e999f8cde5230e7c0.png

6.can总线的错误处理

6.1 错误类型

错误共有5种: 位错误、填充错误、CRC错误、格式错误、应答错误

bc95fecf5d4441bd9704a5ac568631fc.png

当发送和接收单元检测到上面的错误时,就会发送错误帧破坏总线数据。但是!!! ,如果一个设备自己出现问题,他认为收到的全是错误信息,就去一直破坏总线传输的信息,所以为了避免这种情况就出现了一个错误状态的处理。

6.2 错误状态

每个设备内部管理一个TEC和REC,根据TEC(发送)和REC(接收)的值确定自己的状态 主动错误状态的设备正常参与通信并在检测到错误时发出主动错误标志 被动错误状态的设备正常参与通信但检测到错误时只能发出被动错误标志 总线关闭状态的设备不能参与通信

e4d6f65142114ec283d23734d987fba7.png

但是在总线关闭态时,这时在总线检测到128次连续11个位的隐性位时,就会回到主动错误状态,TEC和REC清0。

6.3 错误计时器

ba37c7f864994c749b6c4fe0f111f870.png

  • 28
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值