Lazy loaded image
📘CAN总线学习笔记
字数 3292阅读时长 9 分钟
2025-3-1
2026-9-15
 
😀
这里写文章的前言: 江协科技,Can总线学习

CAN简介&硬件电路

一、CAN简介

CAN 总线(Controller Area Network Bus)即控制器局域网总线 是由 BOSCH 公司开发的一种串行通信总线,具有简洁易用、传输速度快、易扩展、可靠性高等特点,广泛应用于汽车、嵌入式、工业控制等领域。
其具体特征如下:
  1. 物理线路:采用(CAN_H、CAN_L)两根通信线,线路较少,且无需共地,使用差分信号进行通信,抗干扰能力强。
  1. 通信速率与传输距离: 高速 CAN(ISO11898):通信速率在 125k~1Mbps 之间,传输距离小于 40 米。 低速 CAN(ISO11519):通信速率在 10k~125kbps 之间,传输距离小于 1 千米。
  1. 通信方式: 异步通信,无需时钟线,通信速率由设备各自约定。 半双工模式,可挂载多个设备。当多设备同时发送数据时,通过仲裁判断发送的先后顺序。
  1. 报文 ID:具备 11 位或 29 位报文 ID,用于区分消息功能,同时也决定了消息的优先级。
  1. 有效载荷:可配置 1 至 8 字节的有效载荷。
  1. 传输方式:可实现广播式和请求式两种传输方式。
  1. 其他特性:具备应答、CRC 校验、位填充、位同步、错误处理等特性 。

二、主流通信协议对比

名称
引脚
双工
时钟
电平
设备
应用场景
UART
TX、RX
全双工
异步
单端
点对点
两个设备互相通信
I2C
SCL、SDA
半双工
同步
单端
多设备
一个主控外挂多个模块
SPI
SCK、MOSI、MISO、SS
全双工
同步
单端
多设备
一个主控外挂多个模块(高速)
CAN
CAN_H、CAN_L
半双工
异步
差分
多设备
多个主控互相通信

三、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硬件电路图

notion image
  • 高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻 终端电阻的作用主要有两个: 1. 防止回波反射(用于处理高频信号远距离传输时 信号在终端反射,干扰原始信号) 2. 在没有设备操作时,将两个差分线的电压“收紧”, 使其电压一致。(在没有设备操作时,这个电阻会把两个差分线的电压拉到同一水平,也就是代表默认的‘1’状态) (类似于I2C的上拉电阻)
  • CAN控制器:比如STM32等
  • CAN收发器:一颗芯片,主要实现电平转换、输出驱动和输入采样的功能
  • CAN控制器的TX和CAN收发器的TX相连、RX与CAN收发器的RX相连,无需交叉

低速CAN硬件电路图

notion image
  • 这里的两颗2.2K的电阻,知识一端接到CAN总线上, 另一端是悬空的,这里也是用于防止回波反射。但是具体多大作用就不知道了~

四、CAN电平标准

CAN 总线采用差分信号,即通过两线电压差(V_CAN_H 减 V_CAN_L)传输数据位
  • 高速 CAN 规定: 电压差为 0V 时表示逻辑 1(隐性电平) 电压差为 2V 时表示逻辑 0(显性电平)
  • 低速 CAN 规定: 电压差为 - 1.5V 时表示逻辑 1(隐性电平) 电压差为 3V 时表示逻辑 0(显性电平)
notion image
两线“收紧”是默认状态,表示逻辑1, 所以叫隐性。 两线“张开”产生电压差,表示逻辑0,所以叫显性。
高速CAN和低速CAN的电压不一样哦。低速CAN是考虑传输速度更远,所以把电压的1和0的电压差距加大了
 
在日常中,有事也用逻辑电平来表示CAN的时序,但是要明白的是 实际的电路中 是通过差分电平来判断此时是隐性电平1 还是 显性电平0。 ”CAN的差分电平就像南通的腿,张开是0, 闭合就是1“

五、CAN收发器-TJA1050(高速CAN)

notion image
  • GND、VCC提供5V供电
  • TXD、RXD与CAN控制器相连
  • CAN_H、CAN_L与CAN总线相连
  • Vref 是参考电压输出,可以不用。
  • S 是选择高速模式还是静默模式,(理解成开关)

输入部分原理详解

notion image
  • RECEIVER 用于比较CAN_H与CAN_L的电压差, 当有电压差是输出1, 没电压差输出0.
  • 两个 MOSFET管 上管为Pmos,下管为Nmos 当RECEIVER输出1时,上管断开,下管导通,RXD与GND相连 ,输出 显性电平 ‘0’ 当RECEIVER输出0时,上管导通,下管断开,RXD与VCC相连 ,输出 隐性电平 ‘1’
  • 总的来说:当有电压差时输出 显性电平 ‘0’ ; 没有电压差时输出隐性电平 ‘1’。

