当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]嵌入式Win CE中CAN总线控制器的驱动设计与实现

摘 要:CAN总线是一种具有国际标准且性价比较高的现场总线,在当今自动控制领域的发展中发挥着重要的作用。这里简要地介绍了CAN总线及其控制器sJAl000的工作原理和Win CE下流接口驱动程序的相关知识。采用Win CE流接口驱动程序实现对CAN控制器访问并操作,并详细地分析了SJA1000驱动程序的设计与实现,并使用Platform Builder将驱动编译进内核,以动态链接库的形式提供给用户,为进一步开发嵌入式Win CE操作系统系统下CAN总线设备提供了一个良好的底层硬件驱动支持。
关键词:CAN总线;SJAl000;WinCE;流接口驱动;Platform Builder


0 引 言
    近年来,由于消费电子、计算机、通信(3c)一体化趋势日趋明显,嵌入式系统再度成为研究和应用的热点。嵌入式操作系统(:Real-time Embedded OperatingSystem,RTOs或EOs)作为一种实时的、支持嵌入式系统应用的操作系统软件,成为嵌入式系统(包括硬、软件系统)极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器Browser等。Windows CE操作系统就是微软公司从整体上为有限资源平台设计的多线程、完整优先权、多任务的操作系统Win CE支持各种处理器产品家族,包括x86,Xscale,ARM,MIPS和SH系列。它的模块化设计允许它对从掌上电脑到专用工业控制器的用户电子设备进行定制,选择系统模块和组件的多少决定了所需内存的大小。
    Windows CE操作系统之所以能够支持各种各样的硬件设备,是因为对每一款硬件设备,都有其对应的设备驱动程序,否则这款硬件就无法在Windows CE下正常工作。win CE提供了4种设备模型,其中2种是专门用于Win CE的模型,另外2种外部模型来自其他的操作系统。基于Win CE的两种模型是本机的设备驱动程序和流接口的驱动程序;两种外部模型用于通用串行总线(USB)和网络驱动器接口标准(NDIS)驱动程序。下面针对Win CE系统下基于三星公司的ARM9内核芯片S3c2410的CAN总线控制器SJAl000,以流接口驱动程序形式进行设计。


