首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

usb host design[转帖]

usb host design[转帖]

曾经写的一篇关于usb的文章中,关于usb host的设计。

通用串行总线[1](Universal Serial Bus)是针对PC机外设的一种新型接口技术,具有快速、双向、即插即用(PnP)且价格低廉的特点。USB总线协议有1.0、1.1和2.0三个版本,通讯速度分为1.5Mbps、12Mbps、 480Mbps,并且支持包括主集线器在内的多达7个HUB层及127个外设。USB接口已广泛的用于各种电子设备,其中USB大容量存储类设备可灵活的设计为移动存储、数码影音产品和PC周边,功能强大,故而应用较为广泛【5】,如象移动硬盘,flash闪盘,数码相机,MP3播放机,读写光驱等等。

2 USB大容量存储类[2]简介
USB 国际组织定义了大容量存储类(Mass Storage Class)的规范,包括四个独立的子类规范:
1) USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport;
2) USB Mass Storage Class Bulk-Only Transport;
3) USB Mass Storage Class ATA Command Block;
4) USB Mass Storage Class UFI Command Specification;
前两个子规范定义了USB大容量存储设备进行数据/命令/状态传输两种基本方法。Bulk- Only传输规范仅仅使用批量(Bulk)端点传送数据/命令/状态,CBI传输规范则使用控制(Control)、批量(Bulk)、中断(Interrupt)三种类型端点进行数据/命令/状态传送。后两个子规范则定义了存储介质的操作命令。ATA命令规范用于硬盘,UFI命令规范是基于SCSI- 2和SFF-8070i命令规范发展二来,其针对USB移动存储类设备。
Microsoft公司至Windows98后,USB主机都支持Bulk-Only标准,所以现在的大容量存储类设备几乎都采用或支持Bulk-Only标准。Bulk-Only传输规范是系统通过默认管道(地址0、端点0)进行枚举后,仅仅使用批量(Bulk)端点传送数据/命令/状态,其中有三种类型的数据在USB主机和设备之间传送,即CBW、CSW 和普通数据。CBW(Command Block Wrapper,命令块包)是从USB主机发送到设备的命令包,它由31个字节构成,其中包含的命令遵从接口描述表中的bInterfaceSubClass域所指定的命令集,一般采用SCSI 传输命令集。USB设备从CBW 中取出并执行相应命令,向主机传送指定数据及发出反映当前命令执行状态的CSW(Command Status Wrapper,状态包),它由13个字节构成,主机根据CSW 来判断此次操作是否正确,从而决定是继续传送数据还是进行数据传输的错误校验。事实上错误校验一直伴随着整个数据的处理过程中。
USB主机接口的硬件设计
USB接口芯片采用的是Cypress的SL811HS[4],它是一款嵌入式的USB主、从控制器,其特点是:
Ÿ 在软件的控制下,既可作为USB主机又可作为USB从机;
Ÿ 遵循USB1.1协议,支持低速1.5Mbps和全速12Mbps;
Ÿ 8bit双向数据传输,有256字节的内部RAM,除前16字节作为USBA和USBB两组寄存器外,其余240字节可作为数据缓冲,支持乒乓(ping-pong)数据传输功能;
Ÿ 硬件自动产生帧开始标志和循环冗余校验码;
Ÿ 仅通过一根管脚来区分地址和数据传输,并支持地址自增模式;
USB主机硬件电路连接如图2所示。由于系统只作为USB主机的功能,所以将控制SL811HS为主机或从机工作方式的M/S管脚直接接地,让USB接口工作在主机方式。MIPS的ROMA8与SL811HS的A0相连,表明系统以地址的第8位来区分访问此USB接口。其中SL811HS的A0功能较为灵活,它为低电平时表示数据线上的数据是SL811HS的RAM空间的地址指针,而紧接着置位A0实现读写指定地址的RAM中数据,从而实现数据的传输,而且其支持地址自增模式,即可将连续地址单元中的内容读出传送,而不用再次写入地址指针,从而大大的提升数据传输的有效率。系统并没有用SL811HS提供的中断方式来识别USB设备是否插上,而是通过软件定时轮询的方式来辨识USB设备的连接,因为USB接口设备的D+管脚一直用一个小电阻拉高,所以当它插入到主机端接口时,会与主机端D+上的电阻R4构成一个通路,R4是一个较大的电阻,使得主机端D+管脚置高,同时SL811HS置位中断状态寄存器相应位,于是系统识别到有USB设备插上,从而进入USB设备驱动。
软件设计
该系统软件是构筑在轮询(polling)的机制下,通过时间片轮的方式分配和访问系统硬件资源,完成多任务的合理调配,使视频音频处理、网络及USB大容量存储类主机功能高效能的和谐兼容。
USB大容量存储类主机设计难点是在将USB主机驱动、数据通讯传输和文件系统高效能的匹配,实现USB数据流的高速、无误传输。本系统USB主机软件采用图3所示的软件体系结构。

图3  USB大容量存储类主机软件结构图
图3中的主机驱动层实现将建立/输入/输出请求转换为事务或将事务转换为请求,并对它们进行组织,使能USB主机控制器操作;USB驱动层通过对主机驱动层的调用和响应调用,将从设备端点来的或到设备端点去的请求中的数据进行一定转换,如一个请求传输可能需要多个传输才能完成。在本系统软件中将这两层驱动合而为一,成为USB主机最底层的设备驱动。USB磁盘驱动层实现Bulk-Only协议规范,按照Bulk-Only规范进行命令、数据、状态的传输。大容量存储类设备文件系统格式通常为FAT,所以主机端文件系统层采用了FAT文件系统,支持FAT文件系统的三种格式,并支持多达8个磁盘分区。由上述三个层次实现对USB接口的大容量存储类设备的驱动和读写访问。系统应用层是整个系统各功能模块的综合调用,协调完成各种类型任务。
USB数据传输是通过端点来进行的,端点是USB 中一个独特的概念,它是USB主机和设备交换数据的硬件单元,端点是桥梁和纽带,不同的端点其传输数据的能力不同,适于不同的应用场合。Bulk-Only规范定义命令、数据、状态的传输仅用Bulk端点。系统结合SL811HS硬件特性,遵循Bulk-Only规范,其底层通讯驱动传输流程如图4所示,首先根据端点传输能力来确定一次数据传输长度,而后判断传输数据包标识(PID)类型,进而配置硬件传输。

图4  USB底层通讯传输程序流程
此USB大容量存储类主机数据通讯传输在底层通讯传输之上主要有三个模块:设备枚举模块、Bulk-Only传输模块和USB传输异常处理模块。
设备枚举模块完成对USB设备搜索检测,获得设备提供的设备描述表、配置描述表、接口描述表和端点描述表,实现对该设备的配置。图4A为枚举模块程序流程。
Bulk-Only传输模块按照规范协议将SCSI-2指令打包成CBW命令包,通过输出请求,由主机向设备送出,在没有传输失败的情况下,紧接着发出输入请求接收命令请求所要获取的数据,而后发出输入请求得到CSW状态包,用以判断数据的传输正常与否。
USB传输异常处理是当批量端点(Bulk-In和Bulk-Out端点)出现停止(STALL)条件,即主机发出输入/输出请求时,设备端一直出于无响应状态(NAK),主机端所采取的主动纠错,使USB接口重新使能。其主要通过USB标准请求CLEAR FEATURE,SCSI指令REQUEST SENSE和类指令RESET来实现。其程序流程如图4B所示。
好帖!
dinging
楼主能不能把图贴出来
返回列表