將CAN節點連線到匯流排後,可以在不禁用濾波的情況下接收匯流排上的所有CAN資料幀。 如果只需要接收 ID 範圍固定的資料幀,則可以配置掩碼程式碼和驗收程式碼來過濾資料幀。當資料幀在CAN匯流排上傳輸時,CAN節點使用接受過濾器來比較匯流排上資料幀的ID是否與節點的ID一致,如果ID一致,CAN控制器允許將接收到的資訊儲存在相應的暫存器中id,資料幀將被丟棄,以減少CAN控制器的工作量。 驗收過濾器由驗收暫存器 (ACR) 和驗收遮蔽暫存器 (AMR) 組成。 使用者配置驗收盾牌暫存器和驗收**暫存器,然後獲取相應的掩碼和驗收碼,對CAN資料幀進行過濾。 本文以SJA1000為例,其濾波方法分為單濾波和雙濾波兩種。 由模式暫存器AFM位控制,AFM = 1時的單個濾波器;AFM=0 是雙重濾波。
在雙濾波模式下,定義了兩個接受濾波器,只要接收到的資料幀通過其中乙個接受濾波器,就被認為是乙個有效幀,可以正常接收並儲存在暫存器中。 ACR0、ACR1、AMR0 和 AMR1 構成第乙個驗收濾波器,ACR2 和 ACR3 構成第二個驗收濾波器。 例如,資料幀的 ID 段的前兩個位元組,即 29 位 ID 的上 16 位參與過濾。 ACR0 和 ACR1 的控制項 ID 為 NO13-no.28、ACR2 和 ACR3 也將 ID 位控制為 No13-no.28,如表1所示。 這意味著 CAN 擴充套件了幀 ID 位 No13-no.28:這 16 位必須與這兩組接受中的一組一致,才能被節點接收並儲存在接收緩衝區中否則,資料框將被丟棄,從而產生兩個過濾器。
表1 AMR、ACR和控制ID位的對映關係
在單濾波模式下,AMR為“0”的所有位元對應的ACR位和單濾波資料對應的位元必須一致,才能認為已通過驗收濾波,如表2所示。 當接收到CAN標準幀時,資料段的11位ID、RTR位和前16位都參與濾波當接收到CAN擴充套件幀時,濾波涉及29位ID和RTR位,如圖1所示。
表2 AMR、ACR和過濾ID對應表
圖1 CAN標準幀和CAN擴充套件幀的幀格式示意圖。
我們的隔離式SPI UART轉CAN晶元CSM330A不使用單濾波器或雙濾波器進行接收濾波。 CSM330A的驗收過濾器由1個驗收盾牌暫存器和6個驗收**暫存器組成,使用者可以通過配置一組盾牌碼來“管理”6組驗收碼。 當掩碼的某位為1時,該位對應的驗收碼將被“啟用”,使能的“驗收碼”的“驗收碼”將與產品要接收的CAN幀的“幀ID”相同,CAN幀將被接收到接收緩衝區。 當掩碼的位值為0時,驗收碼不起作用,對應位的幀可以作為任意值接收,如表3所示。
表3 過濾碼和遮蔽碼的真值
CSM330A適用於工業通訊、電池測試、充電樁、軌道交通、樓宇自動化等領域。 CSM330A協議轉換晶元用於智慧型汽車駕駛員行為監測的應用方案中,如圖2所示。 ZLG主要為DMS行業客戶提供主控、供電、通訊保護等模組化解決方案。 主控為Cortex-A35 M1808 AI核心板,搭載自主研發影象感測技術和車載行為檢測系統解決方案。 可實現駕駛員識別、報警、駕駛員異常操作提醒等功能。
圖2 驅動行為檢測應用方案。