馮 源,豆海利,趙 剛
(1.中國航空計算技術(shù)研究所,西安 710072; 2.空軍工程大學(xué) 理學(xué)院,西安 710051)
?
基于S12X系列雙核單片機的CAN網(wǎng)關(guān)設(shè)計
馮源1,豆海利2,趙剛1
(1.中國航空計算技術(shù)研究所,西安710072; 2.空軍工程大學(xué) 理學(xué)院,西安710051)
集成XGATE協(xié)處理器內(nèi)核的S12XE系列雙核單片機具有處理速度快、反應(yīng)時間短、功耗低等優(yōu)點,在嵌入式應(yīng)用中具有獨特優(yōu)勢和很好的應(yīng)用前景;文章采用16位雙核單片機MC9S12XEQ512作為主控制器,以集成信號和電源隔離功能的CAN收發(fā)器芯片ADM3053來實現(xiàn)CAN接口電路,設(shè)計并實現(xiàn)了一個可以連接3個CAN通信子網(wǎng)的CAN網(wǎng)關(guān),有效實現(xiàn)了系統(tǒng)的小型化、低功耗、低成本;采用雙核處理技術(shù)來優(yōu)化CAN網(wǎng)關(guān)的處理流程,由協(xié)處理器XGATE來處理各種中斷,S12X主CPU則專注于協(xié)議處理和消息轉(zhuǎn)發(fā);實際應(yīng)用表明,系統(tǒng)運行穩(wěn)定可靠,與傳統(tǒng)的采用單處理器實現(xiàn)的CAN網(wǎng)關(guān)相比,系統(tǒng)的數(shù)據(jù)吞吐能力和實時性得到了明顯改善。
CAN網(wǎng)關(guān);S12X主CPU;協(xié)處理器XGATE;精簡指令流;軟中斷;信號量
隨著微處理技術(shù)的發(fā)展及復(fù)雜系統(tǒng)對微控制器的實時性和計算能力要求的日益提高,帶協(xié)處理器的微處理器應(yīng)用越來越廣泛。美國Freescale公司推出的S12XE系列雙核單片機,其內(nèi)部集成了可編程RISC內(nèi)核的XGATE協(xié)處理器,專門用來處理I/O和中斷。其性能往往優(yōu)于一個智能的DMA控制器,從而提高了系統(tǒng)的實時處理能力,減輕了主CPU的工作負(fù)荷,使得主CPU更多注重于處理系統(tǒng)核查、應(yīng)用解算等任務(wù)。
CAN(controller area network),即控制器局域網(wǎng),是一種有效支持分布式控制和實時控制的串行總線,具有分布性能好,可靠性高、擴展性好、成本低等優(yōu)點,較好地解決了工業(yè)現(xiàn)場設(shè)備級(傳感器、執(zhí)行器、控制模塊)的互連通信問題。在某些特定場合,如網(wǎng)絡(luò)中節(jié)點數(shù)量過多、通信距離過長、不同波特率和應(yīng)用層協(xié)議的兩個CAN網(wǎng)絡(luò)在數(shù)據(jù)交換時就需要增加CAN網(wǎng)關(guān)設(shè)備。
本文基于S12XE系列雙核單片機MC9S12XEQ512設(shè)計實現(xiàn)了一種可以連接3個CAN通信子網(wǎng)的CAN網(wǎng)關(guān)設(shè)備,通過該網(wǎng)關(guān)能夠?qū)崿F(xiàn)子網(wǎng)之間消息的過濾、轉(zhuǎn)發(fā)、流量控制、協(xié)議轉(zhuǎn)換等功能。
1.1XGATE的功能
協(xié)處理器XGATE是專門為處理中斷和I/O設(shè)計的,內(nèi)部結(jié)構(gòu)如圖1所示。它采用精簡指令流(RISC)結(jié)構(gòu),速率比S12X主CPU快1倍,中斷處理更快。XGATE和主CPU之間通過片內(nèi)的雙口RAM交換數(shù)據(jù),同時兩個內(nèi)核之間可以互發(fā)中斷請求。當(dāng)主CPU與協(xié)處理器存在競爭問題時,S12X單片機采用了8個內(nèi)部硬件信號量予以解決。
圖1 XGATE內(nèi)部結(jié)構(gòu)框圖
1.2S12X的中斷配置及響應(yīng)
在S12XE系列雙核單片機中,可以選擇主CPU或協(xié)處理器XGATE來響應(yīng)外部中斷事件。圖2是典型的S12X的中斷配置及響應(yīng),在每個中斷的配置寄存器INT_CFGDATAx中,通過開關(guān)信號RQST來選擇中斷處理內(nèi)核,ILVL[2:0]域定義了中斷優(yōu)先級,它在兩個內(nèi)核中都起作用。在典型的雙核應(yīng)用中,先由XGATE來響應(yīng)中斷,當(dāng)XGATE執(zhí)行完中斷服務(wù)程序后,通知S12X主CPU并將處理的結(jié)果提交給它。這樣由XGATE負(fù)責(zé)與底層硬件密切相關(guān)的驅(qū)動,S12X主CPU只需關(guān)注上層的應(yīng)用控制算法,從而在提高應(yīng)用程序反應(yīng)速度的同時減少了主CPU的中斷負(fù)荷。
圖2 S12X的中斷配置及中斷響應(yīng)
本文所要設(shè)計的CAN網(wǎng)關(guān)要求具備3個CAN通道,分別連接3個CAN通信子網(wǎng)。其中CAN0通道連接1個通信速率為500 Kbps的高速CAN子網(wǎng)CAN0,CAN1和CAN2通道分別連接1個通信速率為125 Kbps的低速CAN子網(wǎng)CAN1和CAN2。
網(wǎng)關(guān)的具體功能要求如下:
1)低速CAN子網(wǎng)CAN1和CAN2上使用相同的協(xié)議數(shù)據(jù)格式,高速CAN0子網(wǎng)上使用另一種協(xié)議數(shù)據(jù)格式,網(wǎng)關(guān)需要完成兩者之間的協(xié)議數(shù)據(jù)格式的轉(zhuǎn)換;
2)來自于低速CAN子網(wǎng)CAN1和CAN2上的消息可以全部轉(zhuǎn)發(fā)到高速CAN0子網(wǎng)上;
3)針對低速CAN1和CAN2網(wǎng)絡(luò),網(wǎng)關(guān)的對應(yīng)通道分別設(shè)置了消息過濾表,來自于高速CAN0子網(wǎng)上的消息,經(jīng)過消息過濾后,轉(zhuǎn)發(fā)到低速CAN1和CAN2子網(wǎng)上;
4)低速CAN1和CAN2網(wǎng)絡(luò)之間不要求數(shù)據(jù)轉(zhuǎn)發(fā)。
3.1系統(tǒng)結(jié)構(gòu)和原理框圖
本文設(shè)計的CAN網(wǎng)關(guān)的系統(tǒng)結(jié)構(gòu)和原理框圖如圖3所示,采用集成了4個MSCAN模塊的雙核單片機MC9S12XEQ512作為該網(wǎng)關(guān)的主控芯片,負(fù)責(zé)對CAN控制器的初始化,并控制消息的接收、消息拆裝與重組、過濾和轉(zhuǎn)發(fā)等。CAN物理層接口采用了ADI公司的集成CAN收發(fā)器ADM3053,它是將CAN收發(fā)器與iCoupler磁耦隔離技術(shù)和isoPower集成式隔離DC/DC轉(zhuǎn)換器集成在一起,由單芯片實現(xiàn)了CAN接口信號和供電的完全隔離,有效實現(xiàn)了系統(tǒng)小型化、低功耗、低成本。此外,本設(shè)計中增加了接口防護(hù)電路,包括共模電感和瞬態(tài)抑制保護(hù)器件(TVS)。
圖3 CAN網(wǎng)關(guān)的系統(tǒng)結(jié)構(gòu)和原理框圖
3.2硬件實現(xiàn)
本文中CAN接口電路圖如圖4所示。
圖4 CAN接口電路原理圖
ADM3053根據(jù)隔離功能劃分為邏輯端(圖中左側(cè))和總線端(圖中右側(cè)),兩端連接獨立的電源和地信號。
ADM3053的邏輯端與主控芯片MC9S12XEQ512相連,管腳接線如下:
1) MC9S12XEQ512中MSCAN模塊的接收引腳CANRX和發(fā)送引腳CANTX分別與ADM3053中接收器輸出引腳RXD和驅(qū)動器輸入引腳TXD相連;
2) ADM3053內(nèi)部信號隔離功能由邏輯端的VIO引腳提供電源,它與MC9S12XEQ512的I/O供電電源相連;
3) ADM3053的內(nèi)部電源隔離功能由邏輯端的VCC引腳提供電源,它與+5 V電源相連;
4) ADM3053邏輯端的地信號GND_LOG與MC9S12XEQ512的電源地信號一致。
ADM3053的總線端與外部總線接口防護(hù)電路相連,管腳接線如下:
1) ADM3053的內(nèi)部電源隔離輸出引腳VISOUT與CAN收發(fā)器供電輸入引腳VISOIN連接,這兩個引腳外部分別通過濾波電容接地;
2) CANH和CANL通過共模電感ACT45B-510-2P與系統(tǒng)中的CAN總線相連,總線兩端要求分別接入120 Ω端接電阻;
3) CANH、CANL與總線地信號GND_BUS之間連接TVS管PESD1CAN,用于抑制瞬態(tài)干擾。
4.1數(shù)據(jù)共享的實現(xiàn)
1)定義共享數(shù)據(jù)區(qū)
S12X主CPU和協(xié)處理器XGATE之間交互數(shù)據(jù)是使用片內(nèi)雙端口RAM,開辟消息緩沖區(qū),以共享內(nèi)存的方式實現(xiàn)。通過設(shè)置邊界寄存器的值,可以將其劃分為XGATE獨享RAM、S12X獨享RAM、XGATE與S12X共享RAM幾個部分,如圖5所示。
圖5 RAM分配區(qū)
圖7 CAN網(wǎng)關(guān)的工作流程圖以及雙核處理器的功能劃分
在上述的RAM分配方案中,共享RAM空間用于S12X主CPU和XGATE之間交換數(shù)據(jù),消息緩沖區(qū)就定義在該區(qū)域中。XGATE獨享RAM用于存放XGATE的應(yīng)用程序,而XGATE應(yīng)用程序在RAM中運行比在Flash中運行速度快一倍,同時避免了由于競爭影響主CPU的運行速度。本設(shè)計中,S12X主CPU工作時鐘頻率是50 MHz,XGATE以最高100 MHz的時鐘頻率運行片內(nèi)RAM中的程序。
2)共享資源的互斥訪問
為了保證共享數(shù)據(jù)的完整性,使用其內(nèi)部集成的8個硬件信號量來同步兩個內(nèi)核對共享數(shù)據(jù)的訪問。
S12X主CPU和XGATE協(xié)處理器之間解決共享資源競爭的程序框圖如圖6所示。在XGATE應(yīng)用程序中,鎖定信號量指令的后面一定要緊跟一條BCC指令,判斷鎖定是否成功。如果不成功,則通過BCC指令再次執(zhí)行鎖定操作,直到鎖定成功。在S12X主CPU應(yīng)用程序中,給XGATE信號量寄存器的相應(yīng)位寫1的指令之后一定要緊跟一條位測試指令,讀信號量寄存器中的相應(yīng)位,判斷S12X主CPU是否已經(jīng)成功鎖定信號量。如果相應(yīng)位仍為0,則接著再次執(zhí)行給信號量寄存器的相應(yīng)位置1的指令,以等待XGATE釋放該信號量。
4.2S12X主CPU與XGATE的相互中斷
S12X主CPU和XGATE之間可相互中斷以同步它們的運行。XGATE有一個特殊的指令SIF,用于向S12X主CPU提交中斷。通常SIF為XGATE線程的最后一條指令,用以觸發(fā)S12X主CPU中斷。另外XGATE有8個軟件中斷源,S12X主CPU可以通過置位或清除XGATE軟中斷觸發(fā)寄存器(XGSWT)中的相應(yīng)位來觸發(fā)或清除這8個中斷。
5.1網(wǎng)關(guān)工作流程的設(shè)計
為了緩解網(wǎng)關(guān)工作時可能出現(xiàn)的數(shù)據(jù)阻塞和延遲問題,增強系統(tǒng)的數(shù)據(jù)吞吐能力和實時性。本文采用主處理器與協(xié)處理器并行協(xié)調(diào)工作的方式來設(shè)計工作流程,實現(xiàn)網(wǎng)關(guān)的功能,如圖7所示。需要說明的是,圖中僅展示了1路高速CAN與1路低速CAN之間的轉(zhuǎn)換流程,根據(jù)處理流程可以方便地擴展到與2路低速CAN之間的轉(zhuǎn)換。
構(gòu)造雙核應(yīng)用程序的過程實際上就是將CAN網(wǎng)關(guān)的整個處理流程盡量合理分布到主CPU和協(xié)處理器上,完成雙內(nèi)核之間的通信并響應(yīng)外設(shè)事件的過程。這個雙核程序相當(dāng)于將整個應(yīng)用程序劃分為兩級,第一級運行在S12X主CPU上,包括main()函數(shù)和S12X主CPU的中斷服務(wù)程序;第二級運行在協(xié)處理器XGATE上,執(zhí)行XGATE中斷服務(wù)程序。這樣由XGATE完成底層外設(shè)的初級處理,由S12X主CPU來完成網(wǎng)關(guān)的協(xié)議處理和消息轉(zhuǎn)發(fā)等高層應(yīng)用。
在雙核單片機的工作過程中,這兩個處理器的工作方式是不同的,S12X主CPU的工作是主動的,始終在運行;而協(xié)處理器XGATE的工作是被動的,是由中斷觸發(fā)的。
5.2數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)的設(shè)計主要包括消息緩沖區(qū)和消息過濾表。
1)消息緩沖區(qū):
本文針對每一路CAN接口,都設(shè)置了獨立的發(fā)送和接收緩沖區(qū)。接收緩沖區(qū)用于存放來自上一級子網(wǎng),等待處理的消息。發(fā)送緩沖區(qū)用于存放經(jīng)過協(xié)議轉(zhuǎn)換和消息過濾后等待發(fā)送到下一級子網(wǎng)的消息。緩沖區(qū)采用環(huán)形緩沖結(jié)構(gòu),并根據(jù)消息類型劃分為緊急消息緩沖區(qū)和普通消息緩沖區(qū)。
2)消息過濾表:
為了實現(xiàn)高速CAN子網(wǎng)向低速CAN子網(wǎng)轉(zhuǎn)發(fā)過程的消息過濾功能,在網(wǎng)關(guān)的低速CAN通道上需要設(shè)置消息過濾表。消息過濾表中只存放需要轉(zhuǎn)發(fā)到下一級CAN子網(wǎng)的CAN消息ID,并且按照消息ID由小到大的順序排列。
在系統(tǒng)啟動時,對該表的內(nèi)容進(jìn)行初始化。在消息轉(zhuǎn)發(fā)過程中,以CAN消息ID作為關(guān)鍵字來搜索此表,如果匹配成功,就轉(zhuǎn)發(fā)消息,匹配失敗則不需要轉(zhuǎn)發(fā),該消息就被濾除。查找算法采用典型的折半查找實現(xiàn)即可。
5.3S12X主CPU程序設(shè)計
在S12X主CPU上運行的程序包括main()函數(shù)和S12X主CPU的中斷服務(wù)程序。
1)S12X主CPU的main()函數(shù):
main()函數(shù)流程圖如圖8所示,在main.c文件中首先按照發(fā)送和接收緩沖區(qū)的數(shù)據(jù)結(jié)構(gòu)來定義各個緩沖區(qū)變量,然后將其聲明為全局變量,并分配到共享存儲空間中。在main()函數(shù)中先配置S12X主CPU的時鐘和鎖相環(huán),然后初始化MSCAN模塊和XGATE協(xié)處理器,最后進(jìn)入主循環(huán)處理流程。在主循環(huán)中,依次輪詢高速和低速CAN通道的接收緩沖區(qū),分析幀數(shù)據(jù),進(jìn)行協(xié)議轉(zhuǎn)換、消息過濾后寫入到下一級CAN子網(wǎng)的發(fā)送緩沖區(qū),最后觸發(fā)軟中斷通知協(xié)處理器來發(fā)送消息。
圖8 S12X主CPU的main()函數(shù)流程圖
2)S12X主CPU的中斷服務(wù)程序:
S12X主CPU的中斷處理流程圖如圖9所示,S12X主CPU的中斷服務(wù)程序是用于直接處理XGATE接收到的緊急消息。當(dāng)XGATE接收到緊急消息時,寫入接收緩沖區(qū),然后通過SIF指令向S12X主CPU提交中斷;主CPU響應(yīng)中斷,在中斷服務(wù)程序中立即讀取緊急消息并進(jìn)行解析、協(xié)議轉(zhuǎn)換和消息過濾,然后寫入到下一級子網(wǎng)的發(fā)送緩沖區(qū),最后觸發(fā)軟中斷通知協(xié)處理器來發(fā)送消息。
圖9 S12X主CPU的中斷處理流程圖
5.4協(xié)處理器XGATE程序設(shè)計
XGATE代碼就是一段段獨立的中斷服務(wù)程序,沒有主程序。XGATE的中斷服務(wù)程序也稱為線程。XGATE代碼的執(zhí)行是由中斷驅(qū)動的,在沒有中斷時,進(jìn)入休眠態(tài),不執(zhí)行任何指令,處于低功耗狀態(tài)。
在本文的設(shè)計中將MSCAN模塊的接收中斷、發(fā)送中斷和軟中斷的處理交由XGATE負(fù)責(zé)。XGATE的工作流程如圖10所示,需要編寫各中斷的中斷服務(wù)程序,并根據(jù)各個中斷服務(wù)程序的起始地址和參數(shù)來填寫XGATE中斷向量表。
圖10 協(xié)處理器工作流程
在圖7的CAN網(wǎng)關(guān)的工作流程圖中,已經(jīng)描述了協(xié)處理器XGATE響應(yīng)軟中斷、MSCAN發(fā)送中斷和接收中斷后的CAN消息發(fā)送和接收的詳細(xì)處理過程。
在MSCAN模塊接收到CAN消息時,會觸發(fā)XGATE的CAN消息接收中斷處理線程interrupt void CANx_rcvThread( rBuffer *rcvBufferx )。對于接收到的數(shù)據(jù),區(qū)分緊急消息還是普通消息。如果XGATE接收到緊急消息時,寫入接收緩沖區(qū),然后通過SIF指令向S12X主CPU提交中斷;主CPU響應(yīng)中斷,在中斷服務(wù)程序中立即讀取緊急消息并進(jìn)行解析、協(xié)議轉(zhuǎn)換和消息過濾,然后寫入到下一級子網(wǎng)的發(fā)送緩沖區(qū)。如果XGATE接收到普通消息時,只寫入接收緩沖區(qū),但不向S12X主CPU提交中斷,只等待S12X主CPU在主循環(huán)中輪詢到接收緩沖區(qū)才對該消息進(jìn)行處理,然后寫入到下一級子網(wǎng)的發(fā)送緩沖區(qū)。
CAN消息的發(fā)送功能是通過引入兩個獨立的中斷來實現(xiàn),分別是主CPU觸發(fā)的軟中斷線程interrupt void Software_Triggerx(tBuffer *tmtBufferx )和MSCAN模塊的發(fā)送中斷處理線程interrupt void CANx_tmtThread(tBuffer *tmtBufferx )。當(dāng)S12X主CPU完成消息解析、協(xié)議轉(zhuǎn)換和消息過濾,并將其寫入到下一級子網(wǎng)的發(fā)送緩沖區(qū)后,主CPU通過軟中斷來通知協(xié)處理器進(jìn)行CAN消息的發(fā)送。另外由于使能了MSCAN模塊的發(fā)送中斷,一旦MSCAN內(nèi)部的發(fā)送緩沖區(qū)中出現(xiàn)“空”窗口可以寫入消息時,就會立刻向協(xié)處理器觸發(fā)發(fā)送中斷,由協(xié)處理器負(fù)責(zé)CAN消息的發(fā)送。
當(dāng)前的CAN網(wǎng)關(guān)絕大多數(shù)是采用單處理器實現(xiàn),為了緩解網(wǎng)關(guān)工作時可能出現(xiàn)的數(shù)據(jù)阻塞和延遲問題,增強系統(tǒng)的數(shù)據(jù)吞吐能力和實時性,筆者采用主處理器與協(xié)處理器并行協(xié)調(diào)工作的方式來設(shè)計工作流程,實現(xiàn)了一個可以連接3個CAN通信子網(wǎng)的CAN網(wǎng)關(guān)。
在CAN網(wǎng)關(guān)的雙核應(yīng)用程序中,由協(xié)處理器XGATE全面負(fù)責(zé)各種中斷響應(yīng),如3路CAN通道的發(fā)送中斷、接收中斷、錯誤中斷等,而S12X主CPU則專注于協(xié)議處理和消息轉(zhuǎn)發(fā)。充分利用S12X主CPU和XGATE之間可以相互中斷的機制,來同步雙核程序的運行,有效實現(xiàn)了CAN網(wǎng)關(guān)的整個處理過程。
[1]邵貝貝,宮輝.嵌入式系統(tǒng)中的雙核技術(shù)[M].北京:北京航空航天大學(xué)出版社,2008.
[2] 羅峰,孫澤昌.汽車CAN總線系統(tǒng)原理、設(shè)計與應(yīng)用[M].電子工業(yè)出版社,2010.
[3] 王宜懷,曹金華.嵌入式系統(tǒng)設(shè)計實戰(zhàn)-基于飛思卡爾S12X微控制器[M]. 北京:北京航空航天大學(xué)出版社,2011.
[4] 盧玉傳,杜志岐,樊江濱,等.車載雙路CAN總線冗余網(wǎng)關(guān)的設(shè)計[J].車輛與動力技術(shù),2012(1): 45-50.
[5] 李廣鑫,秦貴和,劉文靜,等.CAN總線網(wǎng)關(guān)的設(shè)計與實現(xiàn)[J].長春郵電學(xué)院學(xué)報,2010,28(2): 166-171.
[6] 閆海明,馮源,田苗.基于DSP內(nèi)嵌ECAN模塊的總線接口設(shè)計[J].現(xiàn)代電子技術(shù),2013,36(11): 112-115.
[7] Ross Mitchell.Tutorial:Introducing the XGATE Module to Consumer and Industrial Application Developers (AN3224) [R].Freescale Semiconductor,2006.
[8] Steve McAslan.Using XGATE to Implement a Simple Buffered SCI (AN3144) [R].Freescale Semiconductor,2005.
[9] Joachim Krücken.How to Configure and Use the XGATE on S12X Devices (AN2685) [R].Freescale Semiconductor,2004.
Design of CAN Bus Gateway Based on S12X Series Dual-core MCU
Feng Yuan1,Dou Haili2,Zhao Gang1
(1.Aeronautics Computing Technique Research Institute, Xi’an710072, China;2.College of Science, Air Force Engineering University, Xi’an710051, China)
S12X series dual-core MCU with a coprocessor XGATE has the advantages such as high speed of data processing, short reaction time and low power consumption. So it has more good application prospect in the field of embedded application. In this design, the 16-bit dual-core MCU named MC9S12XEQ512 has been selected as the main processor. The CAN transceiver chip ADM3053 has been used to implement the CAN interface circuit, in which CAN transceiver, the signal isolation function and isolated DC-to-DC converter are all integrated. The paper describes the design and implement of CAN gateway having three CAN interfaces for solving the CAN network's extending and interconnection, achieving the purposes of interface miniaturization, low power consumption and low cost. The technology of dual processors in embedded system design has been also applied to optimize the performance of the gateway. The coprocessor XGATE is used to handle the miscellaneous interrupts and the main processor S12X CPU is used to analyze the protocol and exchange messages. The application results show that the gateway can work stably and reliably. Compared with the existing gateway realized by the traditional single core processor, the performance of data throughput and reliability has been improved.
CAN gateway;S12X CPU;coprocessor XGATE;RISC;software triggers;semaphores
2015-03-13;
2015-09-16。
上海市研究生教育創(chuàng)新計劃學(xué)位點引導(dǎo)布局與建設(shè)培育項目(13sc002)。
馮源 (1981-) ,男,陜西西安人,碩士,工程師,主要從事機載網(wǎng)絡(luò)通信技術(shù)方向的研究。
1671-4598(2016)01-0191-05
10.16526/j.cnki.11-4762/tp.2016.01.053
TP393
A