基于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所示.
评论