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