新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于USB2.0控制芯片ISP1581的USB设备驱动程序

基于USB2.0控制芯片ISP1581的USB设备驱动程序

作者:时间:2011-12-25来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/149941.htm

对象I包含了应用程序下传的IRP内容,包括命令或数据等参数,函数BuildVendorRequest用来分配并初始化一个用于厂商请求的URB( Request Block),该URB将作为下传IRP的一个参数,通过函数SubmitUrb发送给总线,以便完成与硬件的通信。

 在初始化URB时需要了解的传输方式及传输协议,该功能使用了传输方式,该方式包括三个阶段:设置阶段、数据阶段和状态阶段,其中数据阶段可选,开发者主要关注设置阶段中的8个关键字节的定义,8字节分成了5个字段,定义了传输请求及相关信息,这8个字节的格式如图3所示。

  BmRequestType:1字节,用来指定数据流动的方向,请求的类型,以及接收者。

  bRequest:1字节,用来指定请求。

  wValue:2字节,主机用来传输信息给,开发者可以根据情况自己定义。

  wIndex:2字节,主机用来传输信息给,开发者可以根据情况自己定义。

  wLength:2字节,包含数据阶段中接下来要传输的数据字节数目。

  以上字段的应用已经在程序注释中标出,在此不再赘述。

  USB的安装及调用

  USB设备的安装

  驱动程序编译完成后会生成一个名为USBDIO.SYS的文件,即USB设备驱动程序,另外在使用向导程序WizardDriver生成驱动程序时会产生一个名为USBDIO.INF的驱动程序安装程序,对此程序只需稍做修改就能正常使用,具体是将类改为USB,即Class=USB,由于本驱动程序使用符号链接名打开设备,所以删除ClassGUID选项,注意设备标识符必需为:%DeviceDesc%=USBDIO_DDI, USBVID_0471PID_0821,其中0471是USB的厂商识别码,0821是USB设备标识码。

  驱动程序安装过程是:将USB设备加电,连入计算机的USB接口,这时候会看到Windows操作系统提示发现新硬件,提问是否安装驱动程序,选择是,然后选择驱动程序所在文件夹,选择文件USBDIO.INF即可完成安装。

  USB设备驱动程序的调用

  为了完成对驱动程序的调用,笔者使用VC++6.0编写了USB应用程序包,程序包共由五个功能模块组成,用户通过调用这些模块即可方便的完成对USB外设的及读写,这些模块如下。

  ● int CTRLReadData(unsigned char usbSelect,unsigned char *rbuffer,unsigned char numData),主要功能是读取控制端点0发来的数据,数据存放在缓冲区rbuffer中。

  ● int CTRLSendTestCommand (unsigned char usbSelect,unsigned short int testCommand),主要功能是发送测试命令,变量testCommand定义了测试命令。

  ● int CTRLSendDMACommand (unsigned char usbSelect,unsigned char dmaDirection,unsigned char ramSelect,unsigned long dmaLength),主要功能是发送DMA传输命令,变量dmaDirection定义数据传输方向,ramSelect定义将要操作的USB外设的存储器,dmaLength定义了数据传输总数。

  ● int DMARead(unsigned char usbSelect,unsigned char *rbuffer,int len,int waitTime),主要功能是计算机批量读取中的数据,而以DMA方式从外部RAM读取数据。

  ● int DMAWrite(unsigned char usbSelect,unsigned char *rbuffer,int len, int waitTime),主要功能是计算机批量写数据到ISP1581,而ISP1581将以DMA方式写数据到外部RAM。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