CAN 異步通信的技術(shù)基石:幀結(jié)構(gòu)與位同步機(jī)制
CAN 異步通信的實(shí)現(xiàn),依賴于精密設(shè)計的 “幀結(jié)構(gòu)” 與 “位同步機(jī)制”—— 幀結(jié)構(gòu)界定了數(shù)據(jù)的組織形式與邊界,位同步則解決了分布式時鐘偏差導(dǎo)致的采樣誤差,兩者共同構(gòu)成了 CAN 異步通信的技術(shù)核心,確保即使節(jié)點(diǎn)時鐘存在 ±10% 偏差,仍能準(zhǔn)確傳輸數(shù)據(jù)。
(一)幀結(jié)構(gòu):異步通信的 “數(shù)據(jù)容器”
CAN 總線定義了四種核心幀類型(數(shù)據(jù)幀、遠(yuǎn)程幀、錯誤幀、過載幀),其中數(shù)據(jù)幀是異步數(shù)據(jù)傳輸?shù)暮诵妮d體,其結(jié)構(gòu)通過 “固定字段 + 可變字段” 的組合,實(shí)現(xiàn)了 “自界定、可校驗(yàn)、易同步” 的設(shè)計目標(biāo)。一個標(biāo)準(zhǔn) CAN 數(shù)據(jù)幀(CAN 2.0A)由 7 個字段組成,從幀起始到幀結(jié)束,每個字段都承擔(dān)著異步通信的關(guān)鍵功能:
幀起始(Start of Frame, SOF):1 位顯性位(邏輯 0),是異步通信的 “同步觸發(fā)信號”。由于 CAN 節(jié)點(diǎn)無全局時鐘,接收方平時處于監(jiān)聽總線的隱性位(邏輯 1)狀態(tài),當(dāng)檢測到顯性位時,立即啟動位同步過程,調(diào)整本地采樣時鐘,確保后續(xù)位的采樣時機(jī)準(zhǔn)確。幀起始的顯性位是整個幀的 “啟動標(biāo)志”,所有節(jié)點(diǎn)通過它實(shí)現(xiàn)幀級別的同步。
仲裁場(Arbitration Field):包含 11 位標(biāo)準(zhǔn) ID(CAN 2.0A)或 29 位擴(kuò)展 ID(CAN 2.0B),用于 “節(jié)點(diǎn)身份標(biāo)識” 與 “優(yōu)先級仲裁”。在異步通信中,多節(jié)點(diǎn)可能同時發(fā)送數(shù)據(jù),仲裁場通過 “顯性位優(yōu)先” 規(guī)則解決沖突:發(fā)送節(jié)點(diǎn)逐位比較自身 ID 與總線位 —— 若發(fā)送顯性位而總線為隱性位,說明存在更高優(yōu)先級節(jié)點(diǎn)(ID 數(shù)值越小優(yōu)先級越高),則立即停止發(fā)送,轉(zhuǎn)為接收;若所有位比較一致,則獲得總線控制權(quán),繼續(xù)發(fā)送后續(xù)字段。這種非破壞性仲裁確保了高優(yōu)先級數(shù)據(jù)(如汽車剎車幀 ID=0x001)不會被低優(yōu)先級數(shù)據(jù)(如車窗控制幀 ID=0x100)打斷,且無需重發(fā)已發(fā)送的仲裁位,提升了異步通信的實(shí)時性。
控制場(Control Field):6 位,包含 2 位 IDE 位(ID 類型標(biāo)志,0 = 標(biāo)準(zhǔn) ID,1 = 擴(kuò)展 ID)與 4 位 DLC 位(數(shù)據(jù)長度碼,0~8 字節(jié))。IDE 位用于區(qū)分 ID 類型,確保接收方正確解析后續(xù)字段;DLC 位明確數(shù)據(jù)場的字節(jié)數(shù),避免接收方因數(shù)據(jù)長度未知導(dǎo)致的解析錯誤 —— 在異步通信中,數(shù)據(jù)長度不固定,DLC 位為接收方提供了關(guān)鍵的 “數(shù)據(jù)邊界信息”,例如 DLC=2 表示數(shù)據(jù)場包含 2 字節(jié)數(shù)據(jù),接收方只需讀取 2 字節(jié)即可,無需等待停止位。
數(shù)據(jù)場(Data Field):0~8 字節(jié)(CAN 2.0)或 0~64 字節(jié)(CAN FD),是異步通信的 “數(shù)據(jù)載體”。數(shù)據(jù)場的長度由 DLC 位定義,支持靈活傳輸不同大小的數(shù)據(jù)(如傳感器的 1 字節(jié)狀態(tài)數(shù)據(jù)、發(fā)動機(jī)的 4 字節(jié)轉(zhuǎn)速數(shù)據(jù))。在異步傳輸中,數(shù)據(jù)場無需固定長度,按需分配字節(jié)數(shù),既節(jié)省總線帶寬,又適應(yīng)不同設(shè)備的通信需求。
CRC 場(Cyclic Redundancy Check Field):15 位 CRC 校驗(yàn)碼 + 1 位 CRC 界定符(隱性位),用于 “數(shù)據(jù)完整性校驗(yàn)”。由于異步通信易受電磁干擾(如汽車射頻、工業(yè)電機(jī)噪聲)導(dǎo)致數(shù)據(jù)位翻轉(zhuǎn),CRC 場通過多項(xiàng)式運(yùn)算(CAN 協(xié)議規(guī)定的 CRC-15 多項(xiàng)式)對幀起始至數(shù)據(jù)場的所有位進(jìn)行校驗(yàn),接收方計算的 CRC 值與發(fā)送方不一致時,判定為 CRC 錯誤,立即發(fā)送錯誤幀,觸發(fā)重發(fā)機(jī)制,確保數(shù)據(jù)可靠。
ACK 場(Acknowledgment Field):2 位,包含 1 位 ACK 槽(隱性位)與 1 位 ACK 界定符(隱性位)。在異步通信中,發(fā)送方無法直接確認(rèn)接收方是否收到數(shù)據(jù),ACK 場通過 “分布式確認(rèn)” 解決這一問題:發(fā)送方在 ACK 槽發(fā)送隱性位,所有正確接收幀的節(jié)點(diǎn)(包括非目標(biāo)節(jié)點(diǎn))在 ACK 槽發(fā)送顯性位,若發(fā)送方檢測到 ACK 槽為顯性位,說明至少有一個節(jié)點(diǎn)正確接收;若為隱性位,則判定為 ACK 錯誤,觸發(fā)重發(fā)。這種分布式確認(rèn)無需接收方單獨(dú)發(fā)送確認(rèn)幀,簡化了異步通信的交互流程,提升了效率。
幀結(jié)束(End of Frame, EOF):7 位隱性位,是異步通信的 “結(jié)束標(biāo)志”。接收方檢測到 7 個連續(xù)隱性位時,確認(rèn)幀傳輸完成,釋放總線資源,準(zhǔn)備接收下一幀。幀結(jié)束的隱性位序列既避免了與下一幀的幀起始(顯性位)混淆,又為節(jié)點(diǎn)提供了 “幀間隔” 時間,用于處理已接收數(shù)據(jù)或準(zhǔn)備發(fā)送新數(shù)據(jù)。
除數(shù)據(jù)幀外,遠(yuǎn)程幀(用于請求數(shù)據(jù))、錯誤幀(用于報告錯誤)、過載幀(用于通知節(jié)點(diǎn)延遲接收)的結(jié)構(gòu)均圍繞 “異步通信” 設(shè)計 —— 遠(yuǎn)程幀無數(shù)據(jù)場,通過 ID 請求目標(biāo)節(jié)點(diǎn)發(fā)送數(shù)據(jù);錯誤幀包含 6 位錯誤標(biāo)志(顯性位或隱性位)與 8 位錯誤界定符(隱性位),用于向所有節(jié)點(diǎn)廣播錯誤;過載幀與錯誤幀結(jié)構(gòu)類似,用于在接收方緩沖區(qū)滿時,通知發(fā)送方延遲發(fā)送。這些幀類型共同構(gòu)成了 CAN 異步通信的 “完整協(xié)議?!?,覆蓋了數(shù)據(jù)傳輸、請求、錯誤處理、流量控制的全流程。
(二)位同步機(jī)制:解決分布式時鐘偏差的核心
CAN 節(jié)點(diǎn)的本地時鐘由獨(dú)立晶振提供,不同節(jié)點(diǎn)的時鐘頻率可能存在偏差(如 ±5%~±10%),若不進(jìn)行同步,接收方會因采樣時機(jī)偏移導(dǎo)致數(shù)據(jù)誤判(如將顯性位采樣為隱性位)。CAN 的 “位同步機(jī)制” 通過 “硬同步” 與 “軟同步” 結(jié)合,動態(tài)調(diào)整接收方的采樣時鐘,確保即使在時鐘偏差較大的情況下,仍能準(zhǔn)確采樣每一位數(shù)據(jù)。
CAN 總線的每一位時間由 “同步段(SYNC_SEG)”、“傳播段(PROP_SEG)”、“相位緩沖段 1(PHASE_SEG1)”、“相位緩沖段 2(PHASE_SEG2)” 四個部分組成,總時長為 8~25 個時間量子(TQ,Time Quantum,由節(jié)點(diǎn)時鐘分頻得到,如 8MHz 時鐘分頻為 8,TQ=1μs):
同步段(SYNC_SEG):1 個 TQ,用于 “硬同步”。接收方檢測到總線從隱性位變?yōu)轱@性位(幀起始或仲裁位的電平跳變)時,立即將本地位時鐘的同步段與總線跳變對齊,強(qiáng)制調(diào)整本地時鐘相位,這一過程稱為硬同步。硬同步僅在檢測到電平跳變時執(zhí)行,確保幀起始的第一位采樣準(zhǔn)確。
傳播段(PROP_SEG):1~8 個 TQ,用于補(bǔ)償 “總線傳輸延遲”。在分布式系統(tǒng)中,總線長度可能達(dá)數(shù)十米(如汽車總線),信號從發(fā)送方傳輸?shù)浇邮辗酱嬖谘舆t(如 50 米雙絞線的傳輸延遲約 0.25μs),傳播段的時長需覆蓋這一延遲,確保接收方在信號穩(wěn)定后再采樣。
相位緩沖段 1(PHASE_SEG1):1~8 個 TQ,用于 “軟同步”。接收方在相位緩沖段 1 的末尾(采樣點(diǎn))采樣總線電平,若采樣時發(fā)現(xiàn)總線電平與本地時鐘預(yù)期電平不一致(如本地時鐘認(rèn)為當(dāng)前位應(yīng)為顯性位,總線實(shí)際為隱性位),則通過 “相位緩沖段調(diào)整” 增加 PHASE_SEG1 的時長(最多增加 8 個 TQ),延遲采樣點(diǎn),直到采樣到正確電平,這一過程稱為軟同步。軟同步可動態(tài)補(bǔ)償時鐘頻率偏差,確保后續(xù)位的采樣準(zhǔn)確。
相位緩沖段 2(PHASE_SEG2):1~8 個 TQ,作為 PHASE_SEG1 的補(bǔ)充,確保位時間總時長穩(wěn)定。若 PHASE_SEG1 因軟同步被延長,PHASE_SEG2 會相應(yīng)縮短,維持位時間不變,避免位頻率偏移。
例如,某 CAN 節(jié)點(diǎn)的位時間配置為 10TQ(SYNC_SEG=1TQ,PROP_SEG=2TQ,PHASE_SEG1=4TQ,PHASE_SEG2=3TQ),本地時鐘為 8MHz(TQ=1μs),位速率為 100kbps(1 位 = 10μs)。當(dāng)接收方檢測到幀起始的顯性位跳變時,執(zhí)行硬同步,將同步段與跳變對齊;在 PHASE_SEG1 末尾(第 7TQ,7μs 時)采樣第一位數(shù)據(jù),若發(fā)現(xiàn)總線電平與預(yù)期一致,則正常采樣;若不一致(如時鐘偏差導(dǎo)致本地時鐘快于總線),則延長 PHASE_SEG1 至 6TQ,在第 9TQ(9μs 時)重新采樣,確保數(shù)據(jù)準(zhǔn)確。
這種位同步機(jī)制使 CAN 總線能在節(jié)點(diǎn)時鐘偏差 ±10% 的情況下,實(shí)現(xiàn) 1Mbps 的最高位速率(CAN 2.0),即使在長距離總線(如 1000 米雙絞線,位速率 50kbps)中,仍能保持穩(wěn)定通信,完全適配分布式異步通信的需求。





