3、 USB接口的硬件实现

51单片机与USBN9604的并行连接有两种方式,即非复用方式和复用方式。它们可通过设置引脚MODE0、MODEl来选择。在非复用方式时,可用控制引脚CS、RD、WR、地址引脚A0和双向数据线D[7:0]实现相应的地址读写。而在复用方式时,则使用控制引脚CS、RD、WR、地址锁存信号ALE和双向数据线D[7:01实现其地址读写。本设计采用复用方式进行数据交换。

图2所示是89C51单片机和USBN9604的接口电路,该电路由一片89C51单片机、USBN9604、时钟振荡电路以及相应的外围电路组成。其中USBN9604通过外部中断INT0与89C51单片机进行通信。

4 、USB接口的软件实现

设备固件是设备运行的核心,可采用C语言设计。其主要功能是控制USBN9604接受并处理USB驱动程序的请求(如各种标准请求)、接收/_k传数据。当主程序完成CPU和USBN9604的初始化后,可用while循环等待外部中断。中断处理程序可在给出中断人口后跳出中断。所有的USB事物处理都在函数USB-ISR中完成。图3所示是USB-ISR程序框图。在USB-ISR中,通过程序可读取USBN9604中的主事件寄存器(MAEV),并判断中断原因,包括收发事件的发生、总线状态的改变以及握手信号的产生等,同时可根据不同原因进入相应函数。另外也可通过函数具体实现各种USB标准的请求、端点0的接收和发送以及其它端点的收发和总线状态的改变等。

5、 设备驱动程序

目前较流行的驱动程序编写软件主要有DDK、VtoolsD和WinDriver等,其中WinDfiver相对比较简单,并可满足开发USB驱动的需要。利用它开发设备驱动程序不需要熟悉操作系统的内核,同时整个驱动程序中的所有函数都工作在用户模式下,因而可通过与WinDriver的.Vxd或.Sys文件交互达到驱动硬件的目的。

5.1WinDriver的主要特征

WinDriver编程软件具有以下特点:

提供有从用户层直接访问硬件的方法;

无需DDK以及核心态驱动程序的开发经验;

支持I/O、DMA、中断处理,同时支持PCI、ISA、USB、PCMCIA的开发;

对于性能要求特别苛刻的部分,WinDriver提供的APl可插入到核心态模式中运行,从而提高执行效率;

可利用常见的软件开发平台(VisualC++、BorlandC++、Delphi等)。

5.2开发步骤

利用WinDriver开发驱动程序有两种方法,分别介绍如下:

第一种是利用WinDriver自带的WinDriverWizard来分析用户开发的插卡,看其能否象设计的那样正常工作,然后自动生成驱动程序的框架代码,接着再修改代码并加入定制功能,同时在用户态执行和调试代码并将性能要求苛刻的部分插入到核心态。