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





