当前位置: 首页 > news >正文

25-CAN总线

一、什么是CAN总线?(理解CAN重点)

CAN总线(Controller Area Network Bus)控制器局域网总线

CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域

注意:

  • CAN 协议:在汽车和工业领域几乎不可替代,因其高可靠性和实时性,常用于刹车系统、发动机控制等关键场景。

CAN总线特征:

两根通信线(CAN_H、CAN_L),线路少,无需共地

差分信号通信(两线决定一位数据),抗干扰能力强,差分信号线一般使用双绞线

高速CAN(ISO11898):125k~1Mbps, 低速CAN(ISO11519):10k~125kbps,

异步,无需时钟线,通信速率由设备各自约定

半双工,可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序

11位/29位报文ID,用于区分消息功能,同时决定优先级

可配置1~8字节的有效载荷(有效长度)

可实现广播式请求式两种传输方式

应答、CRC校验、位填充、位同步、错误处理等特性

二、主流通信协议对比(重点)

应用场景:

USART:调试串口、蓝牙模块、GPS 模块。

I2C:传感器、EEPROM()、低速多设备通信。

SPI:高速设备(如 Flash、显示屏、ADC/DAC)。

CAN:汽车电子(ECU 通信)、工业控制(PLC)、机器人。

接线图:

USART

IIC:

SPI:

SS1 SS2 SS3:使能端

三、CAN物理层

1、CAN硬件电路

每个设备通过CAN收发器挂载在CAN总线网络上

CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连

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

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

控制器:

CAN控制器在芯片内部,收发器一般是芯片外一个电路模块。

收发器:

CAN收发器(是MCU外的一个芯片)的作用:实现电平转转换、输出驱动和输入采样

有四个引脚:TX、RX、CAN_H、CAN_L

高速CAN有120Ω的终端电阻主要有2个作用:

1、防止回波反射

2、在没有设备操作时,将2根差分线的电压收紧,也就是使其电压一致

2、CAN电平标准(重点)

CAN总线采用差分信号,即两线电压差(VCAN_H、VCAN_L)传输数据位(下图可见)

高速CAN规定:

电压差为0V时表示逻辑1(隐性电平)

电压差为2V时表示逻辑0(显性电平)

低速CAN规定:

电压差为-1.5V时表示逻辑1(隐性电平)

电压差为3V时表示逻辑0(显性电平)

四、帧格式(重点)

1、CAN总线帧格式

CAN协议规定了以下5种类型的帧:(重要的是数据帧和遥控帧)

2、数据帧

数据帧分为标准帧与扩展帧,标准帧与扩展帧区别在于报文ID长度不同,标准帧为11位,扩展帧为:29位

注意点:

数据帧有标准格式和扩展格式两种,CAN总线刚制定时,只有标准格式,扩展格式是后来新增的,扩展格式增加了ID位数,能承载更多种类的ID。

标准格式分析:

在发送数据帧之前,总线必须处于空闲状态,空闲状态时,总线是隐性电平(逻辑电平表示为高电平1)

SOF(帧起始):

低电平,显性电平0 作用:打破总线空闲,开始一帧数据,并告诉接收方,后续若发送隐性1,即是发送过去的1。

报文ID:

1、表示后面数据的功能

2、区分优先级:多个设备同时发送时,根据仲裁规则,ID小的报文优先发送,ID大的报文等待下一次总线空闲再重试发送

3、标准帧ID为11位,扩展帧ID为29位。

RTR(远程请求标志位):

用于区分数据帧或遥控帧(数据帧为显性0,遥控帧为隐性1)

报文ID+RTR位称为仲裁段

IDE(ID扩展标志位):(在没有扩展帧之前是r1保留位)

用于区分标准格式还是扩展格式,标准格式为显性0,扩展格式为隐性1

r0:保留位(未用到)

DLC(数据段长度):即上面所说的有效长度

发送1个字节:0001 为显显显隐 (数据段为1字节)

发送8个字节:1000 为隐显显显 (数据段为8字节)

Data:有效载荷(一帧携带的数据)

数据长度为1~8字节

CRC(校验算法):

对数据位进行CRC算法计算 (SOF–Data),得出的校验码赋给CRC校验位,接收方接收到数据和校验码后,也会调用CRC算法进行计算,看看计算的校验码是否一致,以判断传输是否有误

