当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于WinCE 环境的CAN 适配卡驱动程序的设计与实现

摘要:简要介绍了嵌入式实时操作系统WinCE环境下驱动程序的设计原理和CAN总线技术,并详细分析了依托PC/104总线的CAN适配卡底层驱动程序的设计与实现。

1.引言

WinCE 是一种为多种嵌入式系统和产品设计的紧凑、高效、可升级的操作系统,WinCE 采用标准模式,其最主要的特征:为有限的硬件资源提供了多线程、多任务和完全优先级的 计算环境。

WinCE 操作系统支持两种类型的驱动程序:[1]本地驱动程序(Build-In),是把设备驱动程 序作为独立任务实现,直接在顶层任务中实现硬件操作,完成特有专用的驱动程序;流接口 驱动程序,WinCE 的I/O 系统将设备程序作为内核过程实现,这种方式便于实现I/O 子系统 的层次模型,便于文件系统一起把设备作为特殊文件处理,提供统一的管理、统一的界面和 统一的使用方法,并把设备、文件及网络通信组织成为一致的更高层次的抽象,为用户提供 统一的系统服务和用户接口。驱动程序封装了将这些命令转换为它所控制的设备上的适当操 作所需的全部信息。

流接口驱动程序有在启动时加载和动态加载两种方式。本文实现的在 WinCE 环境下流结构的PC/104-CAN 驱动程序是在系统启动时加载的。

2. CAN 总线技术简介

CAN总线是德国Bosch 公司开发的一种串行数据通信协议,CAN 总线属于总线式串行 通讯网络,具有总线为多主方式工作且无需站地址节点信息、CAN 网络上的节点信息分成 不同的优先级、总线冲突仲裁时间低和总线的通信介质选择灵活等优点[2]。 CAN 适配卡的核心工作单元是它的控制器,控制器SJA1000 的组织结构如图1 所示。

 

 

其中,接口管理逻辑(IML):[3]它接收来自微控制器的命令,控制CAN 寄存器的寻址,并向微控制器提供中断和状态信息;发送缓存器:存贮发送到CAN 网络上的完整信息;位 流处理器(BSP):是一个控制发送缓存器和接收缓存器与CAN 总线之间控制数据流的程序 装置,同时具有执行错误检测、仲裁、总线填充和错误处理的能力;位定时逻辑(BTL)单 元:主要监视串口的CAN 总线,并处理与总线有关的位时序,使SJA1000 同步于CAN 总 线上的位流;错误管理逻辑(EML):主要完成接收BSP 的出错报告,并按照CAN 协议完 成错误界定, 从而使 BSP 和IML 进行错误统计。

CAN 适配卡的硬件网络工作环境示意图如图2 所示。

 

 

图2 中,通用微机的操作系统是WinCE,上位通用微机通过PC/104 总线与CAN 接口 适配卡相连,CAN 接口适配卡与具有CAN 接口的串行芯片通过CAN 总线进行数据交换, 所采用的协议是CAN 协议。在CAN 协议中,报文的表示、传送和控制主要由4 种类型的 帧来完成[4]:数据帧,携带数据信息,由发送器发送到接收器;远程帧,主要用于请求发送 具有相同标识符的数据帧,是通过总线发送的;出错帧标识总线错误,由检测出总线错误的 任何总线单元产生;超载帧主要为当前的和后续的数据帧提供附加延迟。

3 CAN 适配卡驱动程序的设计与实现

从引言部分可知,流接口可以为各种设备提供统一的访问接口,可以是字符设备、块设 备、虚拟设备和网络设备等。CAN 适配卡驱动程序的主要流程为[5]:应用程序调用函数 CreateFile 获取CAN 设备句柄,文件系统将会调用CAN 驱动例程中的CAN_Open 来响应应 用程序的请求。当应用程序调用ReadFile 函数读取CAN 设备上的字符时,文件系统将会调 用CAN 驱动例程中的CAN_Read 函数来读取CAN 设备上的字符。

对于本文流接口的驱动程序而言,是通过实现如下几个模块来实现驱动的:CAN_Open、 CAN _Close、CAN _Read、CAN _Write、CAN _IoControl 和CAN _Init 等模块。其中CAN _Init 模块是系统启动时由文件系统自动调用的,主要完成设备的初始化工作。另外,对于流接口 驱动程序可选函数CAN _PowerUp 和CAN _PowerDown,主要实现电源管理的功能。

限于篇幅,本文仅对主要的 CAN_Write 模块、CAN_Read 模块和中断服务线程模块的 实现作如下详细详细讨论。

3.1 CAN_Write 模块的实现

当 CAN 适配卡控制器在发送报文时,发送缓冲区对写操作是锁定的,这样CPU 必须 检查状态寄存器的发送缓冲区状态标志TBS,以确定可以将一个新报文写入发送缓冲区中, 当发送缓冲区被锁定(即标志TBS=0)时,CPU 周期性地查询状态寄存器,等待发送缓冲 区被释放;当发送缓冲区被释放(即标志TBS=1)时,CPU 将新报文写入发送缓冲区中, 并置命令寄存器的发送请求标志TR,该标志导致发送的启动。一旦发送成功中断产生,表 明CAN 报文已经发送成功。重复上面的工作就可以完成发送多个CAN 报文的工作。 CAN_Write 模块的流程图如图3 所示。

 

 

3.2 CAN_Read 模块的实现

如果 CAN 接收到一个报文,该报文通过验收滤波器验收并放入接收FIFO,则产生一个 接收中断。中断服务程序接收到这个中断后,将这个接收到的报文传送到由驱动程序维护的 报文存储区中,并置位命令寄存器的释放缓存区标志RRB。CAN_Read 函数并不等待来自 CAN 控制器的接收报文成功中断,而是读取保存在由驱动程序维护的报文存储区中的报文。 CAN_Read 函数的流程图如图4 所示。

 

 

驱动程序中的另外两个模块主要由 CAN_Close 、CAN_IoControl 函数来完成,前者主 要负责在关闭CAN 句柄时资源的回收任务,后者主要用于设置CAN 的工作参数,如波特 率,报文格式等,在此不作过多介绍。

 

[!--empirenews.page--]

 

4 结束语

本文的 CAN 适配卡驱动程序的开发环境:上位机是普通的PC 机,下位机的操作系统 是WinCE,硬件是深圳蓝天工控有限公司的嵌入式PC/104 总线主板PCM3568。驱动程序 已经过测试、验收。CAN 适配卡驱动程序运行可靠、通信稳定。产品已经被多个产家应用 于实际的工业控制领域。

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