USB设备开发简介
- T, n8 d# {' \5 q2 l
USB设备的开发一般包括三个方面:设备端硬件接口设计、固件(即要写到设备内部只读存储器中去的运行程序)编写,及主机端设备驱动程序的开发。这里仅就设备端硬件接口设计作一些介绍。
' }& u# a* L: o; q6 F/ ] 1.USB设备接口设计方案
& ~' b* a8 y' R5 b& g# {5 A7 Z% b
USB设备接口设计有两种方案可选:采用普通单片机加专用USB接口芯片;采用带USB接口的单片机,即专用USB控制器芯片。
^) d9 f3 f3 y* L1 E 目前有多种类型的USB接口芯片,例如USBN9602(National Semiconductor 公司)、 PDIUSBDl2(Philips公司)和USS820/825(Lucent公司)等。采用普通单片机加USB接口芯片方案的优点是:开发人员可以利用现有单片机开发系统开发设备的应用程序,而不必再投资购买新的单片机开发系统;缺点是:硬件设计比较复杂,调试麻烦。
4 v$ w8 G% _5 h, y 第二种方案中所采用的LISB控制器芯片有两类:一类为完全从底层开发的微控制器芯片,如Cypress的CY7C63XXX系列;一类是基于通用单片机开发的USB控制器芯片,如与Intel 8051兼容的8x930A/8x931A(Intel/Cypress公司)、EZ-USB(Cypress公司)。第二种方案的优点是设计简单。例如,EZ-USB单片机集成了加强的8051微控制器、智能USB引擎、USB收发模块和RAM等,它提供了24个I/O端口、16位地址线、8位数据线、1个PC机接口和l对USB接口。所集成的智能USB引擎可以完成USB协议所规定的80%~90%的通信工作,减轻了USB外设开发人员的开发负担;所提供的开发工具能自动生成固件框架,开发者只须根据需要填些相关函数体;固件和驱动程序可以分别独立调试,极大地提高开发速度。该方案的缺点是需购买新的单片机开发系统,投资较大。
9 b( b/ r4 X2 k: P 如果要深入理解USB通信协议、USB设备工作机制以及USB设备驱动开发模型,最好选择第一种方案,即采用“USB接口芯片 传统单片机 设备功能电路”的模块化设计方法。设计出的USB设备的功能框图如图10.47所示。
5 p( M/ [) j( q" S0 Y/ J
5 W" J4 I4 A' C
/ f6 ^5 z ?" v# T( Q, g `' f6 w
/ i$ M8 B3 ?: z8 \: e% G3 Y
( C1 e" y. N/ q7 `$ X9 }2 {) h/ ] 2.USB芯片PDIUSBDl2简介
& c E( c' p. i9 _
采用第一种方案时需要熟悉USB接口芯片。这里对PDIUSBDl2(简称D12)作一些简单介绍,使读者对该类芯片有一个基本认识。
$ G; }5 _( w0 T3 q& x/ A9 M
D12全面支持USB规范1.1,并且与大多数设备类兼容,图像设备类、大容量存储设备、通信设备、打印设备、人机接口设备。D12还具有SoftConnect、GoodLink、可编程时钟输出,以及低频石英振荡器等特征,从而极大降低系统实现成本,并简化高级USB功能的实现。
8 r! {- M" o& f8 O 该芯片采用双列直插封装,有28个信号引脚。其中包括2个USB数据信号(D 、
9 Z" i: |/ `9 `" xD-)、8个双向数据信号、1个中断输出信号、1个命令/数据口选择输入、读和写输入信号、GoodLink LED指示灯信号,以及与DMA请求相关的信号引脚。
, E- _" Q/ C. g! J0 A6 s
D12提供三组端点,每组有一个用于输入的端点和一个用于输出的端点。其中端点0(组)为设备缺省支持的控制端点;端点l(组)为普通端点,可以作为块传输或中断传输端点;端点2(组)称为主端点,除了支持块传输或中断传输外,还支持等时传输,此外,它采用双缓冲区结构,因此具有更高的传输速率,并支持DMA方式(与单片机之间的数据传送)。端点0和端点1的最大包尺寸为16字节,而端点2的最大包尺寸为64/128字节。
2 a! Y$ p' W) w+ j& F5 B6 m D12提供三组命令:初始化命令、数据流命令和一般命令。初始化命令在USB设备被枚举时使用,用来使能端点并为其分配地址、设置端点的传输方式以及进行其他初始化方面的操作。数据流命令用来管理端点与微处理器之间的数据交换。一般命令实际是两条:一条是发送给下游设备的恢复命令,用来激活被挂起的设备;一条是读当前帧的编号。
; U# s& J1 j: p* d3 M" r
作为例子,下面看几条数据流命令的功能。
! t$ a1 E1 y9 z ①选择端点命令:选择某端点,并将内部指针指向该端点缓冲区的开始。
$ q4 y$ C0 Z7 e/ m' G F8 s. A
②读缓冲区命令:从所选择端点缓冲区读取若干字节,每读取一个字节,缓冲区指针加1。
8 _2 ?; b" |! I) p
③写数据缓冲区命令:向端点缓冲区写入数据(最多130个字节)。
5 o1 d( L; {# A* b ④读中断寄存器命令:该命令之后需读入两个字节。字节1用来判断总线事件,即哪个端点发生中断或总线状态变化;字节2的最低位指出DMA操作是否完成(高位保留)。
# X7 g' U Y7 K* W: o6 k5 G: {; B ⑤SETUP确认命令:当控制端点接收到一个SETUP包时,该端点将被“冻结”,缓冲区中一直保留最后一个SETUP包。发出该命令将解除“冻结”,继续进行SETUP事务(向主机返回包)。设置该命令是考虑到控制传输的特殊性(对设备进行配置)。
+ |1 o0 f8 b# a
数据流命令还有其他命令,如读取最后一次事务状态命令、清除缓冲区命令、设置端点状态命令等。仅从上面给出功能的几条命令可以看出,这些命令主要被设备的控制器(单片机)用来和D12芯片的数据缓冲区及专用寄存器打交道,而USB传输协议的执行(包括数据打包、握手包的形成与发送等)由D12完成。