新闻中心

EEPW首页>嵌入式系统>设计应用> 基于LPC2132的U盘软硬件系统设计

基于LPC2132的U盘软硬件系统设计

作者: 时间:2012-08-27 来源:网络 收藏

为了使软件可移植性强、易维护,采用分层的方法编写PDIUSBDl2的驱动程序。USB驱动程序分层结构如表1所列。

①硬件提取层(D12HAL.c)包含最底层的函数。
②D12命令接口(D12CI.c)实现PDIUSBDl2的命令接口以简化器件的编程。该层的甬数及其功能如下:
◇读取芯片ID号,uintl6 D12_ReadChipID(void);
◇没置地址/使能,void D12_SetAddressEnable(UINT8bAddress,UINT8 bEnable);
◇设置端点使能,void D12_SetEndpointEnable(UINT8 bEnablc);
◇设置模式,void D12_SetMode(uint8 bConfig,uint8bClkDiv)。
③协议层(Chap_9.c)处理标准的USB设备请求,以及特殊的厂商请求,如DMA等。USB主机通过标准USB设备请求,可设定和获取USB设备的有关信息,完成USB设备的枚举。
所有的请求都是通过端点0接收和发送SETUP包来完成的。接收主机SETUP包的函数为ep0_rxdone(),所有SETUP包都由函数control_handler()来处理,发送SETUP包的函数为ep0_txdone()。SETUP包的接收和发送通过控制传输结构仝局变量CONTROL_XFER ControlData来控制,它实现了以上3个函数之间的通信。


上述几个函数及ControlData变量之问的关系如图3所示。

④应用层(D12Driver.c)实现PDIUSBD12的所有功能。USB设备控制驱动、USB接口控制驱动和协议层都在应用层的控制之中。应用层要实现的仟务包括:
◆初始化PDIUSBDl2。包括初始化PDIUSBD12的硬件连接、复位PDIUSBDl2、配置PDIUSBD12的中断服务程序地址、初始化应用层相关的全局变量。
◆编写PDIUSBD12中断服务程序。PDIUSBD12几乎所有功能都是通过PDIUSBDl2中断服务程序来完成的,因此中断服务程序是应用层的核心部分,也是本驱动程序的核心部分。它要完成以下任务:
◇控制端点数据接收与发送中断服务程序,负责处理控制传输的有关工作;
◇端点1和端点2数据接收与发送中断服务程序;
◇USB总线挂起、复位、DMA结束中断服务程序。
◆用户读写端点1和端点2的API函数。
◆传输控制处理任务。该任务用于处理枚举、标准任务请求、厂商请求等传输控制。
2.2 Mass的实现
完整的Mass需要实现如下儿部分:在枚举时,提供Mass描述符;实现BulkOnly批量传输协议;实现SCSI命令集。
2.2.1 Mass Storage类协议描述符

USB采用设备类的方式对设备进行管理。要让主机识别设备,设备就必须提供正确的描述符:
◇设备描述符;
◇配置描述符;
◇接口描述符;
◇端点描述符。
2.2.2 Bulk-Only批量传输协议实现
Bulk-Only协议包括两部分:类特定请求命令和Bulk-Only传输。
(1)类特定请求命令
①批量传输的大容量存储器复位。要发送批量传输的大容量存储器复位请求,主机将在默认管道发送一个设备请求:
◇bmRequestType——类、接口、主机到设备;
◇bRequest字段设置为255(FFh);
◇wValue字段设置为0;
◇wIndex字段设置为接口编号;
◇wLength字段设置为O。
批量传输的大容量存储器复位请求如下: