USB作为一种新型的接口技术,以其简单易用,速度快等特点而备受青睐.本文简单介绍USB接口的特点和PHILIPS 公司的USB 接口芯片PDIUSBD12,并详细说明USB 软硬件开发过程中应注意的问题。
引言
USB是近年来应用在PC领域的新型接口技术,是一些PC 大厂商,如Microsoft、Intel 等为了解决日益增加的PC 外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信的标准,自1995年在Comdex上亮相以来,至今已广泛地为各PC厂家所支持现在生产的PC 几乎都配备了USB 接口。Microsoft 的Windows98、NT以及MacOS、Linux、FreeBSD 等流行操作系统都增加了对USB 的支持。
USB 的主要优点:
现在的USB生产厂商很多,几乎所有的硬件厂商都有USB 的产品。USB控制器一般有两种类型:一种是MCU 集成在芯片里面的如Intel 的
8X930AX、CYPRESS的EZ-USB、SIEMENS的C541U以及MOTOLORA、National Semiconductors 等公司的产品。另一种就是纯粹的USB接口芯片仅处理USB 通信如PHILIPS 的PDIUSBD11(I2C 接口)、PDIUSBP11A、PDIUSBD12(并行接口)、National Semiconductor的USBN9602、USBN9603、USBN9604等、前一种由于开发时需要单独的开发系统,因此开发成本较高;而后一种只是一个芯片与MCU接
口实现USB通信功能,因此成本较低,而且可靠性高。本文主要介绍PHILIPS公司的PDIUSBD12器件。
PDIUSBD12 是一个性能优化的USB器件。通常用于基于微控制器的系统并与微控制器通过高速通用并行接口进行通信,也支持本地DMA。传输该器件采用模块化的方法实现一个USB接口,允许在众多可用的微控制器中选择最合适的作为系统微控制器,允许使用现存的体系结构并使固件投资减到最小。这种灵活性减少了开发时间、风险和成本。是开发低成本且高效的USB 外围设备解决方案的一种最快途径。PDIUSBD12完全符合USB1.1规范,也能适应大多数设备类规范的设计如成像类、大容量存储类、通信类、打印类和人工输入设备等。因此,PDIUSBD12非常适合做很多外围设备,如打印机、扫描仪、外部大容量存储器(Zip驱动器)和数码相机等现在用SCSI 实现的很多设备如果用USB 来实现可以直接降低成本。
PDIUSBD12 挂起时的低功耗以及LazyClock 输出符合ACPI、OnNOW和USB电源管理设备的要求。低功耗工作允许实现总线供电的外围设备。
PDIUSBD12还集成了像SoftConnect、GoodLink、可编程时钟输出、低频晶振和终端电阻等特性。所有这些特性都能在系统实现时节省成本,同时在外围设备上很容易实现更高级的USB 功能。
1.1 主要特性
1.2 内部结构
PDIUSBD12 的内部框图如图1 所示。
2 PDIUSBD12 的引脚说明及典型连接
2.1 PDIUSBD12 引脚说明
PDIUSBD12 引脚如图2所示,引脚如表1所列。
2.2 PDIUSBD12 的典型连接
PDIUSBD1 与80C51的连接电路如图3所示。在这个例子中,ALE始终接低电平,说明采用单独地址和数据总线配置。A0脚接80C51的任何I/O引脚,控制是命令还是数据输入到PDIUSBD12。80C51的P0 口直接与PDIUSBD12 的数据总线相连接。CLKOUT时钟输出为80C51提供时钟输入。
3.1 单片机方面软件设计
对于单片机控制程序,目前没有任何厂商提供自动生成固件firmware 的工具,因此所有程序都要由自己手工编制。USB单片机控制程序通常由三部分组成:第一、初始化单片机和所有的外围电路(包括PDIUSBD12);第二、主循环部分。其任务是可以中断的;第三、中断服务程序,其任务是对时间敏感的,必须马上执行。根据USB 协议,任何传输都是由主机host 开始的,这样,单片机作它的前台工作,等待中断,主机首先要发令牌包给USB 设备(这里是PDIUSBD12),PDIUSBD12 接收到令牌包后就给单片机发中断,单片机进入中断服务程序,首先读PDIUSBD12 的中断寄存器,判断USB 令牌包的类型,然后执行相应的操作。因此,USB单片机程序主要就是中断服务程序的编写,在USB单片机程序中要完成对各种令牌包的响应,其中比较难处理的是SETUP包,主要是端口0的编程。
单片机与PDIUSBD12 的通信主要是靠单片机给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字分为三种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12给出了各种命令的代码和地址。单片机先给PDIUSBD12 的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可。
在编写USB 的单片机程序时,需要注意:
单片机的中断应设置为电平触发:中断后一定要读上次传输状态寄存器(命令40-45H) ,以清除中断寄存器中的中断标志,这样,PDIUSBD12的中断输出才能变回高电平,这一点非常重要。
USB 初始化过程为
完成初始化工作后,就可作其它的前台工作了,并在前台判断是否有Setup 包(通过一个变量,当中断服务程序检测到有Setup 包时,设置该变量)。然后执行响应的控制传输。在调试USB 单片机程序时,还要特别注意Windows 对USB 设备的枚举顺序。
如果以上步骤都正确,主机将找到新设备,提示安装驱动程序;否则找到未知设备,不可用。安装驱动程序后,以后的每次PlugIn,枚举次序与以上步骤略有不同,之后会有SetConfiguration、GetConfiguration 和GetInterface等调用。
3.2 主机方面软件设计
Windows98 提供了多种USB 设备的驱动程序,但好像还没有一种是专门针对数据采集系统的,所以必须针对特定的设备来编制驱动程序。尽管系统已经提供了很多标准接口函数,但编制驱动程序仍然是USB 开发中最困难的一件事情,通常采用Windows DDK来实现。目前有许多第三方软件厂商提供了各种各样的生成工具,像Compuware的driverworks,Blue Waters 的Driver Wizard 等,它们能够很容易地在几分钟之内生成高质量的USB的驱动程序。作为WIN98 和WIN2K推荐的一项新技术来说,USB 的驱动程序和以往的直接跟硬件打交道的WIN95 的VXD方式的驱动程序不同,它是WDM类型的。
在调试USB 设备时,可使用UsbView程序检测设备是否能被Windows 枚举并配置,如果成功,还可在该程序中查看设备描述符、配置描述符和端点描述符是否正确。之后可以使用Driver Wizard生成一个通用驱动程序,在Windows提示安装驱动程序时,选择Driver Wizard 生成的驱动程序。其实Driver Wizard 生成的仅是一个Windows控制台的应用程序,它会调用安装Driver Wizard时安装在系统中的通用USB驱动程序。使用该程序就可测试设备是否能够正确传输数据以及传输速度,该程序也可作为最终产品USB传输部分的框架;如果不能满足要求,也可用WDM 重新编制驱动程序,用调试好的USB 设备来开发、调试主机软件。
本文介绍一个高速数据采集系统,以AD公司的ADuC812为系统控制器。该单片机本身就是高度集成的高精度12 位数据采集系统,在其片内不仅组合了可重新编程非易失性闪速/电擦除程序存储器的高性能8位(与8051兼容MCU)还包含了高性能的自校准多通道(8 个输入通道)12 位ADC 和两个12 位DAC,且内核与8051 指令集兼容。PDIUSBD12 作为ADuC812 的存储器外设,接口比较简单。需要注意的地方是DMACK引脚必须接高电平,否则将不能接收任何命令和数据;EOT_N必须通过电阻接到USB的+5 V,以正确检测到USB 连接;INT_N引脚加1个上拉电阻,+5 V 接到VDD 引脚;在VOUT3. 3 引脚加1uF 电解电容和0.1uF 两个退耦电容。
结束语
PDIUSBD12 是一个性能优化的USB器件,它的SoftConnect 和GoodLink 技术使开发和调试USB 设备时非常方便,在性能、速度、方便性以及成本上都具有很大的优势。因此使用PHILIPS 公司的PDIUSBD12可以快速开发出高性能的USB设备。