CAN發(fā)送器(上)
CAN(Controller Area Network)總線作為一種高可靠性、實時性的串行通信協(xié)議,已廣泛應用于汽車電子、工業(yè)控制、智能家居等眾多領(lǐng)域,其發(fā)送流程的嚴謹性和高效性是保障整個網(wǎng)絡(luò)穩(wěn)定運行的核心。要理解CAN發(fā)送流程,首先需要明確其核心設(shè)計理念——基于總線仲裁的非破壞性競爭機制,這一機制貫穿于發(fā)送過程的每一個環(huán)節(jié),確保多個節(jié)點同時發(fā)送數(shù)據(jù)時不會造成信息丟失,同時實現(xiàn)優(yōu)先級的有序調(diào)度。
當某個CAN節(jié)點需要發(fā)送數(shù)據(jù)時,流程的起點是數(shù)據(jù)的準備與封裝。發(fā)送節(jié)點的微控制器(MCU)首先將需要傳輸?shù)挠行?shù)據(jù)按照應用層協(xié)議的要求進行整理,這些數(shù)據(jù)可能是傳感器采集的物理量、執(zhí)行器的控制指令或是設(shè)備狀態(tài)信息。隨后,MCU會將這些有效數(shù)據(jù)傳遞給CAN控制器,CAN控制器則根據(jù)CAN協(xié)議的規(guī)范,將數(shù)據(jù)封裝成標準的CAN數(shù)據(jù)幀。幀結(jié)構(gòu)的構(gòu)建是這一階段的關(guān)鍵,包括幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC場、ACK場和幀結(jié)束七個部分,每個字段都有其特定的功能的——幀起始用于同步總線節(jié)點,控制場定義數(shù)據(jù)長度,CRC場用于錯誤檢測,而仲裁場則是決定發(fā)送優(yōu)先級的核心,其包含的標識符(ID)直接影響后續(xù)的總線競爭結(jié)果。值得注意的是,CAN協(xié)議分為標準幀(CAN 2.0A)和擴展幀(CAN 2.0B),兩者的仲裁場長度不同,標準幀標識符為11位,擴展幀為29位,這一差異會在后續(xù)的仲裁過程中體現(xiàn),但封裝邏輯的本質(zhì)保持一致。
數(shù)據(jù)幀封裝完成后,CAN控制器并不會立即將數(shù)據(jù)發(fā)送到總線上,而是首先進入總線狀態(tài)監(jiān)測階段。CAN總線采用雙線差分信號傳輸(CAN_H和CAN_L),正常情況下總線處于隱性電平狀態(tài)(CAN_H和CAN_L電壓差接近0V),只有當有節(jié)點發(fā)送數(shù)據(jù)時才會切換為顯性電平(CAN_H比CAN_L高約2V)。發(fā)送節(jié)點的CAN控制器通過監(jiān)測總線電平,判斷當前總線是否處于空閑狀態(tài)——如果總線為隱性電平,說明此時沒有其他節(jié)點正在發(fā)送數(shù)據(jù),控制器可以啟動發(fā)送流程;若檢測到顯性電平,則表明總線正被占用,節(jié)點需要等待,直到總線恢復隱性電平后再嘗試發(fā)送。這一監(jiān)測機制是避免總線沖突的第一道防線,確保每個節(jié)點都能在合適的時機接入總線。
總線空閑狀態(tài)確認后,發(fā)送節(jié)點正式啟動數(shù)據(jù)發(fā)送,此時進入最為關(guān)鍵的仲裁階段。CAN總線的核心優(yōu)勢之一就是其非破壞性仲裁機制,當多個節(jié)點同時檢測到總線空閑并啟動發(fā)送時,仲裁過程會自動進行,且不會導致任何數(shù)據(jù)丟失。仲裁的規(guī)則基于標識符(ID)的優(yōu)先級:標識符數(shù)值越小,優(yōu)先級越高。發(fā)送過程中,每個節(jié)點都會同時發(fā)送自己的標識符,并實時監(jiān)測總線上的電平與自己發(fā)送的電平是否一致。由于顯性電平具有優(yōu)先級高于隱性電平的特性,當兩個節(jié)點發(fā)送的標識符位不同時,發(fā)送隱性電平的節(jié)點會檢測到總線上的顯性電平與自身發(fā)送的信號不一致,從而判斷出存在優(yōu)先級更高的節(jié)點正在發(fā)送數(shù)據(jù),此時該節(jié)點會立即停止發(fā)送,切換為接收模式,等待下一次總線空閑;而發(fā)送顯性電平的節(jié)點則繼續(xù)發(fā)送后續(xù)位,直到整個標識符發(fā)送完成。這一過程持續(xù)進行,直到只有一個節(jié)點保持發(fā)送狀態(tài),該節(jié)點即獲得總線控制權(quán),后續(xù)將繼續(xù)發(fā)送數(shù)據(jù)幀的其余部分。例如,節(jié)點A的標識符為0x001(二進制00000000001),節(jié)點B的標識符為0x002(二進制00000000010),當兩者同時發(fā)送時,在第2位(從最低位計數(shù))節(jié)點A發(fā)送0,節(jié)點B發(fā)送1,此時總線電平為顯性(節(jié)點B發(fā)送的1),節(jié)點A檢測到不一致后停止發(fā)送,節(jié)點B則順利獲得仲裁權(quán),繼續(xù)發(fā)送數(shù)據(jù)。