l CAN总线及控制器工作原理
    控制器局域网CAN是由ISO定义的串行通信总线,主要用于各种过程检测及控制。它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。通信速率可达1 Mb/s。cAN总线通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。它的基本设计规范要求有高位速率和高抗电磁干扰性,而且能够检测出产生的任何错误。由于cAN串行通信总线具有这些特性,它很自然的在汽车制造业以及航空工业中受到广泛应用。
    SJAl000是一种独立控制器用于移动目标和一般工业环境中的区域网络控制(CAN)。它是Philips半导体公司的PC.A82(;200 CAN控制器(BasicCAN)的替代产品。而且它增加了一种新的工作模式(PeliCAN),这种模式支持具有很多新特性的CAN2.0B协议。其内部体系结构如下图1所示。

    CAN核心模块控制CAN帧的发送和接收。接口管理逻辑负责连接外部主控制器,该控制器可以是卫星控制器件或任何其他器件。经过SJAl000复用的地址/数据总线访问寄存器和控制读/写选通信号都在这处理。SJAl000的发送缓冲器能够存储一个完整的报文(扩展或标准的)。当主控制器初始化发送,接口管理逻辑会使CAN核心模块从发送缓冲器读CAN报文。当收到一个报文时,CAN核心模块将串行位流转换成用于验收滤波器的并行数据。通过这个可编程的滤波器,SJAl000能确定主控制器要接收哪些报文。所有收到的报文由验收滤波器验收并存储在接收FIFO。储存报文的多少由工作模式决定,最多能存储32个报文。

[!--empirenews.page--]
2 流接口驱动程序工作机制
    相比于本机设备驱动程序,流接口驱动程序表现为一个动态链接库,由设备管理器统一加载、管理和卸载。与具有单独目的的内部设备驱动程序相比,所有的流接口驱动程序都是用同一组接口并调用同一个函数集——流接口函数。win CE的文件系统通过这些人口点函数与流接口驱动进行通信,从而达到应用程序访问驱动程序、操作硬件的目的。流接口驱动程序要实现的DLL接口见表1。

    在实际的开发中,上述接口名称中的XXX三个字母被具体设备的设备文件名所代替。流接口驱动程序通过编译后,生成DLL文件,即动态链接库文件。


3 CAN总线控制器sJAl000驱动程序设计
    CAN总线控制器SJAl000驱动采用流接口驱动程序模型,要实现的流接口函数分别为CAN_Init,CAN_Deinit,CAN_Open,CAN_Close,CAN_Read,CAN_write,CAN_IOControl等。应用程序使用CreatFile()函数以文件的方式打开CAN控制器驱动,以获取驱动文件的句柄,然后使用该句柄调用DeviceloControl(),ReadFile(),WriteFile()函数来CAN控制器的各种功能。
    由于篇幅有限,下面仅针对CAN_Init,CAN_Read和CAN_IntrThread函数的实现进行详细的设计。
3.1 CAN_Init函数的设计实现
    当用户开始使用CAN总线控制器时,设备管理器调用这个函数来初始化控制器设备SJAl000。这个函数是通过设备管理器提供的ActiveDeviceEx()函数来调用的。函数执行后,如果成功就返回设备的句柄。CAN_Init函数的流程如图2所示。


3.2 CAN_Read函数的设计实现
  根据CAN协议规范,报文的接收由CAN控制器SJAl000独立完成,收到的报文放在接收缓冲器。可以发送给主控制器的报文由状态寄存器的接收缓冲器状态标志“RBS‘’和接收中断标志“RI”标出(如果使能)。主控制器会将这条信息发送到本地的报文存储器,然后释放接收缓冲器并对报文操作。发送过程能被SJAl000的中断请求或查询SJAl000的控制段状态标志来控制。cAN_Read函数操作成功则返回实际读取的字节数,否则返回值为-1。CAN_Read函数程序的流程图如图3所示。

[!--empirenews.page--]
3.3 CAN_IntrThread函数的设计实现
    在SJAl000控制器中,报文的发送和接收是采用中断方式来完成的。内核函数InterruptInitialize()外部中断事件和将逻辑中断号绑定,这一步就会使能该中断。当该中断发生时,ISR就触发该事件生效。完成以上工作后,驱动程序中的IST就可以使用WaitForsin-gleObject()函数等待中断的发生。中断处理结束后,IST需要调用InterruptDone()告诉操作系统中断处理结束。中断服务线程CAN_IntrThread函数程序流程图如图4所示。

   其他的流接口函数根据win cE流接口驱动程序模型进行编写。


4 驱动程序的封装及加载
    通过上面的工作,能够编译得到一个DLL函数,但它的接口函数还没有导出,还需要告诉链接程序需要输出什么样的函数。为此,必须建立一个def文件,使用WindoWS下自带的记事本程序编辑一个文件名为“Can.def”的文件:


    最后需要编写自己的CEC文件。主要是添加一个Build Method,任务是复制注册表到Win CE的系统目录下面。加一个bib File,其主要功能是把编译的can.dll文件添加到系统内核中去。保存写好的CEC文件,在.Platform Buildm中添加CEC特征到系统选项中去。生成系统时,添加自己的CEC特性,可以包含刚编写的can驱动程序。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

加利福尼亚州圣克拉拉市—2024年4月30日―AMD(NASDAQ: AMD)今日公布2024年第一季度营业额达55亿美元,毛利率为47%,经营收入3600万美元,净收入1.23亿美元,摊薄后每股收益为0.07美元。基于...

关键字: 嵌入式 PC 人工智能

这款全新的中端MCU系列为设计人员提供了更高水平的安全性和灵活性

关键字: 嵌入式 单片机

2024年4月11日,中国——意法半导体的ST25R100近距离通信(NFC)读取器芯片独步业界,集先进的技术功能、稳定可靠的通信连接和低廉的成本价格于一身,在大规模制造的消费电子和工控设备内,可以提高非接触式互动功能的...

关键字: 嵌入式 数据读取器 芯片

单片机是一种嵌入式系统,它是一块集成电路芯片,内部包含了处理器、存储器和输入输出接口等功能。

关键字: 单片机 编写程序 嵌入式

深圳2024年4月23日 /美通社/ -- 全球AI解决方案与工业级存储领导品牌宜鼎国际 (Innodisk)持续深化边缘AI布局,今(23)日发表全球首创"MIPI over Type-C"独家技术,让旗下嵌入式相机模...

关键字: AI 嵌入式 相机

为增进大家对嵌入式主板的认识,本文将对嵌入式主板以及嵌入式主板常见问题及其解决方法予以介绍。

关键字: 嵌入式 指数 主板

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统

为增进大家对嵌入式的认识,本文将对嵌入式、嵌入式工作相关的内容予以介绍。

关键字: 嵌入式 指数 嵌入式技术

机器人操作系统(ROS)驱动程序基于ADI产品而开发,因此可直接在ROS生态系统中使用这些产品。本文将概述如何在应用、产品和系统(例如,自主导航、安全气泡地图和数据收集机器人)中使用和集成这些驱动程序;以及这样将如何有助...

关键字: 电机控制器 机器人 嵌入式

支持高达48V@5A的PD受电模式,达到目前USB PD最高标准。

关键字: 嵌入式 开发板
关闭
关闭