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

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

3天内不再提示

CANOpen系列教程05_ CAN总线同步与位填充、优先级的决定

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-06 16:13 次阅读

1写在前面

继续为大家更新CAN总线协议相关内容,这些内容其实也比较重要,会直接影响到你后期CAN总线的编程,夸张一点的说会影响到你的软件架构。

本文内容相对来说比较容易理解,初学者有必要了解一下。

2

位填充

位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。

这个功能很好理解,如下图所示。位填充的数据不需要编程控制,由控制器自动完成。其目的也是提高CAN总线的稳定性。

(1) 发送单元的工作

在发送数据帧和遥控帧时, SOF~CRC 段间的数据,相同电平如果持续 5 位,在下一个位(第 6 个位)则要插入 1 位与前 5 位反型的电平。

(2) 接收单元的工作

在接收数据帧和遥控帧时, SOF~CRC 段间的数据,相同电平如果持续 5 位,需要删除下一个位(第 6 个位)再接收。如果这个第 6 个位的电平与前 5 位相同,将被视为错误并发送错误帧。

3

优先级的决定

前面讲述“CAN 总线差分信号”时描述了显性和隐性,其实这是CAN总线的特点,也是决定CAN总线优先级比较重要的功能。

在CAN总线空闲态,最先开始发送消息的单元获得发送权。

多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。

上图描述了CAN控制仲裁的过程,单元2最终获得了抢占CAN总线的权利,也就是说单元2具有更高的优先级。

当单元1 仲裁失利时,自动转换为接收(本来该发送,优先级比别人低,就开始接收数据了。 同时,控制器将会在下一轮继续发送这次未完成的数据)。

3.1 数据帧和遥控帧的优先级

具有相同 ID 的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权,可继续发送。

数据帧和遥控帧的仲裁过程如下图:

3.2 标准格式和扩展格式的优先级

标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,可继续发送。

提示:

不明白数据帧和遥控帧,标准格式和扩展格式之间差异的朋友,建议参看我上一篇文章《CANOpen系列教程04》。

4

其他

CAN总线协议的重要内容在这前面基本是讲述的差不多了,还有一些不是很重要的内容,比如硬件设计需要在CAN_H和CAN_L之间添加一个120欧电阻,总线的传输距离等。

接下来的文章会结合STM32芯片集成CAN控制器、例程讲述如何编程控制CAN总线数据的收发等。

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

    关注

    57

    文章

    2690

    浏览量

    463083
  • CANopen
    +关注

    关注

    8

    文章

    241

    浏览量

    43512
  • 换位填充
    +关注

    关注

    0

    文章

    2

    浏览量

    1684
收藏 人收藏

    评论

    相关推荐

    freertos中断优先级在哪设置

    FreeRTOS是一个流行的实时操作系统,它广泛应用于嵌入式系统开发。在FreeRTOS中,中断优先级是一个重要的概念,因为它决定了中断处理的顺序和响应时间。 1. 理解中断优先级 在讨论如何设置
    的头像 发表于 09-02 14:17 476次阅读

    CAN总线知识】CAN总线信号传输的定时与同步理论

    CAN协议与其它现场总线协议的区别中有一个是:它使用同步数据传输而不是异步传输(面向字符)。这意味着传输性能得到更有效的发挥,但是另一方面,这需要更加复杂的
    的头像 发表于 07-17 08:25 1352次阅读
    【<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>知识】<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>信号传输的<b class='flag-5'>位</b>定时与<b class='flag-5'>位</b><b class='flag-5'>同步</b>理论

    systick的中断优先级是否应该设置为最高优先级的嵌套中断?

    最近在学习ucosii有这样一个疑问,关于stm32的systick作为ucosii的基准时钟,systick的中断优先级是否应该设置为最高优先级的嵌套中断。理由是什么?各位大侠求指教!!!
    发表于 05-16 06:44

    创建了两个task如果一个优先级高 一个优先级低,高优先级的那个一直在做,什么时候会调度到低优先级的呢?

    创建了两个task如果一个优先级高一个优先级低, 我看到任务的函数都是用死循环做的,那个高优先级的那个一直在做,什么时候会调度到低优先级的呢?
    发表于 05-13 07:13

    STM32F103的寄存器NVIC_IPRx抢占优先级和子优先级是怎么设置的?

    STM32F103的寄存器NVIC_IPRx有些不明白,抢占优先级和子优先级是怎么设置的? 如果,中断分组2,抢占优先级3,子优先级3 那下面这样写对吗? SCB->AIR
    发表于 03-27 07:48

    Hightec对芯片中断优先级分配时,中断号越高中断优先级越高吗?

    请问大佬,Hightec对芯片中断优先级分配时,中断号越高中断优先级越高吗?看网上的帖子说中断号越低优先级越高。
    发表于 02-27 06:13

    CAN总线协议简介及其常见的应用领域

    ,但长度有限。CAN总线速率根据系统的不同而不同。 其次,CAN总线协议具有多主控制的特点,总线
    的头像 发表于 01-19 17:47 1073次阅读

    华为和思科默认路由优先级

    优先级值不同,则优先级值最小的为最优路由(无论开销值是否相同,另一种理解就是对不同路由来源或路由协议之间的比较)。
    的头像 发表于 01-11 10:47 1028次阅读

    GD32如何配置中断优先级分组以及中断优先级

    使用GD32 MCU的过程中,大家可能会有以下疑问:中断优先级如何配置和使用?
    的头像 发表于 01-10 10:30 2847次阅读
    GD32如何配置中断<b class='flag-5'>优先级</b>分组以及中断<b class='flag-5'>优先级</b>

    can总线传输距离

    、高速性和优秀的网络管理能力。 在CAN总线中,数据通过两根线进行传输,即CAN-H线和CAN-L线。CAN-H线为高电平,
    的头像 发表于 12-07 18:09 3380次阅读

    [ElfBoard] YOU CAN YOU UP 之CAN总线

    ;,即高电平。 CAN_High - CAN_Low > 0.9V 时候为显性的,逻辑信号表现为\"逻辑0\",即低电平。 隐性、显性之间存在天然的优先级特性:显性
    发表于 12-05 10:45

    [ElfBoard] YOU CAN YOU UP 之CAN总线分享

    ;,即高电平。 CAN_High - CAN_Low > 0.9V 时候为显性的,逻辑信号表现为\"逻辑0\",即低电平。 隐性、显性之间存在天然的优先级特性:显性
    发表于 12-04 14:47

    python中运算符的优先级大小

    Python中运算符的优先级决定了表达式中各个运算符的计算顺序。了解运算符的优先级对于正确理解和编写复杂的表达式非常重要。本文将详细介绍Python中运算符的优先级,并给出一些示例来帮
    的头像 发表于 11-29 16:21 2957次阅读

    python运算符优先级顺序口诀

    Python是一种非常流行的编程语言,具有广泛的应用领域。在Python中,运算符是进行各种数学和逻辑运算的关键部分。了解运算符的优先级顺序对于正确理解和书写Python代码至关重要。在本文中,我们
    的头像 发表于 11-22 14:34 2042次阅读

    浅谈CAN总线的一般冲突机制

    最近在开发Canopen项目中,进行一主多从设备通信时,主站发送同步帧,两个从站往往只有帧ID优先级高的设备可以让主站接收到数据,而另一个从设备的数据往往接收不到。但当我关闭其中一个can
    的头像 发表于 11-21 14:47 3143次阅读
    浅谈<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>的一般冲突机制