输出部分原理详解

notion image
  • 两个25K的电阻,并联,他们各分得0.5倍VCC电压,也就是2.5V。这就会在没有外力影响时,将电压固定在2.5V。也就是隐性电平的 ‘0’。(两线“拉紧”的力,主要是靠外部的终端电阻。)
  • DRIVER会控制两个mos管(蓝色圆圈)的状态。 当TXD输入1时,上下两管同时断开,两根总线回归2.5V。 当TXD输入0时,上下两管同时导通,CANH被VCC拉高,CANL被GND拉低。使总线产生电压差。

其他部分功能介绍

notion image
  1. S引脚, 静默或者高速。S引脚的下拉电压源,当S悬空,默认输入0。 最终是控制开关控制器
  1. 电流源上拉,类似上拉电阻,当TXD悬空时默认输出电平1,防止当TXD引脚电平不确定造成影响。
  1. TXD显性超时计时器: 当TXD输出出现异常,始终输出显性电平0, 那么CAN总线将始终输出显性电平0 , CAN总线将会瘫痪, 并且其他设备不可阻止。那么这个设备就是收发器的保险,当设备异常,始终拽着总线不放,那么过一段时间后,收发器会自动释放总线,防止总线瘫痪
  1. 温度保护,当温度异常时,会控制驱动器切断输出,以免干扰CAN总线

六、CAN物理层特性

notion image

CAN总线入门帧格式详解

一、CAN总线帧格式

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

二、数据帧详解

notion image
灰色部分D 为显性电平0, Donminant
白色部分R 为隐性电平1,Recessive
蓝色部分D/R为数据,可自定义
  • 数据帧分为标准格式和扩展格式

标准格式

  1. 数据帧开始之前:电平为 隐性电平。逻辑电平1表示
  1. 帧起始
      • 起始帧【SOF】:电平必须为显性电平,逻电平0表示
  1. 仲裁段
      • 发送报文ID【identifier】:标准格式为11位。(ID越小优先级越高,可用于仲裁时)
      • 发送远程请求标志位【RTR】:用于区分数据帧(写入)还是遥控帧(读取)。数据帧必须为显性0,遥控帧为隐性1
  1. 控制段
      • ID扩展标志位【IDE】:标准格式固定为显性0,扩展格式固定为隐性1
      • 保留位【r0】:目前(2025.5.19)没用到
      • 数据段长度【DLC】:用来控制后续的数据段的发送的字节,(例如0001为发送1字节,1000为8字节)
  1. 数据段【Data】:0-8字节(64bit)。根据数据长度DLC来发送对应长度的数据
  1. CRC段
      • CRC校验段:SOF到Data所有数据位,得到15为bit的CRC校验码附加在数据帧后
      • 界定符:必须为隐性电平1
  1. ACK段
      • ACK槽:类似于IIC的应答,当发送方发送完这一帧的主要内容,会在位于ACK槽时释放总线,应答方需要在ACK槽主动拉开总线,时ACK槽为显性电平0。发送方在ACK槽读取总线状态。如果读取为0则数据被正确接收。如果读取为1则未被正确接收。
      • ACK界定符:必须为隐性电平1。
  1. 帧结束【EOF】:七个隐性电平1。标志帧结束。

扩展格式

扩展格式的出现,是因为标准格式的ID不够用了。
  1. SRR为替代RTR的位。必须位隐性电平1。 因为在CAN中,仲裁时是先比较所有位的ID,再比较RTR,所以RTR一定要再ID的后面。所以就出现了SRR来替代RTR,同时也是为了保证标准格式的优先级高于扩展格式。
  1. 扩展标志位【IDE】标准格式固定为显性0,扩展格式固定为隐性1
  1. 扩展部分的ID
  1. RTR
  1. r0/r1. 为后续升级奠定基础,
  1. 其余与标准格式一样

附【数据帧各部分用途简介】:

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

附【数据帧的发展】

  • CAN 1.2时期,仅存在标准格式,IDE位当时仍为保留位r1
    • notion image
  • CAN 2.0时期,ID不够用,出现了扩展格式,增加了ID的位数,为了区分标准格式与扩展格式,协议将标准格式中的r1赋予了新功能—IDE
    • notion image

三、遥控帧

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

四、错误帧

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

五、过载帧

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

六、帧间隔

将数据帧和遥控帧与前面的帧分离开
notion image
 
 
💡
有关CAN总线的其他问题,欢迎您在底部评论区留言,一起交流~
上一篇
C语言数据结构
下一篇
16届蓝桥杯嵌入式国赛备考学习笔记

评论
Loading...