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

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

3天内不再提示

CANOpen系列教程04 _CAN总线波特率、位时序、帧类型及格式说明

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-06 16:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1写在前面

上一篇文章讲述了CAN收发器的重要作用,也提及了一下CAN总线的优势主要在于CAN控制器。CAN控制器在CAN网络中所处的位置如下图:

本文讲述的CAN控制器实现的几个重要功能:CAN总线波特率、位时序、帧类型。

2

CAN总线波特率

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

2.1 异步通信

在串行通信中,主要分异步通信和同步通信。

同步通信:通信设备之间通过同步信号(CLK时钟)来实现数据传输的通信叫同步通信。如I2C、SPI这类通信中都具有一个时钟信号,其实在STM32中USART也具有同步功能,只是我们大多数人都只用了它的异步功能。

异步通信:简单来说,就是通信设备之间通过约定一样的时间来收发数据。而这个时间就会决定本节说的波特率。

2.2 波特率

很多工程师一直都没彻底搞明白什么是波特率,我这里还是结合UART波特率来简述一下其含义。

在电子通信领域,波特(Baud)即调制速率,指的是有效数据信号调制载波的速率,即单位时间内载波调制状态变化的次数。它是对符号传输速率的一种度量,1波特即指每秒传输1个符号。

UART每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。

从上面的描述可以总结:

比特率:即单位时间内传送的二进制位数;

波特率:即单位时间内传输的符号个数;

只有在每个符号只代表一个比特信息的情况下,波特率与比特率才在数值上相等,但是它们的意义并不相同。

3

位时序

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

同步段(SS)

传播时间段(PTS)

相位缓冲段1(PBS1)

相位缓冲段2(PBS2)

这些段又由可称为 Time Quantum(简称Tq)的最小时间单位构成。

1位分为4个段,每个段又由若干个Tq构成,这称为位时序。

而在STM32参考手册中,将位时序分为三段,但它将它传播段和位段1合并在一起了,如下图:

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

这几个参数会在以后编程中进行配置,从而决定通信的波特率。

关于同步,还有硬件同步、再同步等操作。但初学者可以不必过多理解,掌握上面基础内容就行了。更多关于位时序的内容可以参看 ISO 11898 标准。

4

帧类型及格式说明

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

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

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

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

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

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

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

4.1 数据帧

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

(1) 帧起始

表示数据帧开始的段。

(2) 仲裁段

表示该帧优先级的段。

(3) 控制段

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

(4) 数据段

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

(5) CRC 段

检查帧的传输错误的段。

(6) ACK 段

表示确认正常接收的段。

(7) 帧结束

表示数据帧结束的段。

理解数据帧的含义,请从认真理解它的定义:用于发送单元向接收单元传送数据的帧。

一般的CAN总线通信,总线上通信绝大部分时候都是数据帧。像在CANOpen协议中,用的最多的PDO过程数据对象就是通过数据帧进行的通信。

初学者可以先理解数据帧,然后其他就容易理解了。下面再来讲述一下数据帧7段的详情。

4.1.1 帧起始

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

关于显性和隐性电平,请参看我上一篇文章差分信号章节。

总线上的电平有显性电平和隐性电平两种。

总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。

“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强)

4.1.2 仲裁段

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

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

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

4.1.3 控制段

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

它们除了都有4位表示数据段长度代码(DLC)外,标准帧有IDE(数值为0)位和r0保留位,扩展帧有r0和r1保留位。

保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。

4.1.4 数据段

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

4.1.5 CRC段

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

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

4.1.6 ACK段

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

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

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

4.1.7 帧结束

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

4.2 遥控帧

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

(1) 帧起始(SOF)

表示帧开始的段。

(2) 仲裁段

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

(3) 控制段

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

(4) CRC 段

检查帧的传输错误的段。

(5) ACK 段

表示确认正常接收的段。

(6) 帧结束

表示遥控帧结束的段。

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

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

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

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

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

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

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

4.3 错误帧

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

(1) 错误标志

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

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

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

(2) 错误界定符

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

4.4 过载帧

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

(1) 过载标志

6 个位的显性位。

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

(2) 过载界定符

8 个位的隐性位。

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

4.5 帧间隔

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

过载帧和错误帧前不能插入帧间隔。

(1) 间隔

3 个位的隐性位。

(2) 总线空闲

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

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

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

