董庭瓊 劉志浩 邵亞軍
(中國人民解放軍第二炮兵工程大學 陜西 西安 710025)
CAN-bus(Controller Area Network)即控制器局域網是由德國Bosch公司為汽車應用而開發的多主機局部網絡,主要應用于汽車的監測和控制。德國Bosch公司開發CAN總線的最初目的是為了解決汽車上數量眾多的電子設備之間的通信問題,減少電子設備之間繁多的信號線。于是設計了一個單一的網絡總線,使所有的外圍器件可以被掛接在該總線上。作為一種技術先進、可靠性高、功能完善、成本合理的遠程網絡通訊控制方式,已被廣泛應用到各個領域中?;贑AN總線的優越性和廣泛應用,許多著名的芯片生產商都推出了獨立的CAN控制器芯片,或者帶有CAN控制器的MCU芯片。

圖1 CAN控制器結構圖
在CAN總線網絡的設計過程中,濾波器的設置起著非常重要的作用,濾波器設置的好壞將直接影響整個系統的實時性和可靠性,所以本文針對CAN控制器中的濾波器的設置方法進行研究探討,并根據自己的經驗總結出一套濾波器設置的方法。
CAN控制器用于將欲收發的信息報文轉換為符合CAN規范的CAN幀,通過CAN收發器在CAN總線上交換信息。CAN控制器主要包括接口管理邏輯、CAN核心模塊、發送緩沖器、驗收濾波器、接收FIFO等部分組成,如圖1所示。
(1)接口管理邏輯
接口管理邏輯用于連接外部主控制器,解釋來自主控制器的命令,控制CAN控制器寄存器的尋址,并向主控制器提供中斷信息和狀態信息。
(2)核心模塊
核心模塊在收到一個報文時會根據CAN規范將串行位流轉換成用于接收的并行數據,發送一個報文時則相反。
(3)發送緩沖器
發送緩沖器用于存儲一個完整的報文,當CAN控制器發送初始化時,接口管理邏輯會使CAN核心模塊從發送緩沖器讀CAN報文。
(4)驗收濾波器
驗收濾波器可以根據用戶的編程設置,過濾掉無須接收的報文。
(5)接收 FIFO
接收FIFO是驗收濾波器和主控制器之間的接口,用于存儲從CAN總線上接收的所有報文。
(6)工作模式
CAN控制器可以有兩種工作模式 (BasicCAN和Peli-CAN)。BasicCAN僅支持標準模式,PeliCAN支持CAN2.0B的標準模式和擴展模式。在SJA1000復位模式下,設置寄存器CDR.7為“0”,即設置CAN控制器SJA1000工作于BasicCAN模式;設置寄存器CDR.7為“1”,即設置CAN控制器SJA1000工作于PeliCAN模式,相比較而言,PeliCAN功能更強大一些。
市場上有許多CAN控制器,大致可以分為兩類:一類是獨立的控制器芯片,如SAJ1000;另一類是和微控制器做在一起,如NXP半導體公司的Cortex-M0內核LPC11Cxx系列微控制器、LPC2000系列32位ARM微控制器。CAN控制器的大致分類及相應的產品如表4.1所示。

