当前位置:首页 > 智能硬件 > 智能硬件
[导读]摘要:针对Windows CE系统下专用网络驱动接口开发难度大的情况,本文介绍一种基于Windows CE流接口驱动的工作机制及开发方法。相比于Windows CE对各种硬件设备所提供的专用接口,流接口驱动具有更大的灵活性,且能够

摘要:针对Windows CE系统下专用网络驱动接口开发难度大的情况,本文介绍一种基于Windows CE流接口驱动的工作机制及开发方法。相比于Windows CE对各种硬件设备所提供的专用接口,流接口驱动具有更大的灵活性,且能够实现应用层到底层硬件的控制。以含有ARM11内核的S3C6410结合以太网通信芯片DM9000A为例,逐步分析流接口驱动程序的开发流程,并利用PC机抓取以太网通信数据,验证了流接口驱动程序开发的正确性。

关键词:Windows CE 6.0;S3C6410;DM9000A;流接口驱动

引言

嵌入式技术在各个领域的应用与日俱增,基于微软公司研发的Windows CE嵌入式操作系统的电子设备更是渗透到各行各业。随着网络技术的发展,以太网几乎成为了电子通信设备首选的通信方式。Windows CE 6.0提供的网络接口驱动器标准(NIDS)固然得到系统的良好支持,但其驱动程序的实现较为复杂,且通过NIDS实现应用程序对网络底层驱动的操作难度较大。

针对Windows CE6.0系统下应用程序对设备硬件难以灵活控制的问题,本文介绍一种使用流接口驱动实现应用程序对硬件进行控制的方法。考虑到Windows CE6.0在内核访问机制上有别于以往版本,且以太网接口的广泛使用及其基于NIDS的开发难度较大,故而以DM9000A网络芯片的驱动及控制为例进行介绍。

1 Windows CE 6.0的设备驱动机制

Windows CE所有的驱动程序都是以DLL文件的形式存在的,系统在执行驱动程序代码之前必须先将相应的DLL文件加载到地址空间。Wind owsCE 6.0提供3个系统进程来加载和执行驱动程序的DLL文件,它们分别是Device.exe、GWES.exe和FileSys.exe。它们各自加载的驱动类型如图1所示。

2 流接口驱动工作原理

2.1 流接口驱动架构

应用程序根据加载的流驱动的名称和操作码调用文件API,文件API被系统转发到FileSys.exe进程中;FileSys.exe一旦发现转发过来的文件API是对设备的操作,则会交给设备管理器进行处理;设备管理器将根据具体的请求,调用相应的流驱动接口程序。对于Windows CE系统应用层而言,使用流接口驱动的硬件设备被抽象为一个具有固定接口函数的动态链接库(DLL)。应用程序调用文件API函数与流接口驱动程序进行通信,把对硬件的操作转化为对文件的读写控制,从而达到应用程序操作硬件的目的。流接口驱动程序的体系结构如图2所示。

2.2 流驱动接口函数

流接口驱动程序具有统一的接口函数,只需根据硬件没备的操作时序在相应的接口函数里编写控制指令。Windows CE系统下流接口函数功能描述如表1所列。

表1中XXX代表驱动文件的名称,Windows CE中流接口驱动的文件名称规定为3个大写的字母/数字。在进行流接口驱动程序编程时,并非所有的接口函数都要编写,一般比较重要的是XXX_Init()和XXX_IOControl()两个函数。前者在设备驱动被加载时调用,主要编写初始化硬件设备的相应控制指令,其中包括很是关键的地址映射操作;后者则主要实现对硬件设备的各种控制,可以实现数据的读写等操作,对设备的所有控制都可以在这个接口函数下实现,只需分配好相应的控制码。对于本文介绍的DM9000A,DM9_Init()实现虚拟地址的获取及初始化操作,DM9_IOControl()则实现数据的发送与接收,其中发送控制码定义为DM9_SendData,接收控制码为DM9_ReceiveData。

3 DM9000A流驱动程序的实现

DM9000A支持IEEE802.3x全双工模式流控制,提供IP/TCP/UDP校验、产生及检测功能;内部集成10/100M自适应PHY,同时具有13 KB的接收缓冲区和3 KB的发送缓冲区,支持8位和16位数据接口。

S3C6410与DM9000A的接口电路如图3所示。在流驱动程序中是将DM9000A内部寄存器地址空间映射到S3C6410内部划分的SROM的BANK1空间上,物理基地址是0x18000000。在Windows CE 6.0系统下对硬件寄存器的访问首先需要进行地址映射,将寄存器物理地址映射为系统可访问的虚拟地址。最为简单的方法就是从系统目录(C:\wince600\platform\studk6410\src\inc)下找到基于OEM层的地址配置表(oemaddrt ab_cfg.inc),从文件中找到所使用的SROM的BANK1的虚拟地址,在驱动程序中直接访问该地址(如同访问芯片的寄存器地址)。

流接口驱动的实现将集中体现在对初始化接口函数和I/O控制接口函数的操作,函数主要代码如下:

其中,0x94000000正是从地址配置表文件中获取的虚拟地址,dwEthernetIOBase经映射后则如同DM9000A内部寄存器的首地址。由于硬件线路上是使用S3C6410的地址线中的位2作为DM9000A的数据/地址访问信号(高电平为访问数据),故以“dwEthernetIOBase+4”作为访问数据的基地址。

其中,参数Handle为流接口设备的句柄;dwIoControICode为I/O控制码,可以根据需要自由定义;pInBuf为传入数据指针;nInBufSize为数据长度。除了初始化函数和I/O控制函数外的其他流驱动接口函数无需任何处理,直接给出返回值即可。

