当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于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 适配卡驱动程序运行可靠、通信稳定。产品已经被多个产家应用 于实际的工业控制领域。

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

台北2024年5月21日 /美通社/ -- 提供针对AMD WRX90和TRX50主板优化的DDR5 OC R-DIMM 提供容量128GB(16GBx8)到768GB(96GBx8),速度5600MHz到8...

关键字: AMD 内存 BSP GB

在现代汽车电子系统中,CAN(Controller Area Network)总线技术因其高可靠性、高速率及灵活性而得到广泛应用。CAN总线采用差分信号传输方式,确保信号在传输过程中的抗干扰能力。然而,在某些特殊应用场合...

关键字: CAN 总线 差分输出

上海2024年5月20日 /美通社/ -- 2024年5月16日,世界知名的生命科学公司 Eppendorf 集团于第二十三届生物制品年会上成功举办了"疫路超越 推流出新"的产品发布会,正式推出大规模...

关键字: RF PEN BSP IMAC

北京2024年5月20日 /美通社/ -- 过去五年里,支付和收款方式日新月异,其发展和变化比过去五十年都要迅猛。从嵌入式数字商务的出现,到"一拍即付"的...

关键字: VI BSP PAY COM

华钦科技集团(纳斯达克代码: CLPS ,以下简称"华钦科技"或"集团")近日宣布致敬 IBM 大型机 60 载辉煌历程,并将继续实施集团大型机人才培养计划。

关键字: IBM BSP 研发中心 PS

助力科研与检测新突破 上海2024年5月15日 /美通社/ -- 全球知名的科学仪器和服务提供商珀金埃尔默公司今日在上海举办了主题为"创新不止,探索无界"的新品发布会,集中展示了其在分析仪器领域的最...

关键字: 质谱仪 BSP DSC 气相色谱

上海2024年5月16日 /美通社/ -- 2024年5月10日至5月13日,富士胶片(中国)投资有限公司携旗下影像产品创新力作亮相北京P&E 2024。在数码相机展览区域,全新制定的集团使命"为世界绽...

关键字: 富士 数码相机 影像 BSP

贝克曼库尔特目前已成为MeMed Key免疫分析平台和MeMed BV检测技术的授权经销商 在原有合作的基础上,继续开发适用于贝克曼库尔特免疫分析仪的MeMed BV检测 加州布瑞亚和以色列海法2024年5月16日...

关键字: BSP IO 检测技术 免疫分析仪

英国英泰力能的燃料电池是可产业化的产品解决方案 英国首个专为乘用车市场开发的燃料电池系统 在 157kW 功率下,此燃料电池比乘用车的其他发动机更为强大 &...

关键字: ENERGY INTELLIGENT 氢燃料电池 BSP

深爱人才,共赴"芯"程 深圳2024年5月15日 /美通社/ -- 5月11日,深圳国资国企"博士人才荟"半导体与集成电路产业专场活动在深圳市重投天科半导体有限公司(简...

关键字: 半导体 集成电路产业 BSP 人工智能
关闭
关闭