CAN总线如何保障低优先级数据不被饿死?-现场总线-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6490-cn中国制造,中国芯~
查看: 1421|回复: 0

CAN总线如何保障低优先级数据不被饿死?

[复制链接]
  • TA的每日心情
    开心
    2017-11-20 22:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2024-11-27 16:08:16 | 显示全部楼层 |阅读模式
    CAN协议的核心是非破坏性仲裁机制(Non-destructive Arbitration)。优先级通过标识符(ID)的值定义,标识符越小,优先级越高。

    640?wx_fmt=png&from=appmsg.jpg

    在仲裁过程中,所有节点同时监视总线信号。

    当一个节点在发送过程中检测到总线上的信号与自己发送的不同(自身发送“1”却检测到“0”),它会立即退出仲裁,转为监听状态。

    最终,优先级最高的节点赢得仲裁,成功发送数据。

    这种机制保障了总线的高效利用,但也带来了低优先级帧可能长期无法发送的风险。

    在极端情况下,如果高优先级帧的发送间隔小于或等于低优先级帧的发送间隔,低优先级帧会持续在仲裁中失败。这种情况称为“总线饥饿”或“优先级反转”问题。

    例如:高优先级帧每5ms发送一次。低优先级帧每10ms发送一次。

    如果两个帧同时到达发送队列,高优先级帧将总是赢得仲裁,导致低优先级帧可能永远无法发送。

    CAN协议本身并未直接解决优先级反转问题,因此需要通过系统设计和应用层协议来确保低优先级帧的发送。

    但可以通过以下措施解决:
    1.时间触发通信调度(TTC)
    时间触发通信调度通过预定义的时间表,确保各个节点在特定的时间段内发送帧。如下:
    • 周期性帧调度:定义不同优先级帧的发送周期,确保每帧都有机会发送。例如,可以在5ms内分配若干时间窗口给高优先级和低优先级帧。
    • 发送时间偏移:在节点内引入发送时间偏移,使得高优先级帧和低优先级帧发送时不会总是同时触发仲裁。

    2.软件死锁检测与重传机制节点内部的软件可以检测低优先级帧长时间未成功发送的情况:如果检测到帧长期饥饿,可以通过人工增加重发频率或强制暂停高优先级帧的发送,给低优先级帧留出发送机会。
    3.动态优先级调整
    某些应用层协议(如CANopen或J1939)允许动态调整帧的优先级。例如:在低优先级帧因饥饿而长期无法发送时,可以暂时调高其优先级。一旦发送成功,恢复其正常优先级。
    4.CAN FD的应用
    对于数据量较大的应用,可以考虑CAN FD(Flexible Data-rate):通过较大的数据负载能力减少帧数量,从而降低仲裁冲突概率。结合时间触发模式进一步优化调度。
    5.帧合并技术
    在应用层中,可以将多个低优先级数据帧合并为一个帧,减少仲裁失败的次数。

    通过协议层和应用层结合设计,低优先级帧可以被可靠地发送出去,保证系统的整体性能和稳定性。

    +10
    不赞一个?
    打赏鼓励一下!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|Archiver|手机版|小黑屋|酷德论坛 ( 苏ICP备16065247号-1 )|网站地图

    GMT+8, 2026-10-23 02:44 , Processed in 0.130701 second(s), 50 queries .

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

    快速回复 返回顶部 返回列表