USBN9604及其在USB接口设计中的应用

发布时间:2010-6-27 22:53    发布者:我芯依旧
关键词: USB , USBN9604 , 接口设计
1引言
USB通用串行总线是近年兴起的一种通信方式。USB协议1.1版规定了低速(1.5Mb/s)和全速(12Mb/s)两种速率,目前大部分USB器件支持该协议。2000年USB2.0白皮书出台后,其速度最高可达480Mb/s。该总线是由Compaq、Intel、Microsoft、NEC四公司共同提出,并得到了众多厂商的支持。USB接口具有安装方便、高速、灵活、低成本、易扩展,支持热插拔等优点,已经逐渐成为现代数据传输的发展趋势。

2 USBN9604

USBN9604是NationalSemiconductor公司设计生产的一款较新型的专用USB通信控制芯片,是US-BN9602的改进产品,同时在时钟产生电路的复位机制上又较USBN9603有所改进。USBN9604支持全速传输,可满足USBl.0和1.1协议。它具有8位并行接口,可支持DMA、MICROWIRE/PLUS。图1是US-BN9604的结构框图。其主要特点如下:

工作频率为48MHz,但外部只需接24MHz晶振,因为芯片内部有倍频电路,因而可得到48MHz时钟。

可由编程时钟发生器编程产生不同的频率时钟,以作为外部器件(如CPU)的时钟信号。

带有串行引擎接口(SⅢ),可实现USB物理层和信号层协议的转换,主要有CRC校验/产生、PID校验/产生、位填充/解除填充、地址识别、握手评估/产生、并串转换等。

带有7个端点的USB功能控制器,每个端点对应一个FIFO。其中端点0是双向控制端点(FIFO 8字节深),另有3个发送端点:EPl(16)、EP3(16)和EP5(64)以及3个接收端点EP2(16)、EP4(16)和EP6(64)。

USBN9604内部有64个映射到内存的寄存器,主要有主控制寄存器(MCNTRL)、时钟配置寄存器(CCONF)、主事件寄存器(MAEV)、转换事件寄存器ALTEV)、接收发送事件寄存器(RXEV、TXEV)以及各端点的控制寄存器和收发数据及状态寄存器等。固件的大部分功能就是完成对此寄存器组的读写,实现对接口的配置、接口状态的转换以及数据在外设和计算机之间的传输等。


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


第二种则直接应用WinDriver提供的API函数编写驱动程序,这种方法比用Wizard生成框架代码的方法更加灵活方便。但要求编程人员对驱动程序的框架有一定的了解。

笔者在实验中采用的是第一种方法,实验效果良好。
本文地址:https://www.eechina.com/thread-13805-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表