正常模式:CAN 總線的 “核心通信狀態(tài)”
正常模式是 CAN 節(jié)點(diǎn)最主要的工作模式,也是 CAN 總線實(shí)現(xiàn) “多節(jié)點(diǎn)實(shí)時(shí)通信” 的基礎(chǔ)。在該模式下,CAN 控制器具備完整的 “發(fā)送 - 接收 - 仲裁 - 錯(cuò)誤處理” 能力:既能主動(dòng)發(fā)送數(shù)據(jù)幀、遠(yuǎn)程幀,也能接收總線上的所有幀;在多節(jié)點(diǎn)同時(shí)發(fā)送時(shí),通過 “非破壞性位仲裁” 機(jī)制(顯性位優(yōu)先于隱性位)決定發(fā)送優(yōu)先級(jí),避免總線沖突;同時(shí)通過 “位錯(cuò)誤”“填充錯(cuò)誤”“CRC 錯(cuò)誤” 等檢測(cè)機(jī)制,實(shí)時(shí)監(jiān)控通信質(zhì)量,若發(fā)現(xiàn)錯(cuò)誤則發(fā)送錯(cuò)誤幀,并更新錯(cuò)誤計(jì)數(shù)器。正常模式的核心目標(biāo)是 “高效、可靠地完成數(shù)據(jù)交互”,是汽車 ECU、工業(yè)傳感器、智能設(shè)備等節(jié)點(diǎn)的默認(rèn)工作模式。
(一)正常模式的技術(shù)細(xì)節(jié):仲裁與錯(cuò)誤處理的閉環(huán)
正常模式下,CAN 控制器的工作流程可分為 “發(fā)送流程” 與 “接收流程”,兩者均依賴總線的 “顯性位(Dominant Bit,邏輯 0)” 與 “隱性位(Recessive Bit,邏輯 1)” 交互規(guī)則。
在發(fā)送流程中,節(jié)點(diǎn)首先檢查總線狀態(tài):若總線為隱性位(空閑),則開始發(fā)送幀起始位(顯性位);若總線為顯性位(其他節(jié)點(diǎn)正在發(fā)送),則監(jiān)聽總線,參與仲裁。仲裁階段,發(fā)送節(jié)點(diǎn)將自己的標(biāo)識(shí)符(ID)位與總線位逐位比較:若發(fā)送的是顯性位,而總線位為隱性位,說明存在更高優(yōu)先級(jí)節(jié)點(diǎn)(ID 更小的節(jié)點(diǎn),因 CAN ID 越小優(yōu)先級(jí)越高),則立即停止發(fā)送,轉(zhuǎn)為接收狀態(tài);若所有位比較一致,則繼續(xù)發(fā)送后續(xù)字段(控制場(chǎng)、數(shù)據(jù)場(chǎng)、CRC 場(chǎng)等)。這種仲裁機(jī)制的 “非破壞性” 體現(xiàn)在:優(yōu)先級(jí)最高的節(jié)點(diǎn)能持續(xù)發(fā)送,無需重新發(fā)送,確保通信的實(shí)時(shí)性 —— 例如,汽車的 “剎車信號(hào)幀”(ID=0x001)優(yōu)先級(jí)高于 “車窗控制幀”(ID=0x100),緊急剎車時(shí),剎車信號(hào)能優(yōu)先占用總線,避免延遲導(dǎo)致安全風(fēng)險(xiǎn)。
在接收流程中,節(jié)點(diǎn)始終監(jiān)聽總線,當(dāng)檢測(cè)到幀起始位時(shí),開始同步總線時(shí)鐘,逐位接收幀字段。接收過程中,控制器會(huì)實(shí)時(shí)進(jìn)行錯(cuò)誤檢測(cè):若接收位與總線位不一致(位錯(cuò)誤)、連續(xù) 5 個(gè)相同位未插入填充位(填充錯(cuò)誤)、CRC 校驗(yàn)不匹配(CRC 錯(cuò)誤),則立即發(fā)送 “錯(cuò)誤幀”(6 個(gè)顯性位的錯(cuò)誤標(biāo)志 + 8 個(gè)隱性位的錯(cuò)誤界定符),并根據(jù)錯(cuò)誤類型更新錯(cuò)誤計(jì)數(shù)器(如位錯(cuò)誤會(huì)使 TEC 或 REC 加 8)。若接收幀的 ID 與自身 “驗(yàn)收濾波器” 配置匹配(如掩碼濾波后的 ID 一致),則將數(shù)據(jù)存入接收緩沖區(qū),同時(shí)置位 “接收完成標(biāo)志”,通知 MCU 讀取數(shù)據(jù);若不匹配,則忽略該幀,不占用 MCU 資源。這種 “過濾 - 接收 - 錯(cuò)誤處理” 的流程,確保節(jié)點(diǎn)僅接收所需數(shù)據(jù),同時(shí)對(duì)總線錯(cuò)誤做出快速響應(yīng)。
(二)正常模式的應(yīng)用場(chǎng)景:從汽車到工業(yè)的實(shí)時(shí)通信
正常模式是 CAN 系統(tǒng)的 “默認(rèn)工作狀態(tài)”,所有需要主動(dòng)參與總線通信的節(jié)點(diǎn)均運(yùn)行在此模式下。在汽車電子中,發(fā)動(dòng)機(jī) ECU、ABS 控制器、車身控制模塊(BCM)等核心節(jié)點(diǎn)均工作在正常模式:發(fā)動(dòng)機(jī) ECU 每 10ms 發(fā)送一次 “轉(zhuǎn)速 - 水溫 - 油壓” 數(shù)據(jù)幀,ABS 控制器在檢測(cè)到車輪抱死時(shí)發(fā)送 “剎車控制幀”,BCM 接收 “車門開關(guān)幀” 并發(fā)送 “車燈控制幀”,各節(jié)點(diǎn)通過正常模式下的仲裁機(jī)制,確保緊急信號(hào)(如 ABS 幀)優(yōu)先傳輸,非緊急信號(hào)(如車窗控制幀)有序排隊(duì)。
在工業(yè)控制中,PLC、伺服驅(qū)動(dòng)器、傳感器節(jié)點(diǎn)也以正常模式為主:溫度傳感器每 50ms 發(fā)送一次 “溫度數(shù)據(jù)幀”,PLC 接收后發(fā)送 “電機(jī)調(diào)速幀” 至伺服驅(qū)動(dòng)器,伺服驅(qū)動(dòng)器根據(jù)指令調(diào)整轉(zhuǎn)速。正常模式下的錯(cuò)誤處理機(jī)制在此場(chǎng)景中尤為重要 —— 若傳感器與 PLC 之間的總線出現(xiàn)短路(導(dǎo)致連續(xù)位錯(cuò)誤),傳感器的 TEC 會(huì)快速增長(zhǎng),當(dāng) TEC 超過 96 時(shí),控制器會(huì)進(jìn)入 “錯(cuò)誤主動(dòng)模式”(Error Active Mode),發(fā)送主動(dòng)錯(cuò)誤幀提醒其他節(jié)點(diǎn);若錯(cuò)誤持續(xù),TEC 超過 255,則切換至總線離線模式,避免故障傳感器持續(xù)發(fā)送錯(cuò)誤幀,干擾工業(yè)生產(chǎn)線的正常通信。