8 个位的隐性位。

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

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

    关注

    145

    文章

    2020

    浏览量

    134696
  • CANopen
    +关注

    关注

    8

    文章

    456

    浏览量

    47589
  • 波特率
    +关注

    关注

    2

    文章

    319

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AT32F系列 CAN通讯模式使用

    设备,选择时钟频率,并将波特率设定为1Mbit/s,最后点击确 定。4) PCAN-tool打开后,即可监控通讯数据。PCAN-tool的Transmit窗内可设定数据格式及内容,然后发送到MCU端
    发表于 10-20 16:29

    UART波特率计算及UART收发回显实验

    决定串口波特率的寄存器有BRR(Bite Rate Rigister),SEMR(Serial Extended Mode Rigister)和MDDR(Modulation Duty
    的头像 发表于 10-17 09:51 2400次阅读
    UART<b class='flag-5'>波特率</b>计算及UART收发回显实验

    如何测量CAN/CAN FD的时间精度?

    的通信质量。在原理上波特率时间是互为倒数的关系,因此借助ZPS-CANFD设备的时间测量与评估功能,有助于诊断总线隐含故障、优化系统及提升网络性能。在串行通信系
    的头像 发表于 09-04 11:39 551次阅读
    如何测量<b class='flag-5'>CAN</b>/<b class='flag-5'>CAN</b> FD的<b class='flag-5'>位</b>时间精度?

    波特率是什么

    波特率是串行通信中的一个核心参数,用于描述数据在传输线路上的传输速率。以下从定义、单位、与比特的关系、实际应用及设置注意事项等方面进行详细说明: 一、定义与本质 波特率(Baud R
    的头像 发表于 07-22 11:11 5820次阅读

    开疆智能EtherCAT转CANopen网关连接IS620P伺服配置案例

    。 从手册得知波特率支持20k-1M支持4个RTPDO 根据实际通讯距离设置实际波特率 根据从站接线要求接好CAN总线。 面板设置控制模式为8CAN
    的头像 发表于 07-15 18:20 516次阅读
    开疆智能EtherCAT转<b class='flag-5'>CANopen</b>网关连接IS620P伺服配置案例

    可编程电源的通信波特率应如何设置?

    、115200bps),并通过测试验证最佳参数。以下是具体设置方法与注意事项:一、波特率设置的核心原则 设备兼容性优先 查阅手册:确认电源支持的波特率范围(如Keysight N6700系列
    发表于 07-07 15:01

    基于瑞萨64MPU RZ/G2L的uboot串口多波特率支持介绍

    本文主要介绍基于瑞萨64MPU RZ/G2L,讨论uboot下非常规波特率115200的支持方法,用于解决客户对uboot下特殊波特率的需求,供客户参考。
    的头像 发表于 07-04 15:54 2772次阅读
    基于瑞萨64<b class='flag-5'>位</b>MPU RZ/G2L的uboot串口多<b class='flag-5'>波特率</b>支持介绍

    开疆智能CCLinkIE转CANopen网关连接四宏电机驱动器配置案例

    本案例是CCLinkIE主站通过CCLinkIE转CANopen网关连接斯宏电机的配置案例 配置过程 首先设置电机参数,根据从站手册说明。电机默认站地址为1,波特率500K,网关以此参数进行配置 将
    的头像 发表于 07-03 18:47 326次阅读
    开疆智能CCLinkIE转<b class='flag-5'>CANopen</b>网关连接四宏电机驱动器配置案例

    如何评估CAN总线信号质量

    与隐性态之间的差值,影响噪声免疫力。 上升沿时间 :快速上升沿确保准确的定时。 下降沿时间 :类似上升沿,影响定时精度。 信号定时 :确保定时符合波特率要求。 为确保CAN
    发表于 06-07 08:46

    MAX13051 ±80V故障保护CAN收发器,具有自动波特率模式技术手册

    MAX13051为具有自动波特率模式、±80V故障保护的CAN收发器,可理想用于需要过压保护的设备网络和其他工业网络应用。MAX13051可以为CAN协议控制器和CAN
    的头像 发表于 05-27 11:07 1071次阅读
    MAX13051 ±80V故障保护<b class='flag-5'>CAN</b>收发器,具有自动<b class='flag-5'>波特率</b>模式技术手册

    【手把手教你玩转CAN总线】从原理到STM32实战

    CAN_H/CAN_L差分波形(正常应为方波) 波特率验证(500Kbps对应周期2μs) 错误分析: 错误计数:HAL_CAN_Get
    发表于 04-10 11:08

    Embedded Coder Support Package是否支持CAN唤醒和波特率配置?

    Embedded Coder Support Package 是否支持 CAN 唤醒和波特率配置?
    发表于 04-09 06:25

    CAN总线十万个为什么 | CAN自定义波特率有什么用?

    导读CAN总线通信中,波特率一致并不总能保证通信顺畅。本文将揭秘自定义波特率的原理和应用,探讨如何通过优化采样点和提高容忍度解决通信问题,助力工程师提升通信稳定性。通常情况下,
    的头像 发表于 02-07 11:36 1105次阅读
    <b class='flag-5'>CAN</b><b class='flag-5'>总线</b>十万个为什么 | <b class='flag-5'>CAN</b>自定义<b class='flag-5'>波特率</b>有什么用?

    AN-891: ADuC703x系列LIN波特率计算

    电子发烧友网站提供《AN-891: ADuC703x系列LIN波特率计算.pdf》资料免费下载
    发表于 01-14 15:53 0次下载
    AN-891: ADuC703x<b class='flag-5'>系列</b>LIN<b class='flag-5'>波特率</b>计算

    RS232通信的波特率设置说明

    RS232通信的波特率设置是确保数据正确传输的关键参数之一。以下是对RS232通信波特率设置的说明: 一、波特率的概念 波特率是指每秒传输的
    的头像 发表于 12-10 16:26 6430次阅读