0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CAN网络底层的重要知识点介绍

硬件攻城狮 来源:硬件攻城狮 作者:硬件攻城狮 2022-11-25 14:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

CAN总线早期主要应用于汽车、工业控制领域,随着CAN总线技术的不断成熟,已不再局限于汽车行业,现在已经普遍应用于航天、医疗、机器人等各行各业。

偶尔会有读者问:

CAN总线难吗?

CAN和串口有什么区别?

有CAN总线的学习资料吗?

今天就来讲述一下CAN网络底层的几个重要知识点:CAN总线波特率、位时序、帧类型。

CAN总线波特率

CAN总线属于异步通信,因此就有通信波特率,而这个波特率发生器就位于CAN控制器内部。我们不需要了解它是如何产生的,但需要了解它的含义。这章节针对初学者讲述以下两点内容。

CAN控制器在CAN网络中所处的位置如下图:

08c1d33c-6c7a-11ed-8abf-dac502259ad0.jpg

1.异步通信在串行通信中,主要分异步通信和同步通信。 同步通信:通信设备之间通过同步信号(CLK时钟)来实现数据传输的通信叫同步通信。如I2C、SPI这类通信中都具有一个时钟信号,其实在STM32中USART也具有同步功能,只是我们大多数人都只用了它的异步功能。 异步通信:简单来说,就是通信设备之间通过约定一样的时间来收发数据。而这个时间就会决定本节说的波特率。 2.波特率很多工程师一直都没彻底搞明白什么是波特率,我这里还是结合UART波特率来简述一下其含义。 在电子通信领域,波特(Baud)即调制速率,指的是有效数据信号调制载波的速率,即单位时间内载波调制状态变化的次数。它是对符号传输速率的一种度量,1波特即指每秒传输1个符号。 UART每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。 从上面的描述可以总结:比特率:即单位时间内传送的二进制位数; 波特率:即单位时间内传输的符号个数; 只有在每个符号只代表一个比特信息的情况下,波特率与比特率才在数值上相等,但是它们的意义并不相同。

位时序

上一章节讲述了波特率,而决定波特率大小的就是本节说的位时序。在CAN标准中一个位可分为4段:

同步段(SS)

传播时间段(PTS)

相位缓冲段1(PBS1)

相位缓冲段2(PBS2)

这些段又由可称为 Time Quantum(简称Tq)的最小时间单位构成。 1位分为4个段,每个段又由若干个Tq构成,这称为位时序。 而在STM32参考手册中,将位时序分为三段,但它将它传播段和位段1合并在一起了,如下图:

08e91eba-6c7a-11ed-8abf-dac502259ad0.jpg

1位由多少个Tq构成、每个段又由多少个Tq构成等,可任意设定位时序。通过设定位时序,决定传输的波特率:

090e1bde-6c7a-11ed-8abf-dac502259ad0.jpg

这几个参数会在以后编程中进行配置,从而决定通信的波特率。 关于同步,还有硬件同步、再同步等操作。但初学者可以不必过多理解,掌握上面基础内容就行了。更多关于位时序的内容可以参看 ISO 11898 标准。

帧类型及格式说明

CAN总线是通过以下5种类型的帧进行通信:

数据帧:用于发送单元向接收单元传送数据的帧。

遥控帧:用于接收单元向具有相同 ID 的发送单元请求数据的帧。

错误帧:用于当检测出错误时向其它单元通知错误的帧。

过载帧:用于接收单元通知其尚未做好接收准备的帧。

帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧。

数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11个位的标识符ID,扩展格式有29个位的ID。

1.数据帧

093ddbd0-6c7a-11ed-8abf-dac502259ad0.jpg

如上图,数据帧由7个段构成:

(1) 帧起始

表示数据帧开始的段。

(2) 仲裁段

表示该帧优先级的段。

(3) 控制段

表示数据的字节数及保留位的段。

(4) 数据段

数据的内容,可发送 0~8 个字节的数据。

(5) CRC 段

检查帧的传输错误的段。

(6) ACK 段

表示确认正常接收的段。

(7) 帧结束

表示数据帧结束的段。

理解数据帧的含义,请从认真理解它的定义:用于发送单元向接收单元传送数据的帧。 一般的CAN总线通信,总线上通信绝大部分时候都是数据帧。像在CANOpen协议中,用的最多的PDO过程数据对象就是通过数据帧进行的通信。 初学者可以先理解数据帧,然后其他就容易理解了。下面再来讲述一下数据帧7段的详情。

帧起始

标准和扩展格式相同。表示帧开始的段,1个位的显性位(如下图):

096d1d8c-6c7a-11ed-8abf-dac502259ad0.png

关于显性和隐性电平,请参看我上一篇文章差分信号章节。 总线上的电平有显性电平和隐性电平两种。 总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。 “显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强)

仲裁段

标准格式和扩展格式在此的构成有所不同。仲裁段表示该帧优先级的段,扩展格式多了18位ID(如下图):