表1 CAN控制器分類及相應產品型號
PLILIPS公司的獨立CAN處理器SJA1000是一種比較理想的選擇,它是市場上比較受歡迎的一款芯片,SJA1000不僅與傳統的CAN控制器PCA82C250硬件兼容,同時也實現了新的運行方式,支持具有新功能的CAN2.0B協議。另外,SJA1000T擴展出了64個字節的FIFO接收緩沖器,可以接收兩個以上的報文,SJA1000T還為增強錯誤處理功能增強了一些新的特殊功能寄存器,包括:可讀/寫訪問的錯誤計數器,可編程的錯誤告警極限,前次錯誤碼寄存器,每次CAN總線錯誤均引起錯誤中斷及借助位置細分的仲裁丟失中斷。所有這些優點使得SJA1000成為了當前CAN總線應用中的主流器件。論文將以SJA1000作為研究對象進行分析總結。
CAN系統中,驗收濾波器的設置非常重要,在CAN總線上,CAN幀信息由一個節點發送,其他節點同時接收,每當總線上有幀信息,節點都會把濾波器的設置和接收到得幀信息的標識碼相比較,節點只接收符合一定條件的信息,對不符合條件的CAN幀不予接收。所以濾波器的設置如果設置合適,便可以提高整個系統的效率,減輕CAN控制器的信息處理量,否則便會影響系統。在SJA1000中,濾波器的設置主要是由4個驗收碼寄存器ACR0、ACR1、ACR2、ACR3和4個AMR0、AMR1、AMR2、AMR3 來實現的, 濾波方式有兩種:單濾波器模式(AFM位是1)和雙濾波器模式(AFM位是0)。
濾波的規則是:每一位驗收屏蔽分別對應每一位驗收代碼,當該位驗收屏蔽位為“1”的時候(即設為無關),接收的相應幀ID位無論是否和相應的驗收代碼位相同均會表示為接收;當驗收屏蔽位為“0”的時候(即設為相關),只有相應的幀ID位和相應的驗收代碼位值相同的情況才會表示接收。只有在所有的位都表示為接收的時候,CAN控制器才會接收該報文。
濾波器的設置這個環節,大多數人通常沒有具體的考慮,只是從實現功能的角度來完成濾波器的設置,沒有進行優化設計,作者在濾波器的設置方面依據自己的經驗總結出一種優化的設置方法,能夠使濾波器的濾波速度提高幾倍。
濾波器設置的方法與標識符的分配有關系,標識符分配非常靈活,但總結起來主要有兩種,也是出于濾波器的考慮而進行的兩種分配方法:源節點法和目標節點法。源節點法就是分配幾個標識符作為報文發送地址;目標節點法就是分配幾個標識符作為報文接收地址。因此濾波器的設置方法也分為兩種:源設置法和目標設置法。
源設置法是指標示符按照源節點法分配時,濾波器的設置方法。其主要思想是在進行濾波器設置時,首先要分析節點接收的報文主要來源于那些節點,而后再對這些節點的ID進行分析,找出其異同進而確定濾波器的驗收碼與屏蔽碼的值。

表2 節點接收來源表
(1)分析節點接收信息來源
CAN總線網絡系統中,每一個節點都有自己唯一的ID用來區分節點,ID是區分節點的唯一特殊符,首先必須對每個節點接收的報文來源進行總結。例如一個CAN總線系統中有六個節點,ID用四位標示符表示,其ID分別為0000、0001、0010、0011、0100、0101,每個節點接收的報文的來源表2所示。
(2)找出ID各位區別,確定驗收碼與屏蔽碼
將節點報文的來源節點的ID與其他節點ID對比分析,由高位向地位的順序,找出ID標示符每一位的異同,而后確定驗收碼與屏蔽碼的值。例如上述系統中,節點0000接收的報文來自節點0010和節點0011,最高位都為0,后三位都有0和1,所以我們可以設置濾波器的驗收碼為x01x(x表示有設計者隨意取值),屏蔽碼為1001。
目標設置法是指標示符按照目標節點法分配時,濾波器的設置方法。其主要思想是在進行濾波器設置時,首先要分析系統中所有節點的數量,而后根據數量分配合適的標識符位數,最后以目標地址來確定濾波器的驗收碼與屏蔽碼的值。
(1)分析系統節點數量,分配標識符
CAN總線網絡系統中,目標地址標識符的分配要根據節點的數量來確定,不可多也不可少。例如當系統中有六個節點,則只分配三個標識符,節點 ID 分別為 000、001、010、011、100、101。
(2)根據ID確定驗收碼和屏蔽碼
根據上面的系統的分配,各個節點的驗收碼分別確定為000、001、010、011、100、101,屏蔽碼則都是 000。
本文對CAN總線控制器的原理,濾波器的原理和濾波器的設置進行了討論,總結出濾波器設置的兩種方法,為今后的濾波器設置提供了借鑒,實驗證明效果非常顯著,但是本文總結的濾波器的設置方法只適合于點對點傳輸方式,對于點對多、廣播等方式傳播的設置方法還需要進一步的研究。
[1]饒運濤,鄒繼軍,王進宏.現場總線CAN原理與應用技術[M].北京:北京航空航天大學出版社,2007.
[2]牛躍聽,周立功,方舟.CAN總線嵌入式開發[M].北京:北京航空航天大學出版社,2012.
[3]李光忠,吳士濤.基于CAN總線智能節點設計[J].微計算機信息,2009(26).
[4]王志兵.CAN總線技術應用中的有關問題探討[J].工業控制計算機,2009(8).
[5]馮鵠.淺談 CAN 總線的特點及應用[J].科技信息,2009(17).
[6]郝蕓,段青亞.CAN 2.0 總線控制器的設計[J].小型微型計算機系統,2009(9).
[7]范瑋,楊濤.CAN 總線在車身網絡設計中的應用[J].電子質量,2009(8).
[8]陽憲惠.現場總線技術及其應用[M].北京,清華大學出版社,2008.