电子产业一站式赋能平台

PCB联盟网

搜索
查看: 153|回复: 0
收起左侧

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

[复制链接]

1001

主题

1001

帖子

8805

积分

高级会员

Rank: 5Rank: 5

积分
8805
发表于 2024-11-21 08:00:00 | 显示全部楼层 |阅读模式

uv0tz4vuv0s64012787303.gif

uv0tz4vuv0s64012787303.gif

4 b# h. t3 G) Z  y8 X! m点击上方蓝色字体,关注我们. G, I7 \# J+ M# `& S& q  J
# X6 g2 ^; A( ]+ k. {, i- T
在仲裁过程中,所有节点同时监视总线信号。
) g- a, {5 z. k2 ~0 W* F
/ o. |& i+ J! X7 B4 x; C当一个节点在发送过程中检测到总线上的信号与自己发送的不同(自身发送“1”却检测到“0”),它会立即退出仲裁,转为监听状态。1 x9 `# I0 ]- h, [6 ?" @

9 X* U2 ?! A( v- I9 D最终,优先级最高的节点赢得仲裁,成功发送数据。4 @) m& X, U) e9 T. Y4 U, M/ Q
4 i; i) e( O1 X& J' G! u) L
这种机制保障了总线的高效利用,但也带来了低优先级帧可能长期无法发送的风险。' t! C" M7 j, m5 ?$ P+ j: D
7 m$ i* v! L- O' K( f2 m# }# K
在极端情况下,如果高优先级帧的发送间隔小于或等于低优先级帧的发送间隔,低优先级帧会持续在仲裁中失败。这种情况称为“总线饥饿”或“优先级反转”问题。( C1 I, I1 F/ U7 r
. t7 @7 D/ |7 x2 a. q
例如:高优先级帧每5ms发送一次。低优先级帧每10ms发送一次。) I6 j$ P9 b* Z' @" O( u5 i1 C' Y
, t' o5 f$ H) a! [, b& n+ y! O
如果两个帧同时到达发送队列,高优先级帧将总是赢得仲裁,导致低优先级帧可能永远无法发送。
6 Z' g' o- \# [/ k6 N1 {# |
$ t* w, @" ?5 ~/ @CAN协议本身并未直接解决优先级反转问题,因此需要通过系统设计和应用层协议来确保低优先级帧的发送。
* @; _  b2 W7 @  m# \4 R% }
/ W+ ^* W- V# z$ W0 d) P但可以通过以下措施解决:
$ ^6 q8 \, b. I1- u- \! {. ?7 a$ \: V: l+ W1 p
时间触发通信调度(TTC)
: i3 \" a) X; W- R9 }" o时间触发通信调度通过预定义的时间表,确保各个节点在特定的时间段内发送帧。如下:
/ z8 A* J, e: d; t8 k6 B  s
  • 周期性帧调度:定义不同优先级帧的发送周期,确保每帧都有机会发送。例如,可以在5ms内分配若干时间窗口给高优先级和低优先级帧。
  • 发送时间偏移:在节点内引入发送时间偏移,使得高优先级帧和低优先级帧发送时不会总是同时触发仲裁。
    % k5 ^. r% ^. ?6 I7 N7 `2 v: P

    3 T: b" l8 l) X) H! Z3 h; O2
    . _% c+ Q% M2 i+ c1 C软件死锁检测与重传机制
    4 n' L5 h* A" C) T节点内部的软件可以检测低优先级帧长时间未成功发送的情况:如果检测到帧长期饥饿,可以通过人工增加重发频率或强制暂停高优先级帧的发送,给低优先级帧留出发送机会。( {' b4 A  ]" T% H5 h  s
    3
    : g! r' x; W3 S1 q$ p3 Y, R动态优先级调整* g9 _/ b* |, b2 ~
    某些应用层协议(如CANopen或J1939)允许动态调整帧的优先级。例如:在低优先级帧因饥饿而长期无法发送时,可以暂时调高其优先级。一旦发送成功,恢复其正常优先级。
    : _3 a# D8 A) K& t4
    6 M' K0 j0 ]9 O, I( TCAN FD的应用
    ; X7 c" U6 y/ t  I. j对于数据量较大的应用,可以考虑CAN FD(Flexible Data-rate):通过较大的数据负载能力减少帧数量,从而降低仲裁冲突概率。结合时间触发模式进一步优化调度。
    " C; k9 O! I# P) S; a/ c  R
    * _$ c  w9 J9 A5
    9 a) m+ O9 s- M. Y& y4 E$ f! s1 U帧合并技术
    1 X6 B2 v; M/ _' c4 p3 K2 j在应用层中,可以将多个低优先级数据帧合并为一个帧,减少仲裁失败的次数。
    1 x% M/ \+ V- U# u) i- e8 x* V$ R; O" C/ Y0 r4 T" ^
    通过协议层和应用层结合设计,低优先级帧可以被可靠地发送出去,保证系统的整体性能和稳定性。7 w' }0 j, T5 L/ r

    tpcxnm0cwuh64012787404.jpg

    tpcxnm0cwuh64012787404.jpg
    : N8 B9 X6 S" [/ M" F

    lg2kxsn550l64012787504.gif

    lg2kxsn550l64012787504.gif
    ; C) U2 K" \6 g+ d  ]. V2 m& Y6 f
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表