董庭瓊 劉志浩 邵亞軍
(中國人民解放軍第二炮兵工程大學(xué) 陜西 西安 710025)
CAN-bus(Controller Area Network)即控制器局域網(wǎng)是由德國Bosch公司為汽車應(yīng)用而開發(fā)的多主機(jī)局部網(wǎng)絡(luò),主要應(yīng)用于汽車的監(jiān)測和控制。德國Bosch公司開發(fā)CAN總線的最初目的是為了解決汽車上數(shù)量眾多的電子設(shè)備之間的通信問題,減少電子設(shè)備之間繁多的信號線。于是設(shè)計了一個單一的網(wǎng)絡(luò)總線,使所有的外圍器件可以被掛接在該總線上。作為一種技術(shù)先進(jìn)、可靠性高、功能完善、成本合理的遠(yuǎn)程網(wǎng)絡(luò)通訊控制方式,已被廣泛應(yīng)用到各個領(lǐng)域中?;贑AN總線的優(yōu)越性和廣泛應(yīng)用,許多著名的芯片生產(chǎn)商都推出了獨立的CAN控制器芯片,或者帶有CAN控制器的MCU芯片。
圖1 CAN控制器結(jié)構(gòu)圖
在CAN總線網(wǎng)絡(luò)的設(shè)計過程中,濾波器的設(shè)置起著非常重要的作用,濾波器設(shè)置的好壞將直接影響整個系統(tǒng)的實時性和可靠性,所以本文針對CAN控制器中的濾波器的設(shè)置方法進(jìn)行研究探討,并根據(jù)自己的經(jīng)驗總結(jié)出一套濾波器設(shè)置的方法。
CAN控制器用于將欲收發(fā)的信息報文轉(zhuǎn)換為符合CAN規(guī)范的CAN幀,通過CAN收發(fā)器在CAN總線上交換信息。CAN控制器主要包括接口管理邏輯、CAN核心模塊、發(fā)送緩沖器、驗收濾波器、接收FIFO等部分組成,如圖1所示。
(1)接口管理邏輯
接口管理邏輯用于連接外部主控制器,解釋來自主控制器的命令,控制CAN控制器寄存器的尋址,并向主控制器提供中斷信息和狀態(tài)信息。
(2)核心模塊
核心模塊在收到一個報文時會根據(jù)CAN規(guī)范將串行位流轉(zhuǎn)換成用于接收的并行數(shù)據(jù),發(fā)送一個報文時則相反。
(3)發(fā)送緩沖器
發(fā)送緩沖器用于存儲一個完整的報文,當(dāng)CAN控制器發(fā)送初始化時,接口管理邏輯會使CAN核心模塊從發(fā)送緩沖器讀CAN報文。
(4)驗收濾波器
驗收濾波器可以根據(jù)用戶的編程設(shè)置,過濾掉無須接收的報文。
(5)接收 FIFO
接收FIFO是驗收濾波器和主控制器之間的接口,用于存儲從CAN總線上接收的所有報文。
(6)工作模式
CAN控制器可以有兩種工作模式 (BasicCAN和Peli-CAN)。BasicCAN僅支持標(biāo)準(zhǔn)模式,PeliCAN支持CAN2.0B的標(biāo)準(zhǔn)模式和擴(kuò)展模式。在SJA1000復(fù)位模式下,設(shè)置寄存器CDR.7為“0”,即設(shè)置CAN控制器SJA1000工作于BasicCAN模式;設(shè)置寄存器CDR.7為“1”,即設(shè)置CAN控制器SJA1000工作于PeliCAN模式,相比較而言,PeliCAN功能更強(qiáng)大一些。
市場上有許多CAN控制器,大致可以分為兩類:一類是獨立的控制器芯片,如SAJ1000;另一類是和微控制器做在一起,如NXP半導(dǎo)體公司的Cortex-M0內(nèi)核LPC11Cxx系列微控制器、LPC2000系列32位ARM微控制器。CAN控制器的大致分類及相應(yīng)的產(chǎn)品如表4.1所示。
表1 CAN控制器分類及相應(yīng)產(chǎn)品型號
PLILIPS公司的獨立CAN處理器SJA1000是一種比較理想的選擇,它是市場上比較受歡迎的一款芯片,SJA1000不僅與傳統(tǒng)的CAN控制器PCA82C250硬件兼容,同時也實現(xiàn)了新的運(yùn)行方式,支持具有新功能的CAN2.0B協(xié)議。另外,SJA1000T擴(kuò)展出了64個字節(jié)的FIFO接收緩沖器,可以接收兩個以上的報文,SJA1000T還為增強(qiáng)錯誤處理功能增強(qiáng)了一些新的特殊功能寄存器,包括:可讀/寫訪問的錯誤計數(shù)器,可編程的錯誤告警極限,前次錯誤碼寄存器,每次CAN總線錯誤均引起錯誤中斷及借助位置細(xì)分的仲裁丟失中斷。所有這些優(yōu)點使得SJA1000成為了當(dāng)前CAN總線應(yīng)用中的主流器件。論文將以SJA1000作為研究對象進(jìn)行分析總結(jié)。
CAN系統(tǒng)中,驗收濾波器的設(shè)置非常重要,在CAN總線上,CAN幀信息由一個節(jié)點發(fā)送,其他節(jié)點同時接收,每當(dāng)總線上有幀信息,節(jié)點都會把濾波器的設(shè)置和接收到得幀信息的標(biāo)識碼相比較,節(jié)點只接收符合一定條件的信息,對不符合條件的CAN幀不予接收。所以濾波器的設(shè)置如果設(shè)置合適,便可以提高整個系統(tǒng)的效率,減輕CAN控制器的信息處理量,否則便會影響系統(tǒng)。在SJA1000中,濾波器的設(shè)置主要是由4個驗收碼寄存器ACR0、ACR1、ACR2、ACR3和4個AMR0、AMR1、AMR2、AMR3 來實現(xiàn)的, 濾波方式有兩種:單濾波器模式(AFM位是1)和雙濾波器模式(AFM位是0)。
濾波的規(guī)則是:每一位驗收屏蔽分別對應(yīng)每一位驗收代碼,當(dāng)該位驗收屏蔽位為“1”的時候(即設(shè)為無關(guān)),接收的相應(yīng)幀ID位無論是否和相應(yīng)的驗收代碼位相同均會表示為接收;當(dāng)驗收屏蔽位為“0”的時候(即設(shè)為相關(guān)),只有相應(yīng)的幀ID位和相應(yīng)的驗收代碼位值相同的情況才會表示接收。只有在所有的位都表示為接收的時候,CAN控制器才會接收該報文。
濾波器的設(shè)置這個環(huán)節(jié),大多數(shù)人通常沒有具體的考慮,只是從實現(xiàn)功能的角度來完成濾波器的設(shè)置,沒有進(jìn)行優(yōu)化設(shè)計,作者在濾波器的設(shè)置方面依據(jù)自己的經(jīng)驗總結(jié)出一種優(yōu)化的設(shè)置方法,能夠使濾波器的濾波速度提高幾倍。
濾波器設(shè)置的方法與標(biāo)識符的分配有關(guān)系,標(biāo)識符分配非常靈活,但總結(jié)起來主要有兩種,也是出于濾波器的考慮而進(jìn)行的兩種分配方法:源節(jié)點法和目標(biāo)節(jié)點法。源節(jié)點法就是分配幾個標(biāo)識符作為報文發(fā)送地址;目標(biāo)節(jié)點法就是分配幾個標(biāo)識符作為報文接收地址。因此濾波器的設(shè)置方法也分為兩種:源設(shè)置法和目標(biāo)設(shè)置法。
源設(shè)置法是指標(biāo)示符按照源節(jié)點法分配時,濾波器的設(shè)置方法。其主要思想是在進(jìn)行濾波器設(shè)置時,首先要分析節(jié)點接收的報文主要來源于那些節(jié)點,而后再對這些節(jié)點的ID進(jìn)行分析,找出其異同進(jìn)而確定濾波器的驗收碼與屏蔽碼的值。
表2 節(jié)點接收來源表
(1)分析節(jié)點接收信息來源
CAN總線網(wǎng)絡(luò)系統(tǒng)中,每一個節(jié)點都有自己唯一的ID用來區(qū)分節(jié)點,ID是區(qū)分節(jié)點的唯一特殊符,首先必須對每個節(jié)點接收的報文來源進(jìn)行總結(jié)。例如一個CAN總線系統(tǒng)中有六個節(jié)點,ID用四位標(biāo)示符表示,其ID分別為0000、0001、0010、0011、0100、0101,每個節(jié)點接收的報文的來源表2所示。
(2)找出ID各位區(qū)別,確定驗收碼與屏蔽碼
將節(jié)點報文的來源節(jié)點的ID與其他節(jié)點ID對比分析,由高位向地位的順序,找出ID標(biāo)示符每一位的異同,而后確定驗收碼與屏蔽碼的值。例如上述系統(tǒng)中,節(jié)點0000接收的報文來自節(jié)點0010和節(jié)點0011,最高位都為0,后三位都有0和1,所以我們可以設(shè)置濾波器的驗收碼為x01x(x表示有設(shè)計者隨意取值),屏蔽碼為1001。
目標(biāo)設(shè)置法是指標(biāo)示符按照目標(biāo)節(jié)點法分配時,濾波器的設(shè)置方法。其主要思想是在進(jìn)行濾波器設(shè)置時,首先要分析系統(tǒng)中所有節(jié)點的數(shù)量,而后根據(jù)數(shù)量分配合適的標(biāo)識符位數(shù),最后以目標(biāo)地址來確定濾波器的驗收碼與屏蔽碼的值。
(1)分析系統(tǒng)節(jié)點數(shù)量,分配標(biāo)識符
CAN總線網(wǎng)絡(luò)系統(tǒng)中,目標(biāo)地址標(biāo)識符的分配要根據(jù)節(jié)點的數(shù)量來確定,不可多也不可少。例如當(dāng)系統(tǒng)中有六個節(jié)點,則只分配三個標(biāo)識符,節(jié)點 ID 分別為 000、001、010、011、100、101。
(2)根據(jù)ID確定驗收碼和屏蔽碼
根據(jù)上面的系統(tǒng)的分配,各個節(jié)點的驗收碼分別確定為000、001、010、011、100、101,屏蔽碼則都是 000。
本文對CAN總線控制器的原理,濾波器的原理和濾波器的設(shè)置進(jìn)行了討論,總結(jié)出濾波器設(shè)置的兩種方法,為今后的濾波器設(shè)置提供了借鑒,實驗證明效果非常顯著,但是本文總結(jié)的濾波器的設(shè)置方法只適合于點對點傳輸方式,對于點對多、廣播等方式傳播的設(shè)置方法還需要進(jìn)一步的研究。
[1]饒運(yùn)濤,鄒繼軍,王進(jìn)宏.現(xiàn)場總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,2007.
[2]牛躍聽,周立功,方舟.CAN總線嵌入式開發(fā)[M].北京:北京航空航天大學(xué)出版社,2012.
[3]李光忠,吳士濤.基于CAN總線智能節(jié)點設(shè)計[J].微計算機(jī)信息,2009(26).
[4]王志兵.CAN總線技術(shù)應(yīng)用中的有關(guān)問題探討[J].工業(yè)控制計算機(jī),2009(8).
[5]馮鵠.淺談 CAN 總線的特點及應(yīng)用[J].科技信息,2009(17).
[6]郝蕓,段青亞.CAN 2.0 總線控制器的設(shè)計[J].小型微型計算機(jī)系統(tǒng),2009(9).
[7]范瑋,楊濤.CAN 總線在車身網(wǎng)絡(luò)設(shè)計中的應(yīng)用[J].電子質(zhì)量,2009(8).
[8]陽憲惠.現(xiàn)場總線技術(shù)及其應(yīng)用[M].北京,清華大學(xué)出版社,2008.