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

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

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

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

[復(fù)制鏈接]

660

主題

660

帖子

4567

積分

四級會員

Rank: 4

積分
4567
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-11-21 08:00:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

# ]* u; F1 \, f9 k點擊上方藍(lán)色字體,關(guān)注我們6 d# j# |, Q% K2 }$ W- u, j) v
; q' \' P+ M$ V' Z  n4 Q2 X
在仲裁過程中,所有節(jié)點同時監(jiān)視總線信號。  d2 [; D# E8 }# q  _2 m& L
0 J# t8 O3 {. q; i3 S- _# q; w  k
當(dāng)一個節(jié)點在發(fā)送過程中檢測到總線上的信號與自己發(fā)送的不同(自身發(fā)送“1”卻檢測到“0”),它會立即退出仲裁,轉(zhuǎn)為監(jiān)聽狀態(tài)。! ^! C5 O6 e- X4 k4 F$ l) S) S+ g
# l* B. i1 G4 m" {) }$ R
最終,優(yōu)先級最高的節(jié)點贏得仲裁,成功發(fā)送數(shù)據(jù)。0 O. u! T+ Z8 w8 Z2 V% N- e' @! c  h
0 o! J8 v! e: O
這種機(jī)制保障了總線的高效利用,但也帶來了低優(yōu)先級幀可能長期無法發(fā)送的風(fēng)險。" A) i( H0 }6 @% _

% |& G9 `- Z6 R6 F& e! H在極端情況下,如果高優(yōu)先級幀的發(fā)送間隔小于或等于低優(yōu)先級幀的發(fā)送間隔,低優(yōu)先級幀會持續(xù)在仲裁中失敗。這種情況稱為“總線饑餓”或“優(yōu)先級反轉(zhuǎn)”問題。9 M$ M% ^4 p' }* j

9 g- @& w2 _* m# h* Z例如:高優(yōu)先級幀每5ms發(fā)送一次。低優(yōu)先級幀每10ms發(fā)送一次。
) G( W. E' E  f1 I. Z1 z6 C
; H- l$ u) s$ P' o+ Z如果兩個幀同時到達(dá)發(fā)送隊列,高優(yōu)先級幀將總是贏得仲裁,導(dǎo)致低優(yōu)先級幀可能永遠(yuǎn)無法發(fā)送。
* s: J! Y) S& ~) \* B) z2 z0 f* K+ g* {
CAN協(xié)議本身并未直接解決優(yōu)先級反轉(zhuǎn)問題,因此需要通過系統(tǒng)設(shè)計和應(yīng)用層協(xié)議來確保低優(yōu)先級幀的發(fā)送。8 Z; R% i7 S5 G, _5 b" x
% |! s  C4 Y! Q! j
但可以通過以下措施解決:
( ]9 z! r6 ]# T8 t9 B, ^1
3 w& _6 \! e5 y4 g時間觸發(fā)通信調(diào)度(TTC)( J- i! e- a" j7 Z! A
時間觸發(fā)通信調(diào)度通過預(yù)定義的時間表,確保各個節(jié)點在特定的時間段內(nèi)發(fā)送幀。如下:
4 N# d, |- |0 s" E7 z9 Y$ s& a' G3 _
  • 周期性幀調(diào)度:定義不同優(yōu)先級幀的發(fā)送周期,確保每幀都有機(jī)會發(fā)送。例如,可以在5ms內(nèi)分配若干時間窗口給高優(yōu)先級和低優(yōu)先級幀。
  • 發(fā)送時間偏移:在節(jié)點內(nèi)引入發(fā)送時間偏移,使得高優(yōu)先級幀和低優(yōu)先級幀發(fā)送時不會總是同時觸發(fā)仲裁。1 K6 h2 B/ W$ ^# \( {% Y  v% c. \5 |
      }" m) j& H+ J
    2
    - ]) o% v' F! ]- c# B軟件死鎖檢測與重傳機(jī)制3 {. q* C$ z: D- R
    節(jié)點內(nèi)部的軟件可以檢測低優(yōu)先級幀長時間未成功發(fā)送的情況:如果檢測到幀長期饑餓,可以通過人工增加重發(fā)頻率或強(qiáng)制暫停高優(yōu)先級幀的發(fā)送,給低優(yōu)先級幀留出發(fā)送機(jī)會。
    / I& E- A' A8 t5 N9 j, |# w$ o3: f; s' p  A3 L9 {& B* k0 n
    動態(tài)優(yōu)先級調(diào)整6 Y# f6 y9 i/ t# H3 ~( b' B2 f
    某些應(yīng)用層協(xié)議(如CANopen或J1939)允許動態(tài)調(diào)整幀的優(yōu)先級。例如:在低優(yōu)先級幀因饑餓而長期無法發(fā)送時,可以暫時調(diào)高其優(yōu)先級。一旦發(fā)送成功,恢復(fù)其正常優(yōu)先級。! r8 ^8 T. G+ w- c
    4$ f" Y# E$ O9 A2 _% m; T
    CAN FD的應(yīng)用
    1 @/ d3 K' M2 f3 r6 s對于數(shù)據(jù)量較大的應(yīng)用,可以考慮CAN FD(Flexible Data-rate):通過較大的數(shù)據(jù)負(fù)載能力減少幀數(shù)量,從而降低仲裁沖突概率。結(jié)合時間觸發(fā)模式進(jìn)一步優(yōu)化調(diào)度。
    & J2 G+ k' j  H" H4 Y8 E# b1 C
    3 F; g! N  r( J1 F" r9 C& `0 B9 _& M$ p5! m3 Y5 E! q3 }" L/ u. y
    幀合并技術(shù)/ _0 ]1 w- o1 f5 g+ g% f
    在應(yīng)用層中,可以將多個低優(yōu)先級數(shù)據(jù)幀合并為一個幀,減少仲裁失敗的次數(shù)。7 w; W( _* J- Y' A% l
    , o* x+ J( u3 `+ [2 }" s
    通過協(xié)議層和應(yīng)用層結(jié)合設(shè)計,低優(yōu)先級幀可以被可靠地發(fā)送出去,保證系統(tǒng)的整體性能和穩(wěn)定性。9 `; t; N. i" \% n7 _+ f5 C+ N
    # D* f5 `  G9 p6 X
    9 w: F6 x, x& w) ^( l" u" C0 e, ^
    點擊閱讀原文,更精彩~
  • 回復(fù)

    使用道具 舉報

    發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


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