|
The realization of host/slave USB interface Abstract: Based on USB host/slave controller chip SL811HS, a multifunction embedded host/slave interface module conforming to USB1.1 is developed. As the host interface, the module can write and read flash memory disk. If the module is on slave mode, it can communicate with computer. The design process of host/slave interface and the differences between USB host and USB slave in hardware and software design are introduced. Key words: SL811HS;Flash memory disk;Host/Slave USB interface 摘要:基于Cypress公司的USB主/从控制芯片SL811HS,开发了符合USB1.1协议的主动、从动USB接口模块。该模块工作在主动模式时,可以对U盘进行读、写等操作;工作在从动模式时,可以与PC机通信。本文详细介绍了主动、从动USB接口的开发过程以及两者在硬件设计、软件编程上的区别。 关键词:SL811HS;U盘;主动/从动USB接口 0 引言 近年来,通用串行总线(Universal Serial Bus)发展非常迅速,具有成本低、速度快、易于扩展、总线供电、可热插拔等诸多优点,得到了广泛的应用。USB技术规范将USB数据传输双方划分为两种类型:Host和Slave,即主机和从属设备[1]。目前,USB主机一般都是由PC机担任,而市场上的USB产品基本上都是从属设备。在以单片机等微处理器为核心的嵌入式系统的应用中, 尚缺少与USB产品的直接接口技术。因此,主动USB接口的嵌入式应用就成了USB 领域新的研究焦点。利用单片机直接读写U盘,从而实现便携仪器或者嵌入式系统的外挂式海量存储,具有广阔的市场前景。在此基础上,人们也希望带有主动USB接口的系统同时兼有通用USB设备的功能,在需要的时候依然可以与PC 机通信。本文遵循这种新的设计思想对主动、从动USB接口模块进行了开发和实践。 目前在国内,主动USB接口的研究仍然处于起步阶段。主要方案是使用具有USB Host功能的接口芯片。现在比较成熟的芯片有Cypress 公司的SL811HS和南京沁恒公司的CH375。这些芯片本身都不包括CPU内核, 需要通过与MCU、DSP 或其它CPU 接口来实现完整的USB主机功能[2]。采用USB接口芯片CH375设计的主动USB接口,当某些USB设备带电插入时, CH375或者单片机突然工作不正常[3]。所以为了避免发生上述情况,需要设计相应的解决方案,无疑增加了设计的复杂度。目前在国内,从动USB接口的设计已较成熟,采用的USB接口芯片多是Philips公司的PDIUSBD12,但是PDIUSBD12并不具有USB Host功能。通过对以上方案的分析和比较,本模块选择了在价格、稳定性、设计复杂程度上均有优势的USB主/从接口芯片SL811HS,用一款芯片来实现主动、从动两种功能的设计思想还很新颖。本文从硬件、软件两个方面详细介绍了主动、从动USB接口的开发过程。 1 硬件电路设计 本系统主要由高性能的微处理器W78E54B、USB主/从控制芯片SL811HS、8D锁存器74HC573以及外部数据存储器CY62256组成。 由于USB协议框架十分复杂,需要存储、运行繁复的驱动程序,所以需要MCU具有足够的ROM,且要符合方便系统扩展的设计需求,而且容易操作。所以选择了Winbond公司推出的与8051系列单片机兼容的微处理器芯片W78E54B。它内含16K字节的Flash EPROM;256字节的RAM;3个8位I/O口、3个16位定时/计数器、一个硬件看门狗定时器及一个串行口。W78E54B为全静态CMOS设计,可以工作在空闲方式和掉电方式。 SL811HS 是Cypress 公司推出的具有主/从两种工作模式的USB控制器,遵循 USB1.1规范;可自动检测总线速率,支持全速12Mbps和低速1.5Mbps 设备;具有8 位双向的数据总线,易与单片机连接;片内256 字节的SRAM(其中16 字节用于工作寄存器),用于数据传输;可自动产生SOF 和CRC5/16,简化软件工作量;片内具有根Hub;支持挂起/唤醒工作模式,减少功耗;支持自动加1功能,减少数据读写周期;3.3V 工作电源,接口可承受5V的工作电压,可与多种规格的单片机连接[4]。单片机W78E54B与SL811HS接口的原理如图1所示。
 在硬件设计中,使用外部数据存储器CY62256的目的是提高单片机的数据传输速度和进行复杂的USB协议处理。SL811HS的中断请求信号是高电平有效,必须经过非门反向后才可以接到W78E54B的外中断信号引脚上。 主动、从动USB接口的硬件电路设计的区别主要有:①SL811HS的主、从模式选择管脚M/S,工作在主模式时接低电平,工作在从模式时接高电平;②nDACK管脚,在主模式中接高电平,在从模式中是输入管脚,用于外部控制器对SL811HS进行DMA访问,由于在从动USB接口的设计中没有用到DMA访问,此管脚也接高电平; ③USB端口设计中,主动模式的数据信号线(D-、D+)接15K的下拉电阻;从动模式的D-、D+接1.5K的上拉电阻。主动、从动USB接口的切换电路原理如图2所示。其中,此模块如果工作在主动模式,J1、J2和J3的2与1管脚短接;工作在从动模式,J1、J2和J3的2与3管脚短接。

