基于WINCE的CAN總線設(shè)備驅(qū)動研究
目前嵌入式車載網(wǎng)絡(luò)系統(tǒng)一般采用LINUX嵌入式操作系統(tǒng),以ARM7s3c44Bo為微控制器,SJAl000為CAN控制器的解決方案,實現(xiàn)LINUX下的CAN通信.在WINCE平臺下,CAN卡的研究已經(jīng)有很多。也取得了不錯的應(yīng)用效果,但以ARM9s3c2440為嵌入式系統(tǒng)硬件核心,外圍擴展CAN控制器SJA1000,嵌入式操作系統(tǒng)采用WINCE的應(yīng)用方案幾乎沒有,所以值得研究.
1 嵌入式車載網(wǎng)絡(luò)的構(gòu)成
嵌人式車載網(wǎng)絡(luò)由若干個子節(jié)點控制器和主控制單元組成,其中主控單元對子節(jié)點進行監(jiān)視與控制,實現(xiàn)不同的CAN數(shù)據(jù)總線系統(tǒng)問的數(shù)據(jù)交換,網(wǎng)絡(luò)的拓樸結(jié)構(gòu)如圖1所示.
圖1系統(tǒng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
2系統(tǒng)采用的驅(qū)動模型
目前基于WINCE的兩種驅(qū)動模型是本機設(shè)備驅(qū)動程序和流接口驅(qū)動程序,不同的驅(qū)動模型只能通過它們支持的軟件接口來區(qū)別.
本系統(tǒng)采用的是流接口驅(qū)動程序,圖2給出了流接口驅(qū)動的工作結(jié)構(gòu).流接口驅(qū)動模型由設(shè)備管理器統(tǒng)一加載、管理和卸載,應(yīng)用程序通過文件系統(tǒng)的API函數(shù)調(diào)用流接口函數(shù),然后由流接口驅(qū)動程序調(diào)用本機驅(qū)動或者通過設(shè)備管理器與系統(tǒng)內(nèi)核或外圍設(shè)備進行信息交流。
圖2流接口工作結(jié)構(gòu)
3車載網(wǎng)絡(luò)主控單元硬件平臺實現(xiàn)
本車載網(wǎng)絡(luò)主控單元的硬件平臺采用的是嵌入式處理器ARM9s3c2440,CAN控制器SJAlooO,CAN總線收發(fā)器82C250,人機界面采用觸摸屏.系統(tǒng)的硬件組成結(jié)構(gòu)如圖3所示.
圖3系統(tǒng)硬件組成結(jié)構(gòu)
車載網(wǎng)絡(luò)主控制單元同時跨接在兩個CAN網(wǎng)絡(luò)之間,實現(xiàn)對高速、低速CAN網(wǎng)絡(luò)的監(jiān)控和數(shù)據(jù)的共享,相當(dāng)于一個CAN的HUB.ARM9s3c2440和SJA1000之間的部分硬件原理下面將簡單描述.
本系統(tǒng)采用的XC95144是xILINX公司的復(fù)雜可編程邏輯器件(CPLD).由于系統(tǒng)還要提供許多其他接盯,如USB和PCMICA,為了更高效利用ARM9s3c2440的系統(tǒng)資源,特別是中斷資源,在系統(tǒng)硬件的設(shè)計中采用了CPLD.CAN控制器SJAl000的中斷引腳連接到CPLD,通過編制CPLD的一些邏輯控制程序,產(chǎn)生SJA1000的片選信號與中斷信號,若CAN-INT中斷,則觸發(fā)ARM處理器的EINT0引腳,EINT0的硬件中斷后,ARM捕捉到此中斷信號.82C250是CAN總線收發(fā)器,在本系統(tǒng)的設(shè)計中82C250與SJA1000間采用了光耦器件來進行連接.
4流接口驅(qū)動相關(guān)函數(shù)的實現(xiàn)
4.1 WINCE下訪問SJAl000寄存器的實現(xiàn)
根據(jù)硬件平臺,得到ARM9s3c2440與SJA1000連接的硬件地址,即SJA1000的物理基地址,再結(jié)合SJA1000各寄存器與基地址的偏移關(guān)系.可以得到寄存器的所有物理地址.
在WINCE下,由于有MMU管理單元,因此不能使用物理地址,而只能采用虛擬地址(VA)來訪問該寄存器.調(diào)用WINCE的系統(tǒng)函數(shù)VirtualAlloc,VirtualCopy把物理地址轉(zhuǎn)化為程序可以訪問的虛擬地址,然后通過SJA1000的虛擬地址來設(shè)置SJA1000的工作狀態(tài).SJA1000的基本工作流程如圖4所示.
評論