【嵌入式学习】嵌入式原理知识-CAN(XI)

发布时间:2026/10/15 3:57:21
【嵌入式学习】嵌入式原理知识-CAN(XI) 1. CAN简介硬件电路1.1 CAN总线简介CAN总线Controller Area Network Bus控制器局域网总线CAN总线由BOSCH公司开发传输速度快易扩展可靠性高的串行通信总线CAN总线的特征两根通信线CAN_H, CAN_L线路少无需共地差分信号通信抗干扰能力强高速CAN125k - 1Mbps40m低速CAN10k - 125kbps 1km1.2 CAN总线与IICUARTUART只能实现两个设备点对点通信IIC是一个主控多个从机如果需要多个主控进行通信那么此时使用CAN;此外CAN为差分信号线抗干扰能力更强名称引脚双工时钟电平设备应用场景UARTTX、RX全双工异步单端点对点两个设备互相通信I2CSCL、SDA半双工同步单端多设备一个主控外挂多个模块SPISCK、MOSI、MISO、SS全双工同步单端多设备一个主控外挂多个模块高速CANCAN_H、CAN_L半双工异步差分多设备多个主控互相通信1.3 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欧的终端电阻在闭环电路中两端的电阻相当于弹簧当没有电压时此时电阻将两根线收紧此时电压一致相当于逻辑1当设备想要发0此时操作总线将总线拉开当设备发送1此时不需要对总线做任何操作对于低速CAN使用开环网络2.2k欧电阻在此作为防止回波反射的作用电阻无收紧作用1.4 CAN的电平标准CAN总线采用差分信号即两线电压差Vcan_H - Vcan_L传输数据位高速CAN规定电压差为0V时表示逻辑1隐性电平电压差为2V时表示逻辑0显性电平低速CAN规定电压差为-1.5V时表示逻辑1隐性电平电压差为3V时表示逻辑0显性电平1.5 CAN收发器这里是TJA1050T芯片如下图所示芯片的引脚图和对应的功能引脚功能这是芯片的内部结构图首先是RXD端根据比较器通过对比CANH和CANL的压差来对比得到对应的逻辑值接着是TXD端根据TXD端的输出当输出1此时CANH与CANL均通过25k电阻接到0.5VCC处此时对外输出相同电平压差为0 TXD引脚悬空此时也默认为高电平1当输出0此时CANH接通VCCCANL接通GND此时输出压差得到对应的逻辑0此外当长时间输出0会触发TXD的TIME-OUT 超时判断会强制输出11.6 CAN物理层特性总述上述的硬件电路电平标准等等可以汇总成如下的表格2. CAN总线帧格式CAN协议规定了如下5种类型的帧帧类型用途数据帧发送设备主动发送数据广播式遥控帧接收设备主动请求数据请求式错误帧某个设备检测出错误时向其他设备通知错误过载帧接收设备通知其尚未做好接收准备帧间隔用于将数据帧及遥控帧与前面的帧分离开2.1 数据帧2.2 数据帧各部分用途SOFStart of Frame帧起始表示后面一段波形为传输的数据位IDIdentify标识符区分功能同时决定优先级RTRRemote Transmission Request远程请求位区分数据帧和遥控帧IDEIdentifier Extension扩展标志位区分标准格式和扩展格式SRRSubstitute Remote Request替代RTR协议升级时留下的无意义位r0/r1Reserve保留位为后续协议升级留下空间DLCData Length Code数据长度指示数据段有几个字节Data数据段的1~8个字节有效数据CRCCyclic Redundancy Check循环冗余校验校验数据是否正确ACKAcknowledgement应答位判断数据有没有被接收方接收CRC/ACK界定符为应答位前后发送方和接收方释放总线留下时间EOFEnd of Frame帧结束表示数据位已经传输完毕2.3 数据帧发展历史CAN 1.2 时期仅存在标准格式IDE位当时仍为保留位r1CAN 2.0 时期ID不够用出现了扩展格式增加了ID的位数为了区分标准格式与扩展格式协议将标准格式中的r1赋予了新功能-IDE2.4 遥控帧遥控帧无数据段RTR为隐性电平1其他部分与数据帧相同2.5 错误帧总线上所有设备都会监督总线的数据一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误”这些设备便会发出错误帧来破坏数据同时终止当前的发送设备2.6 过载帧当接收方收到大量数据而无法处理时其可以发出过载帧延缓发送方的数据发送以平衡总线负载避免数据丢失2.7 帧间隔将数据帧和遥控帧与前面的帧分离开3. 位填充发送方每发送5个相同电平后自动追加一个相反电平的填充位接收方检测到填充位时会自动移除填充位恢复原始数据如下表所示第一组第二组第三组即将发送1000001101000001111001111111111110实际发送10000011101000001111100111111011110110实际接收10000011101000001111100111111011110110移除填充后10000011010000011110011111111111103.1 位填充的作用增加波形的定时信息利于接收方同步数据CAN总线可以发送8个字节数据过长防止波形长时间无变化导致接收方不能精确掌握数据采样时机将正常数据流与“错误帧”和“过载帧”区分开标志“错误帧”和“过载帧”的特异性保持CAN总线在发送正常数据流时的活跃状态防止被误认为总线空闲3.2 波形示例标准数据帧报文ID为0x555数据长度1字节数据内容为0xAA标准数据帧报文ID为0x666数据长度2字节数据内容为0x12, 0x34扩展数据帧报文ID为0x0789ABCD数据长度1字节数据内容为0x56标准遥控帧报文ID为0x088数据长度1字节无数据内容4. 接收方数据采样4.1 接收方数据采样的说明CAN 总线没有时钟线总线上的所有设备通过约定波特率的方式确定每一个数据位的时长发送方以约定的位时长每隔固定时间输出一个数据位接收方以约定的位时长每隔固定时间采样总线的电平输入一个数据位理想状态下接收方能依次采样到发送方发出的每个数据位且采样点位于数据位中心附近4.2 接收方数据采样的问题采样点没有对齐数据位中心附近因为时钟误差导致采样点逐渐偏离4.3 位时序为了灵活的调整每个采样点的位置使采样点对齐数据位中心附近对每个数据位的时长进行了更细的划分分为同步段SS传播时间段PTS相位缓冲段1PBS1和相位缓冲段2PBS2每个段又由若干个最小时间单位Tq构成采样点位于PBS1和PBS2之间通过调节各部分的长度来控制采样点的位置SS 1TqPTS 1~8TqPBS1 1~8TqPBS2 2~8Tq缩写英文全称中文名称作用SSSynchronization Segment同步段固定 1Tq。总线上出现下降沿时节点在此段完成信号同步是每一位的起点PTSPropagation Time Segment传播时间段1~8Tq。补偿总线线缆、收发器的物理传输延迟驱动器 比较器延时PBS1Phase Buffer Segment 1相位缓冲段 11~8Tq。吸收时钟相位误差采样点就在 PBS1 结束的位置PBS2Phase Buffer Segment 2相位缓冲段 22~8Tq。同样用于补偿相位误差是采样点之后的时间用于等待总线电平稳定4.4 硬同步每个设备都有一个位时序计时周期当某个设备发送方率先发送报文其他所有设备接收方收到SOF的下降沿时接收方会将自己的位时序计时周期拨到SS段的位置与发送方的位时序计时周期保持同步硬同步只在帧的第一个下降沿SOF下降沿有效经过硬同步后若发送方和接收方的时钟没有误差则后续所有数据位的采样点必然都会对齐数据位中心附近4.5 再同步若发送方或接收方的时钟有误差随着误差积累数据位边沿逐渐偏离SS段则此时接收方根据再同步补偿宽度值SJW通过加长PBS1段或缩短PBS2段以调整同步再同步可以发生在第一个下降沿之后的每个数据位跳变边沿SJW - 1~4Tq4.6 波特率计算波特率1TSSTPTSTPBS1TPBS2 \text{波特率} \frac{1}{T_{SS} T_{PTS} T_{PBS1} T_{PBS2}}波特率TSS​TPTS​TPBS1​TPBS2​1​若Tq0.5us则下图波特率10.5us1.5us1.5us1.5us200kbps \text{波特率} \frac{1}{0.5\mathrm{us} 1.5\mathrm{us} 1.5\mathrm{us} 1.5\mathrm{us}} 200\mathrm{kbps}波特率0.5us1.5us1.5us1.5us1​200kbps5. 总线仲裁5.1 多设备同时发送问题CAN总线的规则和IIC相近实现线与的功能若同一个时间多个设备操作总线必将导致失真解决思路指定资源分配规则依次满足多个设备的发送需求确保同一时间只有一个设备操作总线5.2 资源分配规则1- 先占先得若当前已经有设备正在操作总线发送数据帧/遥控帧其他设备不能再同时发送数据帧/遥控帧但是可以发送错误帧/过载帧破坏当前数据任何设备检测到连续11个隐性电平位填充即认为总线空闲只有总线空闲时设备才能发送数据帧/遥控帧5.3 资源分配规则2- 非破坏性仲裁多个设备的发送需求同时到来或者因等待而同时到来则CAN总线协议会根据ID号仲裁段进行非破坏性仲裁ID号小的优先级高取得总线控制权ID号大的优先级低仲裁失利后将转入接受状态等待下一次总线空闲时再尝试发送实现非破坏性仲裁需要两个要求线与特性回读机制每个设备发出一个数据位后都会读回总线当前的电平状态以确认自己发出的电平是否被真实的发送出去了根据线与特性发出0读回必定为0发出1读回不一定是15.4 非破坏性仲裁过程数据位从前到后依次比较出现差异且数据位为1的设备仲裁失利单元1发送1但是收到0此时证明有别的单元所以自主退出单元2每次发送接收的数据相同所以正常传输数据ID号出现1越早此时越容易仲裁失利位填充会出现在仲裁位但是可以举例证明位填充不会影响仲裁最后仲裁胜利的单元此时单元数据完全没有改变所以是非破坏性仲裁5.5 数据帧和遥控帧的优先级当数据帧和遥控帧ID号相同此时数据帧的优先级高于遥控帧5.6 标准格式和扩展格式的优先级标准格式11位ID号和扩展格式29位ID号的高11位相同时标准格式的优先级高于扩展格式SRR必须始终为1以保证此要求6. CAN总线错误处理6.1 错误类型错误共有5种位错误填充错误CRC错误格式错误应答错误位错误通过回读机制判断填充错误如果位填充正常则不会出现6个以上的连续相同电平6.2 错误状态主动错误状态设备正常参与通信并在检测到错误时发出主动错误帧被动错误状态设备正常参与通信但检测到错误时只能发出被动错误总线关闭状态设备不能参与通信每个设备内部管理一个TEC和REC根据TEC和REC的值确定自己的状态根据TEC和REC的值的大小可以判断当前状态是否可靠6.3 错误计数器错误计数器根据如下的条件进行变化6.4 波形示例设备处于主动错误状态发送标准数据帧正常传输设备处于主动错误状态发送标准数据帧检测到ACK错误设备处于被动错误状态发送标准数据帧检测到ACK错误

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询