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
: N8 B9 X6 S" [/ M" F
lg2kxsn550l64012787504.gif
; C) U2 K" \6 g+ d ]. V2 m& Y6 f
点击阅读原文,更精彩~ |