USB设备的开发一般包括三个方面:设备端硬件接口设计、固件(即要写到设备内部只读存储器中去的运行程序)编写,及主机端设备驱动程序的开发。这里仅就设备端硬件接口设计作一些介绍。
1.USB设备接口设计方案
USB设备接口设计有两种方案可选:采用普通单片机加专用USB接口芯片;采用带USB接口的单片机,即专用USB控制器芯片。
目前有多种类型的USB接口芯片,例如USBN9602(National Semiconductor 公
司)、 PDIUSBDl2(Philips公司)和USS820/825(Lucent公司)等。采用普通单片机加USB接口芯片方案的优点是:开发人
员可以利用现有单片机开发系统开发设备的应用程序,而不必再投资购买新的单片机开发系统;缺点是:硬件设计比较复杂,调试麻烦。
第二种方案中所采用的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外设开发人员的开发负担;所提供的开发工具能自动生成固件框架,开发者只须根据需要填些相关函数体;固件和驱动程
序可以分别独立调试,极大地提高开发速度。该方案的缺点是需购买新的单片机开发系统,投资较大。
如果要深入理解USB通信协议、USB设备工作机制以及USB设备驱动开发模型,最好选择第一种方案,即采用“USB接口芯片+传统单片机+设备功能电路”的模块化设计方法。
2.USB芯片PDIUSBDl2简介
采用第一种方案时需要熟悉USB接口芯片。这里对PDIUSBDl2(简称D12)作一些简单介绍,使读者对该类芯片有一个基本认识。
D12全面支持USB规范1.1,并且与大多数设备类兼容,图像设备类、大容量存储设备、通信设备、打印设备、人机接口设备。D12还具
有SoftConnect、GoodLink、可编程时钟输出,以及低频石英振荡器等特征,从而极大降低系统实现成本,并简化高级USB功能的实现。
该芯片采用双列直插封装,有28个信号引脚。其中包括2个USB数据信号(D+号、1个中断输出信号、1个命令/数据口选择输入、读和写输入信号、GoodLink LED指示灯信号,以及与DMA请求相关的信号引脚。
D12提供三组端点,每组有一个用于输入的端点和一个用于输出的端点。其中端点0(组)为设备缺省支持的控制端点;端点l(组)为普通端
点,可以作为块传输或中断传输端点;端点2(组)称为主端点,除了支持块传输或中断传输外,还支持等时传输,此外,它采用双缓冲区结构,因此具有更高的传
输速率,并支持DMA方式(与单片机之间的数据传送)。端点0和端点1的最大包尺寸为16字节,而端点2的最大包尺寸为64/128字节。
D12提供三组命令:初始化命令、数据流命令和一般命令。初始化命令在USB设备被枚举时使用,用来使能端点并为其分配地址、设置端点的
传输方式以及进行其他初始化方面的操作。数据流命令用来管理端点与微处理器之间的数据交换。一般命令实际是两条:一条是发送给下游设备的恢复命令,用来激
活被挂起的设备;一条是读当前帧的编号。
作为例子,下面看几条数据流命令的功能。
①选择端点命令:选择某端点,并将内部指针指向该端点缓冲区的开始。
②读缓冲区命令:从所选择端点缓冲区读取若干字节,每读取一个字节,缓冲区指针加1。
③写数据缓冲区命令:向端点缓冲区写入数据(最多130个字节)。
④读中断寄存器命令:该命令之后需读入两个字节。字节1用来判断总线事件,即哪个端点发生中断或总线状态变化;字节2的最低位指出DMA操作是否完成(高位保留)。
⑤SETUP确认命令:当控制端点接收到一个SETUP包时,该端点将被“冻结”,缓冲区中一直保留最后一个SETUP包。发出该命令将解除“冻结”,继续进行SETUP事务(向主机返回包)。设置该命令是考虑到控制传输的特殊性(对设备进行配置)。
数据流命令还有其他命令,如读取最后一次事务状态命令、清除缓冲区命令、设置端点状态命令等。仅从上面给出功能的几条命令可以看出,这些
命令主要被设备的控制器(单片机)用来和D12芯片的数据缓冲区及专用寄存器打交道,而USB传输协议的执行(包括数据打包、握手包的形成与发送等)由
D12完成。
阅读(1006) | 评论(0) | 转发(0) |