0993a722-6c7a-11ed-8abf-dac502259ad0.jpg

RTR = 0代表数据帧,RTR = 1代表远程帧。

为什么叫仲裁段,就是通过ID来判断总线上哪一个节点具有优先发送的权利。ID越小(0代表显性),优先级越高。

控制段

标准和扩展格式的构成有所不同。控制段由 6 个位构成(如下图):

09b3a9a0-6c7a-11ed-8abf-dac502259ad0.jpg

它们除了都有4位表示数据段长度代码(DLC)外,标准帧有IDE(数值为0)位和r0保留位,扩展帧有r0和r1保留位。 保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。

数据段

标准和扩展格式相同。数据段表示传输数据的内容,从 MSB(最高位)开始输出,可发送 0~8 个字节的数据,长度由前面控制段决定。

CRC段

标准和扩展格式相同。CRC段是检查帧传输错误的帧,由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于分隔的位)构成。

09c80d28-6c7a-11ed-8abf-dac502259ad0.jpg

相比485这类通信,CAN控制器就已经把CRC校验做了,不需要你的程序再次去计算,从而节约了处理器资源。

ACK段

标准和扩展格式相同。ACK段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。

09de272a-6c7a-11ed-8abf-dac502259ad0.jpg

A.发送单元在 ACK 段发送 2 个位的隐性位。

B.接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位, 通知发送单元正常接收结束。这称作“发送 ACK”或者“返回 ACK”。

帧结束

标准和扩展格式相同。帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。

09ff6d86-6c7a-11ed-8abf-dac502259ad0.jpg

2.遥控帧

0a12360a-6c7a-11ed-8abf-dac502259ad0.jpg

和数据帧相比,遥控帧是接收单元向发送单元请求发送数据所用的帧。所以,遥控帧没有数据段。因此,遥控帧由如下 6 个段组成:

(1) 帧起始(SOF)

表示帧开始的段。

(2) 仲裁段

表示该帧优先级的段。可请求具有相同 ID 的数据帧。

(3) 控制段

表示数据的字节数及保留位的段。

(4) CRC 段

检查帧的传输错误的段。

(5) ACK 段

表示确认正常接收的段。

(6) 帧结束

表示遥控帧结束的段。

这6个段和上面数据帧的内容基本一样,这里就不一一讲述了。讲一下遥控帧和数据帧的区别:

遥控帧的 RTR 位为隐性位,没有数据段。

没有数据段的数据帧和遥控帧可通过 RTR 位区别开来。

问题一:遥控帧没有数据段,数据长度码该如何表示?

遥控帧的数据长度码以所请求数据帧的数据长度码表示。

问题二:没有数据段的数据帧有何用途?

例如,可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下。

3.错误帧

0a376aec-6c7a-11ed-8abf-dac502259ad0.jpg

用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。

(1) 错误标志

错误标志包括主动错误标志和被动错误标志两种。

主动错误标志:6 个位的显性位。

被动错误标志:6 个位的隐性位。

(2) 错误界定符

错误界定符由 8 个位的隐性位构成。

4.过载帧

0a47da1c-6c7a-11ed-8abf-dac502259ad0.jpg

过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。

(1) 过载标志

6 个位的显性位。

过载标志的构成与主动错误标志的构成相同。

(2) 过载界定符

8 个位的隐性位。

过载界定符的构成与错误界定符的构成相同。

5.帧间隔

0a6340b8-6c7a-11ed-8abf-dac502259ad0.jpg

帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。 过载帧和错误帧前不能插入帧间隔。

(1) 间隔

3 个位的隐性位。

(2) 总线空闲

隐性电平,无长度限制(0 亦可)。

本状态下,可视为总线空闲,要发送的单元可开始访问总线。

(3) 延迟传送(发送暂时停止)

8 个位的隐性位。

只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    213

    文章

    31402

    浏览量

    223560
  • CAN总线
    +关注

    关注

    146

    文章

    2050

    浏览量

    135477
  • 汽车电子
    +关注

    关注

    3046

    文章

    9089

    浏览量

    173113

