邢榮峰
太原航空儀表有限公司 030000
CAN,全稱為“Controller Area Network”,即控制器局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一,是由德國Bosch公司最早提出的[1]。它是一種多主方式的串行通訊總線,基本設(shè)計(jì)規(guī)范要求有較高的位速率、高抗電磁干擾性,而且能夠檢測出產(chǎn)生的任何錯(cuò)誤。當(dāng)信號傳輸距離達(dá)到10km時(shí),CAN仍可提供50Kbit/s的數(shù)據(jù)傳輸速率。其總線規(guī)范已被ISO國際標(biāo)注化組織制定為國際標(biāo)準(zhǔn)ISO11898(高速應(yīng)用)和ISO11519(低速應(yīng)用)。
因?yàn)镃AN總線具有很高的實(shí)時(shí)性能,所以它在汽車電子、航空工業(yè)、工業(yè)控制、安全防護(hù)等領(lǐng)域中得到廣泛應(yīng)用。但是,在常用的微處理器中有很多微處理器內(nèi)部并沒有集成CAN控制器,如基于ARM1176JZF-S內(nèi)核的微處理器S3C6410。因此,將這類微處理器和CAN獨(dú)立控制進(jìn)行組合設(shè)計(jì)就成為必要。
微處理器S3C6410是基于ARM1176JZF-S內(nèi)核的16/32-bit RISC微處理器,具有低成本、低功耗、高性能的特點(diǎn)。S3C6410具有極佳的外部存儲(chǔ)器接口,同時(shí)提供了豐富的硬件外設(shè)接口,非常適合對成本、功耗敏感的應(yīng)用。
SJA1000T是使用較為廣泛的一種CAN獨(dú)立控制器,主要用于移動(dòng)目標(biāo)和一般的工業(yè)環(huán)境[2]。SJA1000T與微處理器的接口可設(shè)置為Intel模式或Motorola模式。本文的接口設(shè)計(jì)是基于Intel模式的,在此模式下,SJA1000T的數(shù)據(jù)和地址信號是分時(shí)復(fù)用的。
S3C6410和SJA1000T之間的硬件設(shè)計(jì)需要解決兩個(gè)問題,一個(gè)是電平轉(zhuǎn)換問題,一個(gè)是讀寫時(shí)序問題。
S3C6410的工作電壓是3.3V,而SJA1000T是5V供電,兩者之間不能直接相連,需要進(jìn)行電平轉(zhuǎn)換。如果需要總線雙向傳輸數(shù)據(jù),則在S3C6410和SJA1000T之間需要使用帶有方向控制的轉(zhuǎn)換芯片,例如SN74LVC245。如果總線是單向傳輸數(shù)據(jù)的,則可以使用SN74LVC541實(shí)現(xiàn)兩者的相連。
前面已提到SJA1000T的接口在Intel模式下數(shù)據(jù)和地址信號是分時(shí)復(fù)用的,而S3C6410為數(shù)據(jù)和地址信號分離的結(jié)構(gòu)[3],且S3C6410不提供ALE信號。因此,設(shè)計(jì)的關(guān)鍵就是S3C6410要把SJA1000T的地址當(dāng)成數(shù)據(jù)寫入并同時(shí)產(chǎn)生ALE信號,S3C6410的地址信號只作為譯碼控制信號使用。本設(shè)計(jì)使用S3C6410的NGCS4對應(yīng)的地址空間(地址范圍為0x20000000~0x27FFFFFF)、地址總線ADDR0、NOE和NWE來實(shí)現(xiàn)SJA1000T的ALE、寫使能控制信號)讀使能控制信號)和片選信號)。
對于SJA1000T,ALE信號需要在發(fā)送其地址是有效(此時(shí)為高有效),在發(fā)送和接收其數(shù)據(jù)時(shí)無效。規(guī)定當(dāng)ADDR0=1時(shí)發(fā)送地址,ALE可以通過如下邏輯組合實(shí)現(xiàn):
對于微處理器而言,CAN獨(dú)立控制器是基于事件觸發(fā)的。CAN獨(dú)立控制器會(huì)在本身狀態(tài)發(fā)生改變時(shí),將變化的結(jié)果通知微處理器。因此微處理器處理CAN信息時(shí),可以采用中段的方式,也可以采用輪詢的方式來完成相應(yīng)處理。在軟件編寫之前先確定SJA1000T的基地址及復(fù)位引腳,然后正確初始化SJA1000T,填寫要發(fā)送的報(bào)文,使能發(fā)送請求,即可進(jìn)行CAN接收和發(fā)送。
SJA1000T的初始化流程見圖1。其中,配置CAN工作模式和設(shè)定中斷使能這兩個(gè)步驟可以根據(jù)需要進(jìn)行裁剪,其余步驟則是必須的初始化工作。
圖1 SJA1000T的初始化流程
當(dāng)完成SJA1000T的初始化后,就可以使用發(fā)送緩存寄存器和接收緩存寄存器進(jìn)行報(bào)文數(shù)據(jù)的接收和發(fā)送。
CAN總線將數(shù)據(jù)發(fā)送到發(fā)送緩存寄存器,然后對發(fā)送緩存寄存器賦值以啟動(dòng)發(fā)送。CAN獨(dú)立控制器只負(fù)責(zé)發(fā)送,不保證發(fā)送成功。要驗(yàn)證發(fā)送是否成功,可以查詢SJA1000T狀態(tài)寄存器的TCS位,或者配合中斷來判斷。
CAN總線接收數(shù)據(jù)時(shí),先通過讀取狀態(tài)寄存器信息來確認(rèn)當(dāng)前緩存器中是否有數(shù)據(jù)。當(dāng)有數(shù)據(jù)時(shí),將數(shù)據(jù)讀出并放入CAN接收數(shù)據(jù)存儲(chǔ)區(qū),待需要時(shí)從該存儲(chǔ)區(qū)讀出。
本文介紹了微處理器S3C6410和CAN獨(dú)立控制器SJA1000T之間接口的差異,提出了SJA1000T和S3C6410總線設(shè)計(jì)方案。該設(shè)計(jì)方案可以作為內(nèi)部沒有集成CAN控制器的微處理器和CAN獨(dú)立控制器之間組合設(shè)計(jì)的參考。
[1]饒?jiān)茲?,鄒繼軍,鄭勇蕓.現(xiàn)場總線CAN原理及應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,2003.
[2]NXP Company.SJA1000 Data Shee t[Z].2004.
[3]Samsung Electronics Company.S3C6410X USER'SMANUAL[Z].2008.