您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术基于PocketPC的CF卡驱动程序的设计思路和程序架构 正文
基于PocketPC的CF卡驱动程序的设计思路和程序架构

基于PocketPC的CF卡驱动程序的设计思路和程序架构

点击数:7492 次   录入时间:03-04 12:01:58   整理:http://www.55dianzi.com   嵌入式系统-技术

    芯片中的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或者添加外围模块,实现多种通道的数据的采集和控制。系统设计时,可定制完善可靠的通讯规约,实现系统对各种数据通道的控制和访问,达到多功能卡设计的目的。

    3.2.CF卡驱动程序的实现

    实现PocketPC2002的CF卡驱动,即采用EVC3.0+PocketPCSDK,在EVC里编译代码,生成DLL,然后导入到PocketPC的\Windows目录下,并添加注册表信息,实现即插即用。以上是制作驱动的完整流程[3]。

    3.2.1.实现流接口驱动的标准接口(设备文件名取CFC)

    A)CFC_Init

    DM调用RegisterDevice或ActivateDevice进入此模块。通过XXX_Init()的返回值判断CF卡初始化是否执行成功。此模块完成以下功能:

    a.初始化CF卡硬件。

    b.分配资源。

    c.注册回调函数,当设备状态变化,则操作系统调用此回调函数CardRegisterClient。

    d.分配IO资源,调用CF卡插槽驱动接口函数实现。

    e.注册中断函数,调用CardRequestIRQ()函数。

    f.配置CF卡寄存器。

    B)CFC_Deinit

    系统DM调用此模块卸载CF卡。需要做的工作是释放申请的资源等。

    C)CFC_Open

    应用程序调用Createfile时进入此模块,主要是分配资源,数据结构的初始化。

    D)CFC_Close

    应用程调用API接口CloseHandle(hFile)进入此模块,关闭CF卡的驱动。

    E)CFC_Read

    应用程调用API接口ReadFile进入此模块,读取CF卡数据。

    F)CFC_Write

    应用程调用API接口WriteFile进入此模块,向CF卡写数据。

    G)CFC_IOControl

    应用层调用DeviceIoControl()进入此模块。

    3.2.2.驱动中断处理

    PocketPC处理中断的方法是在处理XXX_Init调用的过程中让流接口驱动程序生成一个新的线程,这个线程叫做中断服务线程(IST)。在中断发生时,OS就给IST发信号。CF卡驱动程序的IST从CardRequestIRQ函数接受信号。因为内建CF卡插槽的驱动程序得到由CF卡插槽生成的原始中断,所以PC卡驱动程序并不直接处理中断。在中断发生时,进入CardReguestIRQ指定的PC卡插槽驱动程序调用的回调函数。

    3.3.应用程序与驱动交互

    PocketPC对设备的操作是采用文件操作实现的。应用层可以调用以下API接口函数对设备进行操作:

    Createfile():创建设备文件

    ReadFile():读取设备数据

    WriteFile():放送数据至设备

    DeviceIOControl():其他的相关操作

    CloseHandle():关闭设备文件

    应用程序经由CreateFile()打开和存取CF卡驱动程序,产生一个对CF卡驱动程序中CFC_Open()的调用,驱动程序返回一个句柄,然后该句柄被常规的Win32文件功能所用,如WriteFile()和ReadFile()。调用WriteFile()和ReadFile()分别对应驱动程序的CFC_Write(),和CFC_Read()模块。最后,CloseHandle()调用驱动程序的CFC_Close()模块释放内部资源。

    3.4.驱动程序的安装

    驱动程序的安装并不只是一个DLL,包括需要用到的数据文件、配置文件,和添加事先定义好的注册表项[4]。以下是添加系统注册表例子:

    [HKEY_LOCAL_MACHINEDriversCFC]

    "Dll"="CFCDriver.dll"

    "Prefix"="CFC"

    驱动安装过程是将驱动程序“CFCDriver.dll”文件存到POCKETPC中\windows目录下,并且修改注册表,制作安装包可以采样SDK中自带的工具实现。

    3结束语

    本文给出了基于PocketPC的CF卡驱动程序的设计思路和程序架构,其中具体实现代码限于篇幅,不再文中赘述。基于不同硬件设计,采样相同的驱动框架和设计方法,可以制作不同的CFIO卡,实现多种功能。



上一页  [1] [2] 


本文关键字:PocketPC  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术