原文标题:对比UART,CAN底层更复杂

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    示波器小知识点

    示波器的系统带宽:是指一个逐渐升高频率的正弦输入信号显示幅度下降3dB时的频率。测试信号一般是方波,而方波信号由基波及奇次谐波组成。如果用示波器去测一个方波,需要注意示波器应从频率上能够测量到它
    的头像 发表于 04-16 11:04 61次阅读
    示波器小<b class='flag-5'>知识点</b>

    【黑金云课堂笔记】第三期知识点总结

    ,对 FPGA 免费直播课的热情也感染到了黑金云课堂的老师们。接下来我们会再接再厉,把每一期直播都做得更扎实   更多精彩课程欢迎关注我们 黑金云课堂全年免费直播课 ,现在让我们先来回顾一下上周的知识点精华——   数据类型 常量 进制表示:二进制(b/B)、八进制(o/
    的头像 发表于 04-01 16:08 163次阅读
    【黑金云课堂笔记】第三期<b class='flag-5'>知识点</b>总结

    虹科前瞻 | 欧盟CRA新规下,CAN网络合规之路该如何走?

    CiA(CANinAutomation)协会就欧盟《网络弹性法案》对CAN网络技术的影响发布了一份重要声明,明确了CAN相关产品的CRA合规
    的头像 发表于 03-05 17:04 685次阅读
    虹科前瞻 | 欧盟CRA新规下,<b class='flag-5'>CAN</b><b class='flag-5'>网络</b>合规之路该如何走?

    一文带你彻底搞懂K8s网络

    说实话,K8s 网络是我见过最让新手头疼的知识点,没有之一。记得我刚接触 K8s 那会儿,看着流量在 Pod、Service、Node 之间穿梭,完全是一脸懵逼。后来踩了无数坑,熬了无数夜,总算把这套网络模型摸透了。今天这篇文章
    的头像 发表于 02-06 10:15 686次阅读

    CAN 集线器的作用

    在工业自动化、汽车电子、轨道交通等领域,CAN 总线凭借其高可靠性、实时性和多主站通信特性,成为设备互联的核心协议。但传统 CAN 总线的线性拓扑、通信距离受限、多速率网络难兼容等痛
    的头像 发表于 12-08 11:38 966次阅读
    <b class='flag-5'>CAN</b> 集线器的作用

    120Ω的秘密:CAN总线终端电阻的重要

    CAN总线作为一种广泛应用的工业通信协议,其终端电阻的作用不容忽视。本文将详细探讨CAN总线终端电阻的重要性及其在通信中的关键作用。CAN总线终端电阻的
    的头像 发表于 08-08 11:35 1452次阅读
    120Ω的秘密:<b class='flag-5'>CAN</b>总线终端电阻的<b class='flag-5'>重要</b>性

    CANFD节点的采样如何测量?

    本文导读为提升CAN/CANFD网络的通信可靠性,各节点需尽可能配置合适且一致的采样。然而在设备CAN通信采样参数未知的情况下,如何验证
    的头像 发表于 07-31 11:34 1548次阅读
    CANFD节点的采样<b class='flag-5'>点</b>如何测量?

    最新人工智能硬件培训AI基础入门学习课程参考2025版(离线AI语音视觉识别篇)

    视觉开发板开箱即用的离线AI能力,分类列出学习课程知识点和实操参考,希望能够帮助大家快速掌握离线 AI 智能硬件的基础知识与实战技能,同时了解相关AI技术在实际场景的应用情况。正文按入下框架展开,相关理论和实操除了参考官方文档,也可以自己借助大模型或搜索获得。
    发表于 07-04 11:14

    硬件设计指南:从器件认知到手机基带设计

    设计指导,然后介绍了手机基带几个重要模块的设计原则,设计就是测试,无测试则无设计,最后介绍了测试仪表与板级测试。 全书含有43 个原创实战案例讲解,知识点涉及范围广,内容全面精,非常适
    发表于 07-03 16:49

    CAN总线采样不一致的危害

    采样不一致是CAN总线网络中常见的配置错误,可能导致位错误、同步问题、错误帧增加、节点总线关闭、仲裁失败和确认错误等严重后果。 CAN总线的位时间由四个非重叠的时间段组成,每个段由时
    发表于 06-07 08:55

    单片机有没有串口抓包工具推荐的,纯小白,想像网络协议那样直接curl协议转化为代码

    能否做到像网络协议那样抓包重放呢?刚刚涉及 esp32 单片机开发,不太懂这方面的知识点
    发表于 06-01 11:04

    【「# 运算放大器参数解析与LTspice应用仿真」阅读体验】+全书概览与第一章阅读分享

    先来详细阅读下第一章,分享下相关内容。 第一章主要介绍运放的基础知识,学过模电的都很容易理解,可能教材上学过的忘记了, 这里可以作为摘出来的重点温故知新复习下。全文没有废话,都是娓娓道来各个知识点
    发表于 05-22 23:18

    C51单片机及C语言知识点必备秘籍

    单片机关键知识点一览: 系列一 1:单片机简叙 2:单片机引脚介绍 3:单片机存储器结构 4:第一个单片机小程序 5:单片机延时程序分析 6:单片机并行口结构 7:单片机的特殊
    发表于 05-15 14:00

    电机选型计算公式与知识点汇总

    纯分享帖,需要者可点击附件获取完整资料~~~*附件:电机选型计算公式与知识点汇总.pdf 【免责声明】内容转自今日电机,因转载众多,无法确认真正原始作者,故仅标明转载来源。版权归原出处所有,纯分享帖,侵权请联系删除内容以保证您的权益。
    发表于 04-29 16:10

    CAN XL是什么?2分钟看懂下一代车载网络#CANXL #CANoe #CAN

    CAN
    北汇信息POLELINK
    发布于 :2025年04月28日 17:33:05