電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 8|回復(fù): 0
收起左側(cè)

CAN總線如何保障低優(yōu)先級(jí)數(shù)據(jù)不被餓死?

[復(fù)制鏈接]

586

主題

586

帖子

3544

積分

四級(jí)會(huì)員

Rank: 4

積分
3544
跳轉(zhuǎn)到指定樓層
樓主
2 o. t& _- J# l* q4 t
點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
' ]4 \2 q4 \+ C% r$ h4 [3 F' s( G& i+ P6 @0 v
在仲裁過程中,所有節(jié)點(diǎn)同時(shí)監(jiān)視總線信號(hào)。
: }# j" B3 W7 {( C% v8 k7 x* O+ g- O2 a
當(dāng)一個(gè)節(jié)點(diǎn)在發(fā)送過程中檢測(cè)到總線上的信號(hào)與自己發(fā)送的不同(自身發(fā)送“1”卻檢測(cè)到“0”),它會(huì)立即退出仲裁,轉(zhuǎn)為監(jiān)聽狀態(tài)。
7 ?6 d( ~( W+ o. b3 A
; R6 e) d( J8 u" B+ u& t1 l7 ~最終,優(yōu)先級(jí)最高的節(jié)點(diǎn)贏得仲裁,成功發(fā)送數(shù)據(jù)。* o. L1 w/ J. d5 r

% p/ i) l  b# ~, b. p6 v3 ~3 q這種機(jī)制保障了總線的高效利用,但也帶來(lái)了低優(yōu)先級(jí)幀可能長(zhǎng)期無(wú)法發(fā)送的風(fēng)險(xiǎn)。
& u9 u8 I4 c2 ?7 `! i2 `# X! R/ [7 A* h1 D  E
在極端情況下,如果高優(yōu)先級(jí)幀的發(fā)送間隔小于或等于低優(yōu)先級(jí)幀的發(fā)送間隔,低優(yōu)先級(jí)幀會(huì)持續(xù)在仲裁中失敗。這種情況稱為“總線饑餓”或“優(yōu)先級(jí)反轉(zhuǎn)”問題。& q% z8 a7 u" E$ t
  P- M8 W6 m9 n& I  c1 d7 N' d
例如:高優(yōu)先級(jí)幀每5ms發(fā)送一次。低優(yōu)先級(jí)幀每10ms發(fā)送一次。0 B8 c3 x6 ^4 m$ H0 {! _8 h+ O
+ E' P+ K# e% b
如果兩個(gè)幀同時(shí)到達(dá)發(fā)送隊(duì)列,高優(yōu)先級(jí)幀將總是贏得仲裁,導(dǎo)致低優(yōu)先級(jí)幀可能永遠(yuǎn)無(wú)法發(fā)送。- b" g. S! B. d

2 J' F( W$ `; g$ C) K+ |5 a% Z8 zCAN協(xié)議本身并未直接解決優(yōu)先級(jí)反轉(zhuǎn)問題,因此需要通過系統(tǒng)設(shè)計(jì)和應(yīng)用層協(xié)議來(lái)確保低優(yōu)先級(jí)幀的發(fā)送。! \  r8 m4 `# N( W: Q+ W
! i: ]9 g7 u+ s! e0 R7 `6 K! F- o% g8 n
但可以通過以下措施解決:+ z1 B5 H* T/ W3 g2 G6 O1 }6 l1 F( u
1
0 @. f% ^: [3 u( H( S- h時(shí)間觸發(fā)通信調(diào)度(TTC)
% S- I: L8 ?: p3 }# y' B時(shí)間觸發(fā)通信調(diào)度通過預(yù)定義的時(shí)間表,確保各個(gè)節(jié)點(diǎn)在特定的時(shí)間段內(nèi)發(fā)送幀。如下:
) R# E: w+ P! I4 ]
  • 周期性幀調(diào)度:定義不同優(yōu)先級(jí)幀的發(fā)送周期,確保每幀都有機(jī)會(huì)發(fā)送。例如,可以在5ms內(nèi)分配若干時(shí)間窗口給高優(yōu)先級(jí)和低優(yōu)先級(jí)幀。
  • 發(fā)送時(shí)間偏移:在節(jié)點(diǎn)內(nèi)引入發(fā)送時(shí)間偏移,使得高優(yōu)先級(jí)幀和低優(yōu)先級(jí)幀發(fā)送時(shí)不會(huì)總是同時(shí)觸發(fā)仲裁。
    / t) }: N% |9 z, i. t; z

    + ^3 W4 u( k+ ^9 `, [  H2
    6 z3 V* X0 b9 r% P: S軟件死鎖檢測(cè)與重傳機(jī)制
    : k2 l$ D. \4 M* f1 Q( ^: b3 ^節(jié)點(diǎn)內(nèi)部的軟件可以檢測(cè)低優(yōu)先級(jí)幀長(zhǎng)時(shí)間未成功發(fā)送的情況:如果檢測(cè)到幀長(zhǎng)期饑餓,可以通過人工增加重發(fā)頻率或強(qiáng)制暫停高優(yōu)先級(jí)幀的發(fā)送,給低優(yōu)先級(jí)幀留出發(fā)送機(jī)會(huì)。3 ?* v. ~& ^* X
    3; U& K; U' _, g* {+ x2 s
    動(dòng)態(tài)優(yōu)先級(jí)調(diào)整
    & r3 Y5 ^3 _' d3 \0 k- a某些應(yīng)用層協(xié)議(如CANopen或J1939)允許動(dòng)態(tài)調(diào)整幀的優(yōu)先級(jí)。例如:在低優(yōu)先級(jí)幀因饑餓而長(zhǎng)期無(wú)法發(fā)送時(shí),可以暫時(shí)調(diào)高其優(yōu)先級(jí)。一旦發(fā)送成功,恢復(fù)其正常優(yōu)先級(jí)。2 U. x7 h0 p6 m  S/ r; ~9 g5 T* }
    41 B9 o. C: ]6 q  d2 P
    CAN FD的應(yīng)用
    9 m# m+ u6 u5 V9 |對(duì)于數(shù)據(jù)量較大的應(yīng)用,可以考慮CAN FD(Flexible Data-rate):通過較大的數(shù)據(jù)負(fù)載能力減少幀數(shù)量,從而降低仲裁沖突概率。結(jié)合時(shí)間觸發(fā)模式進(jìn)一步優(yōu)化調(diào)度。
    ) r' q2 c# n# w( ~; |; c0 R
    . v& |3 ^* |, v" E56 |& }; u: z: n6 ^
    幀合并技術(shù)" a2 F) q, k; h- X1 K$ o
    在應(yīng)用層中,可以將多個(gè)低優(yōu)先級(jí)數(shù)據(jù)幀合并為一個(gè)幀,減少仲裁失敗的次數(shù)。
    8 T& {$ J5 ~% {# Y- l3 ^
    . i4 \4 t, z) R8 |3 ~( i0 u通過協(xié)議層和應(yīng)用層結(jié)合設(shè)計(jì),低優(yōu)先級(jí)幀可以被可靠地發(fā)送出去,保證系統(tǒng)的整體性能和穩(wěn)定性。
    8 t( ]. t/ f' A 7 u; T2 b5 j/ ]1 R  N# E8 w0 \

    + W$ k& [7 x6 n1 B點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表