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

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

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

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

[復(fù)制鏈接]

586

主題

586

帖子

3544

積分

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

Rank: 4

積分
3544
跳轉(zhuǎn)到指定樓層
樓主
9 n, c1 L; I2 L( K6 }0 b' F& k
點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
0 \6 J, ]+ ~* w8 s  I/ P
7 J  n! O# W; _, R在仲裁過(guò)程中,所有節(jié)點(diǎn)同時(shí)監(jiān)視總線信號(hào)。- c0 _- U. v" x+ U7 P
) W* W' K  ~# {/ Z( S
當(dāng)一個(gè)節(jié)點(diǎn)在發(fā)送過(guò)程中檢測(cè)到總線上的信號(hào)與自己發(fā)送的不同(自身發(fā)送“1”卻檢測(cè)到“0”),它會(huì)立即退出仲裁,轉(zhuǎn)為監(jiān)聽(tīng)狀態(tài)。* w2 E$ k$ ~0 y5 J
, \5 H2 g$ Y0 h4 \) ~
最終,優(yōu)先級(jí)最高的節(jié)點(diǎn)贏得仲裁,成功發(fā)送數(shù)據(jù)。  w# W' M. j; W* j

! B! r7 z: F7 B這種機(jī)制保障了總線的高效利用,但也帶來(lái)了低優(yōu)先級(jí)幀可能長(zhǎng)期無(wú)法發(fā)送的風(fēng)險(xiǎn)。
! _; X1 W7 Y" g% @$ V
" A$ Y/ n8 n) m- k在極端情況下,如果高優(yōu)先級(jí)幀的發(fā)送間隔小于或等于低優(yōu)先級(jí)幀的發(fā)送間隔,低優(yōu)先級(jí)幀會(huì)持續(xù)在仲裁中失敗。這種情況稱(chēng)為“總線饑餓”或“優(yōu)先級(jí)反轉(zhuǎn)”問(wèn)題。" f: ^1 n! r9 q

8 g! N5 A2 S! K. H" Y& ?+ B1 S6 [5 C例如:高優(yōu)先級(jí)幀每5ms發(fā)送一次。低優(yōu)先級(jí)幀每10ms發(fā)送一次。- @/ t# s' d( W6 O6 k4 n

! I4 h+ H0 L' E4 D4 `, D& h如果兩個(gè)幀同時(shí)到達(dá)發(fā)送隊(duì)列,高優(yōu)先級(jí)幀將總是贏得仲裁,導(dǎo)致低優(yōu)先級(jí)幀可能永遠(yuǎn)無(wú)法發(fā)送。  o/ E5 R* N+ N9 w# ^
# V( _5 h  ~2 }* l5 Z
CAN協(xié)議本身并未直接解決優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題,因此需要通過(guò)系統(tǒng)設(shè)計(jì)和應(yīng)用層協(xié)議來(lái)確保低優(yōu)先級(jí)幀的發(fā)送。
) f. D7 [* w% o% I6 u& R( d. Z; T+ u+ v" S, e. U4 {
但可以通過(guò)以下措施解決:
  q, [5 @3 C0 `1- _- G, D3 J  L; g+ C# z; B
時(shí)間觸發(fā)通信調(diào)度(TTC)
; \6 {$ J" Y: S時(shí)間觸發(fā)通信調(diào)度通過(guò)預(yù)定義的時(shí)間表,確保各個(gè)節(jié)點(diǎn)在特定的時(shí)間段內(nèi)發(fā)送幀。如下:  X! D- F6 y! p6 Z, C
  • 周期性幀調(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ā)仲裁。
    0 R: {2 h( n& X; p; Y2 {; t+ Y/ u
    ; N0 J9 x9 a: f+ }
    2, o5 j* F/ N+ ^. @9 }" [9 K
    軟件死鎖檢測(cè)與重傳機(jī)制
    6 @' W/ C4 X. }" M; a' c  L節(jié)點(diǎn)內(nèi)部的軟件可以檢測(cè)低優(yōu)先級(jí)幀長(zhǎng)時(shí)間未成功發(fā)送的情況:如果檢測(cè)到幀長(zhǎng)期饑餓,可以通過(guò)人工增加重發(fā)頻率或強(qiáng)制暫停高優(yōu)先級(jí)幀的發(fā)送,給低優(yōu)先級(jí)幀留出發(fā)送機(jī)會(huì)。
    8 |* Z' D( g* o+ n: Z3
    " Q2 I1 m# p9 h9 ]2 R  r# A動(dòng)態(tài)優(yōu)先級(jí)調(diào)整7 G' i4 ~  T! _; T4 k9 ^7 e8 l5 e
    某些應(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í)。! c& z$ a( u' \8 {9 D$ Z! ^
    4
    : i1 D0 q  ^2 `CAN FD的應(yīng)用
    8 X( `8 r* ^: T  A+ ]& @4 e! c對(duì)于數(shù)據(jù)量較大的應(yīng)用,可以考慮CAN FD(Flexible Data-rate):通過(guò)較大的數(shù)據(jù)負(fù)載能力減少幀數(shù)量,從而降低仲裁沖突概率。結(jié)合時(shí)間觸發(fā)模式進(jìn)一步優(yōu)化調(diào)度。9 M! _3 {: ^; t4 `$ i+ U
    & J9 {* R# W' [/ v
    5# T% I9 k( H2 K' k' i1 q
    幀合并技術(shù)
    ( n; x$ g6 ~7 ~7 r* q2 y. L$ R. G在應(yīng)用層中,可以將多個(gè)低優(yōu)先級(jí)數(shù)據(jù)幀合并為一個(gè)幀,減少仲裁失敗的次數(shù)。
    ' h7 n6 c  u/ P9 @4 |
    ( C( ?: X0 H  D8 c8 p通過(guò)協(xié)議層和應(yīng)用層結(jié)合設(shè)計(jì),低優(yōu)先級(jí)幀可以被可靠地發(fā)送出去,保證系統(tǒng)的整體性能和穩(wěn)定性。' n9 t4 t" L, f" N: A# h0 L. V

    / q3 ]! w; z  g# L+ i% @0 O' l 0 A2 ^, V7 ]  ?* s; p3 d
    點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


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