CRC界定符:1位,必须是隐性电平(这里的CRC界定符和下面的ACK界定符都可以理解为CRC校验和ACK应答的延时作用

ACK槽:做应答

发送方发送完一帧数据后,在应答这一位,发送方释放总线,总线回归默认状态(隐性1),如果接收方收到数据,在ACK槽这一位,把总线拉开,使总线呈现显性0的状态,发送方释放总线后,在ACK槽会读取总线状态,如果发送方读取为显性0,说明有接收方正确接收数据,若为隐性1 ,说明发送失败,发送方可以配置自动重发,也可以什么都不做,总之发送方知道发送状态就行。

ACK界定符:

*(ACK槽设计和ACK界定符,CRC界定符的用途)*总结:发送方发隐性1,若接收方存在,则接收方要发显性0,若不存在,无显性0,在ACK槽这一位前后,操作总线权力有短暂交换,前面所有波形,只有发送方有权操做总线,在ACK槽这一位时,变为接收方操作总线,为了给权力交接留出时间,ACK槽前后留了两个界定符,在CRC界定符时,发送方必须发隐性1,作用1是做分隔,作用2是在ACK槽之前,发送方必须释放总线(发送隐性1为释放总线),之后再ACK槽的时间点,接收方会拉开总线, ACK槽接收后,也需要释放总线,所有再ACK界定符时,接收方必须及时释放总线,交出控制权。

EOF(帧结束):

应答结束后,发送方发7个隐性1

小结:设计一个波形承载数据,需要有数据段,又需要数据段的字节是可调的,就加了DLC,用于指定数据段的长度,为了区分这个数据的功能,需要加上ID号,为了实现广播式,类似于只写,或者是请求式,类似于读取,用RTR位进行区分,为了判断书是否正确传输,加上了CRC校验,为了判断是否有接收方,加了应答设计,r0,r1留的保留位,为了后续升级使用,最后整个波形,加上起始和结束就完成了

3、数据帧各部分用途简介

SOF(Start of Frame):帧起始,表示后面一段波形为传输的数据位

ID(Identify):标识符,区分功能,同时决定优先级

RTR(Remote Transmission Request ):远程请求位,区分数据帧和遥控帧

IDE(Identifier Extension):扩展标志位,区分标准格式和扩展格式

SRR(Substitute Remote Request):替代RTR,协议升级时留下的无意义位

这一位只有扩展格式有,为了保证仲裁优先级规则,这一位必须给隐性1

r0/r1(Reserve):保留位,为后续协议升级留下空间

DLC(Data Length Code):数据长度,指示数据段有几个字节(值范围:0001~1000)

Data:数据段的1~8个字节有效数据

CRC(Cyclic Redundancy Check):循环冗余校验,校验数据是否正确

ACK(Acknowledgement):应答位,判断数据有没有被接收方接收

CRC/ACK界定符:为应答位前后发送方和接收方释放总线留下时间

EOF(End of Frame ):帧结束,表示数据位已经传输完毕

4、数据帧的发展历史

CAN 1.2时期,仅存在标准格式,IDE位当时仍为保留位r1

CAN 2.0时期,ID不够用,出现了扩展格式,增加了ID的位数,为了区分标准格式与扩展格式,协议将标准格式中的r1赋予了新功能—IDE

5、遥控帧

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

6、其他帧(错误帧,过载帧,帧间隔)--自行了解

7、位填充

数据帧和遥控帧在发送到总线之前,要经过位填充的处理

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

例如:

即将发送: [100000110] [10000011110] [0111111111110]=

实际发送: [1000001110] [1000001111100] [011111011111010]

实际接收: [1000001110] [1000001111100] [011111011111010]

移除填充后: [100000110] [10000011110] [0111111111110]

位填充作用:(防止数据波形长时间不变化)

8、波形实例

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

 

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

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

后面还有内容,明天补

相关文章:

  • Python60日基础学习打卡D31
  • 集星獭 | 重塑集成体验:新版编排重构仿真电商订单数据入库
  • 火车车号识别软件如何提升列车调度效率?
  • Redis--Redis命令详解
  • 自建主机NAS
  • 腾讯一面+二面总结
  • beanstalk一直被重新保留(reserved 状态)消息删除
  • 轴承表面缺陷检测数据集VOC+YOLO格式3945张3类别
  • 使用winRM远程访问Windows系统,并执行指定命令,或调用执行指定bat文件
  • 【jzxxoj编程:4420: 寻找自我3】2022-1-30
  • 嵌入式开发学习日志(linux系统编程--文件读写函数)Day24
  • spdlog高性能日志库
  • c语言刷题之实际问题
  • HTML页面渲染过程
  • VMD查看蛋白质-配体的分子动力学模拟轨迹
  • Oracle如何解决LATCH:CACHE BUFFERS CHAINS
  • 阿里云服务器Ubuntu的git clone失败问题解决方案
  • 什么是防抖和节流?有什么区别?如何实现?
  • 新闻媒体发稿:社会实践返家乡主题如何选择
  • jvm对象压缩
  • 翻越高山,成为高山!浙江广厦成CBA历史第八支夺冠球队
  • 山西持续高温:阳城地表温度72.9℃破纪录,明日局部地区仍将超40℃
  • 上海电视节发布海报、宣传片:三十而励,光影新程
  • IPO周报|本周2只新股申购,比亚迪、上汽“小伙伴”来了
  • 上海青少年书法学习园开园:少年以巨笔书写《祖国万岁》
  • 陶石不语,玉见文明:临平玉架山考古博物馆明日开馆