2 主动USB接口的软件设计 USB系统包括两部分:USB主机和USB外设。USB系统的通信是由USB主机来控制的。软件主要包括USB主机和USB设备功能模块。它们既相互独立,又相互调用。USB主机功能模块包括USB主机控制器驱动层和USB总线驱动层;USB设备功能模块包括USB海量存储设备驱动层和USB海量存储文件系统层。主动USB接口的软件实现流程自底向上进行。 2.1 USB主机控制器接口驱动层 USB主机控制器接口驱动层是USB协议栈的最底层,是对USB主机控制器硬件和数据传输的一种抽象,是MCU与SL811HS的通信接口,通过数据线、读写控制线、片选线完成对SL811HS主机芯片的读、写等操作,可为上层驱动提供对SL811HS的访问接口,受总线驱动层的调用和管理。USB主机控制器接口驱动层主要实现对SL811HS寄存器的读写功能,其函数主要包括读字节、写字节、读批量数据、写批量数据。 2.2 USB总线驱动层 USB总线驱动层在USB主机系统中起到桥梁的作用,用来检测和管理USB系统的所有活动,向上接收USB设备驱动程序的各种请求命令和数据,向下把处理好的各种数据发送给USB主机控制器接口驱动层,并最终完成与设备的通信。USB总线驱动层主要实现USB事务、控制传输、批量传输以及U盘的枚举。 2.3 海量存储设备类驱动层 USB Mass Storage类是USB协议定义的存储设备类,U盘就是典型的一种海量存储设备。USB主机系统通过执行各种UFI(USB Floppy Interface)命令来驱动此类设备。针对U盘采用的单批量(Bulk-Only)传输协议和UFI命令集,通过调用USB总线驱动层的批量传输服务,即批量读(BulkRead)和批量写(BulkWrite)函数来进行UFI命令、数据和状态的传输,用以读取U盘的容量、获取设备类型和介质信息等。 2.4 海量存储文件系统层 U盘内建FAT16文件系统,我们只需在USB主机上实现对FAT16文件系统的识别和维护,主要是利用Mass Storage设备驱动层提供的读、写、查询等命令,对FAT表进行定位、搜索和读、写等操作,实现查找、新建、读、写文件的功能。 主动USB接口的工作流程如下:当U盘插入时,SL811HS向单片机发出中断请求,单片机通过控制端点对U盘进行枚举,配置成功后,即可通过批量传输端点对U盘进行读、写等操作。主动USB接口的软件流程如图3所示。 3 从动USB接口的软件设计 从动USB接口的软件设计主要包括两部分:一是USB设备端的单片机软件, 主要完成USB 协议处理与数据交换;二是上位主机端的程序, 由驱动程序和用户应用程序组成。 3.1单片机方面的固件程序设计 固件程序由以下四部分组成: ①硬件接口层:对单片机的I/O口、数据总线等硬件接口进行操作;完成对SL811HS的读、写等操作。 ②中断服务程序:当SL811HS向单片机发出中断请求时,它将数据从SL811HS的内部缓冲区取回到CPU,并建立正确的事件标志,以通知主循环程序进行处理。在中断服务程序的入口,固件通过读取中断状态寄存器来决定中断源,然后进入相应的子程序进行处理。 ③标准请求处理程序:对USB的标准设备请求进行处理。主要用来完成主机的请求,如发送各类描述符等。 ④主循环程序:发送USB请求、处理USB事件和用户功能处理等。包括检查总线复位、挂起改变和建立包等事件标志并进入对应的子程序进行处理以及初始化程序。 整个固件的工作流程如下:上位机发送各类标准请求以获得该USB设备的各类描述符,通过控制端点传输数据引发中断,在中断处理函数中读取完SL811HS缓冲区的数据后,置位相应控制位进入主循环程序处理。在主循环程序中,根据接收到的数据判断主机发来什么请求,然后去执行相应请求。当主机得到了所有正确的描述符后,便会给该设备一个唯一的地址,配置结束,此后的数据传输在普通端点上进行。如果接收到数据,SL811HS仍然触发中断,中断处理函数读取缓冲区数据以供设备进行各项操作。如果设备要发送数据,只须调用发送函数。
 3.2 PC机方面的软件程序设计 3.2.1 驱动程序的编写 驱动程序由四个模块组成:初始化模块、即插即用管理模块、电源管理模块以及I/O 功能实现模块。驱动使用的例程包括:DriverEntry、AddDevice、DispatchPnp、DispatchRead、DispatchWrite 和Dispatch DeviceControl。驱动程序采用Driver Studio开发,它是基于C++的,封装了大多数微软的Windows DDK所提供的函数,与DDK相比,Driver Studio更易使用,不易出错。Driver Studio会提示开发者提供USB设备的相关属性参数,然后在VC++环境下生成相应的.dsw工作平台, 里面包含驱动程序入口、初始化、各种例程的.cpp源文件及.h 头文件等。此外,Driver Studio 还提供了Driver Monitor, Softice等功能强大的调试工具, 可以对驱动程序的执行情况进行观察。经编译, 生成.sys文件, 将该驱动程序拷入系统盘drivers 目录下, 并配合.inf 安装文件可以完成驱动程序的安装使用。 3.2.2 应用程序的编写 较大的应用程序都由一些模块组成, 这些模块分别完成相对独立的功能, 它们彼此协作,完成整个软件系统的工作。可能存在一些模块的功能较为通用, 在构造其它软件系统时仍会被使用。Windows系统平台上提供了一种较有效的编程和运行环境, 可以将独立的程序模块创建为较小的动态链接库文件(.dll) , 并可对它们单独编译和测试。本次设计的.dll文件在VC++环境中开发, 并被VB 所开发的应用程序所调用, 它由四个导出函数组成:OpenByName () , 打开设备;CloseIfOpen() , 关闭打开的设备;ReadUSB() , 从USB接口读取数据;WriteUSB () 将数据写入USB接口。 应用程序采用VisualBasic6. 0 编写。由于主要操作已由动态链接库文件完成, 所以应用程序的主要功能包括输入、输出数据和错误操作提示。 4 结论 本文研制的基于USB主/从控制芯片SL811HS的主动、从动USB接口模块的设计思想新颖,该模块集主机、从属设备功能于一体,硬件简单,工作稳定,有广阔的应用前景。 此系统的硬件电路已经实现。实验证明,当该模块工作在主动模式时,单片机可以检测U盘的状态(如插入、拔出);读取U盘的剩余存储空间;进行读、写数据等操作,并可对绝大部分U盘进行上述操作。当该模块工作在从动模式时,可以与PC机通信。 本文作者创新点:在由单片机构成的嵌入式系统中,集USB主机、从属设备功能于一体:该系统既可以作为主机读写移动存储设备,又可以作为设备与PC机通信。用一款USB主/从接口芯片来实现主动、从动两种功能的设计思想很新颖。
参考文献 [1]Universal Serial Bus Specification Rev1.1.http://www.usb.org, 1998 [2]王梅,林君,刘俊华.一种基于嵌入式USB-Host的大容量数据存储方案及应用[J].计算机测量与控制, 2004,12(4):384~386,389 [3]智兆华,张鹏.USB接口芯片CH375的原理及应用[J].今日电子,2005, 8:74~75 [4]王志勇,朱洪涛,李大勇.基于U 盘的单片机低功耗海量存储系统[J]. 微计算机信息,2006,22-5:91-93。 作者简介:苑玮琦(1960-),男(汉族),辽宁沈阳人,沈阳工业大学测控技术与仪器专业教授,博士后,主要从事计算机视觉检测方面的研究。 曹放(1982-),女(汉族),辽宁兴城人,沈阳工业大学,测试计量技术及仪器专业硕士研究生,研究方向为USB接口技术。 E-mail: caofangdede@163.com. 通信地址:110023 沈阳工业大学663信箱 |