基于PocketPC的CF卡驱动程序设计
殊流接口驱动程序相对应的特殊设备文件名。文件名前缀存储在注册表的相应驱动程序的键值中。在用户生成流接口驱动程序时,必须指定这三个前缀字母。
C)即插即用
驱动加载过程就是对中断、I/O端口等系统资源进行系统分配的过程。此过程与DM和设备文件名紧密相关。
a.加载流接口驱动
CF卡加载流接口驱动有两种方法:
第一种加载的类型是在DM自动检测到CF卡与PocketPC平台的连接时进行的。
第二种加载的形式是在DM不能自动检测到CF卡与平台的连接时,使用该CF的应用程序必须列出该外围设备的驱动程序,即主动调用RegisterDevice()或者ActivateDevice()函数实现驱动的加载。
即插即用时驱动的加载是采用第一种类型。实现CF卡即插即用,首先下位机需要修改相应的CIS(CardInformationStructure),在驱动中添加检测模块,并且在注册表添加设备注册信息。
当系统开启或者CF卡插入槽后,DM会调用在注册表中设置的检测模块检测插卡类型,如果符合,则会加载相应的驱动。检测模块写成DLL的形式,调用CF卡插槽接口函数检测CIS中的数据,判断是否对应设备。如果对应,则告诉DM需要加载注册表中指定的相应设备的驱动程序。
b.卸载流接口驱动
流接口驱动根据加载驱动的方式用两种方式分别卸载。
对DM自动加载的设备,当检测到CF卡从插槽拔出时,DM从HKEY_LOCAL_MACHINEDriverActive键中删除相应驱动程序项,并调用DeregisterDevice函数从文件系统中删除相应外围设备的文件名,同时通知FreeLibrary函数卸载DLL。
对应用程序主动加载的驱动设备,应用程序必须在DLL存在前通过调用函数DelregisterDevice来卸载DLL
2.2.3.编写CF卡接口驱动程序DLL
CF卡驱动程序使用CF卡插槽接口函数实现驱动。对每个驱动程序而言,其所要求的标准的入口点用来实现标准文件IO函数和电源管理函数,这些函数由WinCE操作系统的内核使用。这些标准入口点为:XXX_Close,XXX_Denit,XXX_Init,XXX_IOControl,XXX_Open,XXX_PowerDown,XXX_PowerUp,XXX_Read,XXX_Write等[3]。
生成一个DLL之前,必须用设备文件名前缀替换入口点名字中的XXX,以对应不同的设备驱动。
3.CF卡驱动程序设计实例
3.1.CF卡系统设计
要实现标准的CFCard,硬件上关键在于接口的实现。我们应用的是TexasInstrument公司的TL16PC564接口芯片来简化设计并使其符合CF+标准。设计方案如图二所示:
3.1.1.TL16PC564接口芯片介绍
TL16PC564接口芯片提供了在子系统串行数据和CF卡并行接口数据之间的串并转换功能[2]。在下位机子系统中,MCU负责处理由上位机和外部系统的数据流交互。此系统结构可以制作各种功能的CFIO卡:如MODEM卡,网卡等。
TL16PC564的接口芯片功能模块如图三所示。
芯片中的CFCard的属性空间由256字节的CIS和8字节的CCR(卡配置寄存器)组成。该CIS和CCR利用主机CPU和子系统都可访问的DPRAM实现。系统上电时,由子系统负责完成对CIS的初始化。
TL16PC564接口芯片的主要特性:
1)集成了符合CF+标准的TL16550的PCMCIA接口逻辑,该逻辑提供了外设与CPU之间的数据串并转换功能。
2)256字节的CIS和8字节的CCR由DPRAM代替EEPROM,使修改和更新CIS和CCR更加容易。
3)提供了完全可编程的串行接口特性。
4)可选的串行旁路模式可以使子系统能直接并行访问接收和发送FIFO,使系统设计更加灵活,提高了子系统和主系统CPU间数据传送吞吐率。
3.1.2.TL16PC564接口芯片在多功能CF卡中的设计实现
对CF卡而言,实现CF卡功能的软件设计包括两个方面,一方面是CFcard侧MCU对CIS的初始化及数据采集和计算,另一方面是主机侧的驱动程序。在CFCard正常工作前,必须由卡上的MCU对设备进行初始化,即将CIS信息写入属性空间,从而经过主机识别,使主机明确CFCard的应用类型。
在实际设计中,TL16PC564硬件设置为旁路模式,上下位机通过访问FIFO,实现数据的交互。对上位系统驱动而言,数据的发送等价于对TL16PC564的FIFO写数据,当数据的FIFO写满之后,配合16650的控制逻辑,下位系统获得数据到的消息,从而将FIFO的数据读出,完成系统数据通讯下行的流程。上行流程与下行流程类似。由于TL16PC564硬件设置为旁路模式,使下位机可以直接访问FIFO,可以提高通讯速率。我们在实现上下位机通讯过程中,定制了高效的通讯规则,使上下位机数据交互速率最优化,经过测试,系统通讯速度达:56kbyte/s。下位系统的MCU可以直接访问FIFO,可以选择不同的集成多功能的MCU或者添加外围模块,实现多种通道的数据的采集和控制。系统设计时,可定制完善可靠的通讯规约,实现系统对各种数据通道的控制和访问,
- MCS-51系列单片机结构化程序设计探讨(04-20)
- 状态机在单片机程序设计中的应用(05-01)
- ARM处理器的位置无关程序设计(09-19)
- 基于分布式处理技术的物联网数据库设计(05-21)
- 模块化管理和设计(12-01)
- 马踏棋盘的实现(12-01)