发送函数dm9000_send(pInBuf,nInBufSize)获取流接口函数传入的发送数据指针和相应数据长度,然后驱动DM9000A发送数据,其工作流程如图4所示。

4 Windows CE 6.0系统下流驱动程序的使用

4.1 流驱动程序的加载

流接口驱动程序需要按一定的方式配置后才能被系统识别并编译。其配置的主要流程如图5所示。

将流驱动程序加入定制系统之后还需要添加相应的注册表启动信息,在platform.reg文件中添加以下内容:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\DM9]

“Index”=dword:1

“Order”=dword:30

“Prefix”=“DM9”

“DLL”=“DM9.dll”

为使生成的DLL文件能够被包括在烧写文件中并下载到开发板上,还需在platform.bib文件中加入相应代码,内容如下:

IF BSP_NODM91

DM9.dll $(FLATRELEASEDIR)\DM9.dll NK SHK

ENDIF BSP_NODM9 !

经过以上的配置之后,流接口驱动程序已经配置完成,只需要对Windows CE 6.0的系统定制工程重新编译,并将生成的镜像文件下载到开发板上,即可通过文件API操作DM9000A的数据收发。

4.2 应用程序对流驱动程序的调用

Windows CE启动时会自动枚举注册表HKEY_LOCAL_MACHINE\Drivers\BuiltIn目录下的驱动信息,并加载相应驱动程序的动态链接库,然后执行初始化接口函数——DM9_Init()。在驱动程序成功加载之后,应用程序对硬件的操作就只需调用文件API便可实现,但前提是相应的操作必须在驱动程序中有定义,并且分配了操作码。对于DM9000A的数据发送,其文件API代码如下:

……

hDm9=CreateFile(TEXT(“DM91:”),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

该代码调用文件API打开设备进行读写操作,得到文件操作的句柄名hDm9。

DeviceIoControl(hDm9,DM9_SendFrame,&SendData,sizeof(SendData),NULL,0,&dwReturn,Null);

……

该代码调用文件API对设备发送操作命令。其中,hDm9告诉系统要操作的设备为DM9000A;DM9 SendFrame为发送数据的操作码,这必须与驱动程序中定义的相一致,也就是让系统知道进行的是什么操作;&SendData为发送的数据帧首地址;sizeof(SendData)为发送数据的长度……

4.3 实验验证

将基于Windows CE 6.0的DM9000A流接口驱动程序应用于电子式互感器合并单元的以太网数据通信模块设计中,其通过DM9000A发送的数据帧在PC机上使用WinPcap软件进行以太网数据包抓取,从而验证流驱动程序及其应用程序是否正确实现Windows CE下以太网数据的发送。在实验中以IEC61850-9-2数据帧格式发送标识为NCEPU的采样值测试数据,其实验结果如图6所示。

抓取的以太网数据说明了PC机接收到的数据和开发板上通过流接口驱动发送过来的数据是一致的,从而验证了流接口驱动程序正确可行。

结语

本文介绍的流接口驱动虽然不支持WIndwos CE提供的标准接口,无法通过系统标准函数库进行操作,但可以直接根据硬件设备的操作时序编写驱动,具有极大的操作灵活性,非常适合在Windows CE应用程序中对硬件设备底层进行操作。

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

随着科技的飞速发展,电子产品在我们日常生活中扮演着越来越重要的角色。而在这些电子产品中,接口作为连接设备与外部设备的桥梁,其重要性不言而喻。其中,Type-C接口作为一种新型的接口标准,因其独特的优势,逐渐成为了众多电子...

关键字: 电子产品 Type-C 接口

好用、高效的多合一传感器开发工具,支持给新一代高科技 MEMS 传感器产品开发应用软件

关键字: 传感器 Windows MacOS

双系统将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对双系统的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 双系统 Windows Linux

今天,小编将在这篇文章中为大家带来Windows 11系统的有关报道,通过阅读这篇文章,大家可以对Windows 11系统具备清晰的认识,主要内容如下。

关键字: Windows 操作系统

随着电动汽车的普及,充电桩作为电动汽车的重要基础设施,越来越受到人们的关注。然而,对于许多电动汽车用户来说,直流充电桩和交流充电桩的接口和区别仍然是一个令人困惑的问题。本文将从接口和区别两个方面,详细探讨直流充电桩和交流...

关键字: 电动汽车 接口 充电桩

武汉2023年9月19日 /美通社/ -- 目前,在国家政策和市场需求双重驱动下,国内数据库行业呈现出百花齐放的态势。充分竞争的市场环境下,达梦数据连续数年保持中国数据库管理系统市场占有率前列地位,成为当之无愧的国产数据...

关键字: DM DSC 国家电网 接口

深圳2023年9月15日 /美通社/ -- 9月14-15日,2023全球AI芯片峰会(GACS 2023)在深圳正式举行。峰会以【AI 大时代 逐鹿芯世界】为主题,共探AI芯片的产学研用,邀请了清华大学教授、中国半导体...

关键字: 接口 芯科 内存 AC

(全球TMT2023年9月8日讯)亚马逊云科技日前在一年一度的存储服务创新日上宣布推出诸多亚马逊云科技存储服务的新功能,其中重点包括为支持人工智能/机器学习、大数据分析等数据密集型工作负载进一步提升Amazon Ela...

关键字: 亚马逊 FOR IC Windows

Type-C接口已经成为当今市场上备受青睐的接口之一。它以其小巧轻便、高速传输、支持多种协议等特点,吸引了越来越多的关注。

关键字: Type-C 接口 USB

USB-C和Type-C是两种不同的USB接口类型,它们在外观、结构和功能上有一些区别。下面将详细介绍这两种接口类型的区别和特点,帮助大家更好地了解和认识它们。

关键字: usb-c type-c 接口
关闭
关闭