1 概述
随着PC的广泛应用,其外设也越来越多,打印机、鼠标、扫描仪、游戏杆、音箱……,每个外设都需要通过一个接口与PC相连。外设多了,PC的I/O插口自然也就不够用了。在很多特定的应用场合,如工业数据采集等领域,常常用采集板卡来完成工作,而每一个板卡自然会占用一个PC插槽。PC插槽有限。采集点多了就不够用。除此之外,在个人电脑的应用中,外围设备存在很多问题。这些问题大致可以归结到成本、配置以及个人电脑的连接等几个方面,而USB正是为了解决这些问题而出现的一种方案。简而言之,USB的出现不仅解决了I/O插口不够的问题,而且还建立了一条连接和访问外设的方法。这些方法可以有效地减少总体成本,而且从终端用户的角度来看,可以增加可连接的外设数目,简化设备的连接和配置。
通用串行总线USB是由Intel等厂商制定的连接计算机与具有USB接口的多种外设之间的串行总线。其拓扑结构如图1所示。
图1 USB的层次拓扑图
USB的特性有:
◇ 成本低。为了把外设连接到PC上,USB提供了一种低成本的解决方案。
◇ 热插拔。设备连接后由USB自动检测,并由软件自动配置,完成后可立即使用,无须用户干涉。
◇ 单一的连接器类型。USB定义了一种简单的连接器,可以用来连接任何一个USB设备。多个连接器可以通过USB集线器连接。
◇ 每个USB总线支持127个设备的连接。
◇ USB支持三种设备传输速率:1.5 Mb/s(低速设备)、12 Mb/s(中速设备)和480 Mb/s(高速设备)。
◇ 外设能够直接由USB总线进行供电。
◇ 不需要系统资源(如内存、I/O地址空间和中断请求线路)。
◇ USB事务处理包括错误检测机制,它们用以确保数据无错误发送。
◇ 电源保护。如果连续3 ms没有总线活动,USB将自动进入挂起状态。
◇ 支持四种类型的传输方式:块传输、控制传输、中断传输和同步传输。
2 通用USB控制系统的组成结构
在每一个USB设备中都有一个串行接口引擎(SIE)。SIE与USB数据线的D+和D-两个引脚相连,与USB设备进行字节传送。图2表示一次USB块传输,时间顺序从左到右。SIE对PID信息包进行解码,并通过传送的CRC位对数据进行错误检测,然后,将有效数据送到USB设备。如果SIE检测到一个出错的数据,它并不是发出一个握手信号,而是自动地不进行响应,并告诉主机延时重发。
图2 SIE的功能
由于USB被设计成可以用简便有效的方法来与多种类型的外设通信,没有现有接口的局限性和缺点,这样,导致了对USB接口的设计和编程更加复杂。为了降低设计者的开发难度,使用专用的USB控制器已成为研制人员的首选方案。
USB协议的复杂性意味着USB外设必须具备智能。USB控制器必须知道如何检测并对USB端口的事件做出反应。一般的做法是:USB控制器只处理USB通信,由一个外部的微控制器(MCU)来管理USB控制器的寄存器、设备描述符的获取和数据包的交换等,如图3所示。
图3 通用USB设备的组成结构
表1所示为可与一般微控制器连接的USB控制器。
表1
USB控制器使用串行口或并行口与MCU连接。这样,外部接口可能比USB最大速度要慢,使得芯片只适合传送间歇数据。这样设计的好处是系统组成灵活,可根据不同的系统需求,搭配不同的MCU,使其具有很高的性能价格比;但同时也加大了编程设计人员的开发难度,延长了产品的开发周期。
另一种可行的方法是使用嵌入MCU的USB控制器。这样,CPU只需要访问一系列寄存器和存储器,便可实现USB口的数据传输。从而简化了程序的设计,并且许多供应商还提供许多范例电路和测试代码,使设计者从复杂的协议解释中得到解脱。现在,许多芯片制造商开始生产一些基于通用MCU的USB控制器,采用研制人员所熟知的指令集,大大简化了编程的难度。如基于8051结构的USB控制器有:Intel公司的8X930A、8X931A;CYPRESS公司的EZ-USB等。此外,还有基于MITSUBISHI 740/7600/M16C的USB芯片;基于MOTORORA HC05系列的USB芯片等。受篇幅所限,本文仅介绍EZ-USB 2100系列单片机。
3 EZ-USB组成结构及特性
美国CYPRESS公司是一家从事USB接口芯片和USB单片机开发和生产的公司。CYPRESS最新推出的带智能USB接口的单片机EZ-USB,极大地降低了USB外设的开发难度,为PC外设的制造商提供了一个性能优良、价格较低的设计方案。
EZ-USB有多个系列的产品,根据不同的速率需求,可满足不同的系统要求和价格。CYPRESS提供三个系列的EZ-USB芯片,如表2和表3所列。
表2 CYPRESS的EZ-USB系列产品
表3 EZ-USB2100系列产品
3.1 EZ-USB芯片组成结构
EZ-USB芯片将USB接口的控制核整合到单片机集成电路中,如图4所示。集成的USB收发模块与USB 总线的D+和D-引脚相连。SIE进行串行数据译码和错误更正,以及其他USB所要求的信号级操作等,最后,再与USB收发模块接口进行数据字节的传输。
图4 EZ-USB的组成框图
内部的微处理器在标准8051上缩短了执行时间并增加了新的特性。它用内部SRAM存储程序和数据,使EZ-USB 系统具有软配置的特性。USB主机经USB总线将8051的程序代码和描述符装入SRAM中,然后,EZ-USB芯片用已下装程序中定义的外设特性进行重新连接,这个过程也叫再枚举。
EZ-USB系列使用了强大的SIE/USB接口(称为USB内核)。这个具有强大功能的内核可以自动完成USB协议的转换,简化8051的代码。
EZ-USB 芯片在3.3 V电压下就可以运行,简化了USB设备总线电压的设计。
3.2 EZ-USB特性
① 改进的8051内核。性能可达到标准8051的5~10倍,与标准8051的指令完全兼容。
② 高度集成。传统USB外设的硬件设计通常包括非易失性存储器(如EPROM、EEPROM、FLASH ROM)、微处理器、RAM、SIE(串行接口引擎)和DMA等。EZ-USB将上述多个模块集成在一个芯片中,从而减少了各芯片接口部分时序配合时的麻烦。
③ USB 内核。EZ-USB可以代替USB外设开发者完成USB协议中规定的80 %~90 %的通信工作,使得开发者不需要深入了解USB的低级协议即可顺利地开发出所需要的USB外设。EZ-USB系列芯片接收全部USB 的吞吐量。这种采用EZ-USB的设计,不受端点数目、缓冲区大小及传输速度的限制。
④ 软配置。外设未通过USB接口连接到PC机之前,外设上的固件存储在PC上;一旦外设接到PC机上,PC先询问该外设是"谁"(即读设备描述符),然后,将该外设的固件下载到EZ-USB的RAM中并执行,这个过程叫作再枚举。这个特性给USB外设开发者带来许多方便。如开发过程中,当固件需要修改时,可以在PC机上修改好以后,下载到EZ-USB,从而省去了编程芯片的麻烦。这种基于RAM的软配置方法,可以允许无限的配置和升级。
⑤ 易用的软件开发工具。固件可独立于驱动程序被测试。驱动程序和固件的开发与调试相互独立,可加快开发的速度。
4 EZ-USB微处理器
EZ-USB微处理器是一个改进的8051内核,使用标准8051指令系统,其指令执行速度比标准8051快,原因有两点:
① 空闲( wasted)的总线周期被消去。一个总线周期仅包含4个时钟周期,而标准8051则为12个时钟周期。
② 8051的运行速度为24 MHz。
除了速度的提高,改进的8051内核还有以下几处结构上的改进:
① 第二个数据指针,可用于存储器块之间的传输;
② 第二个UART;
③ 第三个16位计数器/定时器(TIMER2);
④ 与非多路复用16位地址总线的高速存储器直接接口;
⑤ 增加了7个中断源(INT2~INT5、PFI、T2和UART1);
⑥ 可变的MOVX执行时间可适应高/低速的RAM外设;
⑦ 256字节的内部寄存器RAM,8K字节的程序/数据复合SRAM;
⑧ 3.3 V工作电压。
EZ-USB 集成芯片在8051的基础上又有其他改进:
① 快速外部数据块传输(指针自动增量,快速传输模式);
② USB中断向量;
③ CONTROL传输的SETUP和DATA部分有各自的缓冲器。
4.1 AN2131Q的封装和引脚描述
图5是EZ-USB 2100系列中80引脚封装的AN2131Q的引脚排列图。
图5 80引脚的PQFP(AN2131Q)
各引脚功能分述如下:
DISCON#:引脚1,输出。该引脚由两个位DISCOE和DISCON控制。当DISCOE=0时,引脚悬空;当DISCOE=1时,驱动引脚。当DISCOE=1时,驱动的逻辑级与DISCON位相反。
USBD-,USBD+:引脚77,79 ,高阻态。USB D+/D-信号。将24Ω振荡器与USB D+/D-引脚相连。
A0~A15:引脚7~12,15,16,26~29,34~37输出。8051地址总线。
D0~D7:引脚48~51,57~60,I/O/高阻态。8051数据总线。该双向总线空闲时处于高阻状态,总线读时为输入,总线写时为输出。
PSEN#:引脚80,输出。程序存储器使能端。引脚接低电平时有效,表示从外部存储器中读取程序。当EA为低电平时,程序存储器的地址从0x1B40开始;当EA为高电平时,程序存储器的地址从0x0000开始。
PA0~PA7:引脚68~71,73~76,I/O。多功能输入/输出引脚。
PB0~PB7:引脚44~47,52~55,I/O。多功能输入/输出引脚。
PC0~PC7:引脚30~33,38~41,I/O。多功能输入/输出引脚。
BKPT:引脚61,输出。断点。当8051地址总线与BPADDRH/L寄存器的内容一致,且USBBAV寄存器中的断点使能(BPEN)时,该引脚被激活(高电平)。如果USBBAV寄存器中的BPPULSE位为高,就产生8个24 MHz的高电平的时钟脉冲;如果BPPULSE位为低,保持高电平直到8051清除USBBAV寄存器中的BREAK位(写1)。
RESET:引脚25,输入。有效高电平复位。使8051和SIE复位。该引脚一般通过1个10 kΩ电阻接地,用1个1μF电容接VCC。
EA:引脚24,输入。访问外部存储器。该引脚有效(HI)时,8051并不是从内部程序RAM中获得代码,而是从外部存储器中读取代码。当EA=0时,8051从外部存储器的0x1B40地址(AN2131)开始读取代码。
AVCC:引脚21,电源。Analog Vcc(模拟电源)。该引脚为芯片的模拟部分提供电源。
AGND:引脚18,电源。Analog Ground(模拟地)。尽可能以最短路径接地。
XIN:引脚19,输入。晶振输入。该引脚经由12 MHz晶振和22~33 pF电容接地。它也能用12 MHz的时钟电路驱动。
XOUT:引脚20,输出。晶振输出。该引脚经由12 MHz晶振和22~33 pF电容接地。当XIN由12 MHz时钟电路驱动时,该引脚悬空。
WAKEUP#:引脚66,输入。USB唤醒。当8051挂起时,该引脚上的一个上升沿可开启振荡器,向8051发出中断,请求推出挂起状态。维持WAKEUP#的低电平可避免EZ-US芯片进入挂起状态。
SCL:引脚65,OD(漏极开路)。I2C时钟。即使没有I2C设备相连,也要用2.2 kΩ电阻接VCC。
SDA:引脚64,OD(漏极开路)。I2C数据。即使没有I2C设备相连,也要用2.2 kΩ电阻接VCC。
CLK24:引脚4,输入。24 MHz时钟,可锁定为12 MHz输入时钟。当CPUCS寄存器中的OUTCLKEN=0时没有输出。
NC:引脚67。该引脚不连接。
软配置是EZ-USB系列芯片的一个重要特性。EZ-USB芯片中包含内部程序/数据RAM,不再需要ROM或其他固定的存储器。通过USB本身将程序下载到RAM中,为设备提供独特的特性,使得修改、版本更新更容易。
EZ-USB可作为USB设备进行连接,当内部8051处于复位状态时,将程序下载到内部RAM。这一切都是由改进的SIE完成的,它可以进行图2中的所有操作,甚至更多。SIE包含其他逻辑,可用内部描述符表进行枚举操作。它也能响应主机发出的特殊的"下载固件"设备请求,将固件装入内部RAM。还有一点值得一提的是,增加的SIE功能可用于8051。这一特点可缩减8051程序,加快程序的执行。
5 EZ-USB的枚举和再枚举
PC机运行时,若插上或拔去一个USB设备,Windows系统便会自动装载或卸去设备的驱动程序,即所谓的即插即用。这一系列动作的自动完成归因于在每一个USB设备里都有一个描述符表,记录了设备的要求和性能。当插上USB时,要经过以下几个步骤:
① 主机向地址0发送"Get_Descriptor/Device"请求(设备第一次连接时,必须响应地址0);
② 设备响应该请求,并将ID数据发送给主机;
③ 主机向设备发出"Set_Address"请求,给设备提供一个唯一的地址,以区别其他与总线相连的设备;
④ 主机发出"Get_Descriptor"请求,获取更多的设备信息。据此,主机可以了解到该设备的其他情况,如该设备的端点个数、电气要求、所需带宽,然后下载程序。
为了支持软特性,EZ-USB芯片能自动地作为一个不需要固件的USB设备进行枚举,所以,USB接口本身可用来下载8051的程序和描述符表。当8051复位时,EZ-USB的内核进行最初(通电)的枚举和下载。这种支持程序下载的最初USB 设备被称为"默认的USB设备"。
在代码描述符表从主机中下载到EZ-USB RAM后,8051脱离复位状态,开始执行设备程序。EZ-USB设备再次枚举,这一次是作为装入的设备。第二次枚举称为"再枚举"。 再枚举的完成是EZ-USB芯片通过给USB 加电,模拟物理断开和重连接来完成的。
被称为"ReNum"(再枚举)的EZ-USB控制位决定由内核及8051中的哪一个实体处理端点的设备请求。通电时,RENUM位(USBCS.1)为0,表示EZ-USB内核自动处理设备请求。一旦运行8051,它能设RENUM=1,表示用户8051程序用它下载的固件处理子设备请求。
6 EZ-USB端点
由于USB是串行总线,因此设备端点实际上是一个FIFO存储器。主机通过发出4位地址及1位方向位,选择设备端点。所以,USB可定位32个端点:IN0~IN15和OUT0~OUT15。8051从OUT缓冲区中读取端点数据,将通过USB传输的端点数据写入IN缓冲区。
USB端点有四种类型:块(bulk)、控制、中断、同步。
6.1 块端点
块端点无方向控制,一个端点地址对应一个方向,所以,端点IN2的地址不同于端点OUT2。EZ-USB提供了14个用于块传输的端点,包括7个IN端点(EP1_IN~EP7_IN)和7个OUT端点(EP1_OUT~EP7 _OUT)。每一个端点都有1个64字节的缓冲区。
6.2 控制端点0
控制端点用于传输控制信息。任一个USB设备必须有默认的控制端点0。设备的枚举(即第一次插上该设备时,主机对其进行初始化的过程)就是由端点0引导的。主机通过端点发送所有的USB请求。
控制端点是双向的,它只接受SETUP信号。控制传输包含两个或三个阶段:SETUP、DATA(可选)和HANDSHAKE。
6.3 中断端点
中断端点与块端点大致相同。14个EZ-USB端点(EP1~EP7、IN和OUT)可用作中断端点。中断端点的信息包的最大长度可达到64字节,在它们的描述符中包含一个"轮询间隔"字节,告诉主机为之服务的频率。8051通过中断端点传送数据的方式与块端点完全一样。
6.4 同步端点
同步端点通过USB发送高带宽、时间精确的数据。同步端点从数码相机或扫描仪等外设中获得数据,或将这些数据输出至音频数/模转换器等设备。EZ-USB包含16个同步端点,编号为8~15(8IN~15IN,8OUT~15OUT)。FIFO存储器为16个端点提供了1024字节的存储单元,这些单元可作为FIFO存储器,提供双缓冲器。作为双缓冲器,8051从包含前一帧数据的同步端点的FIFO缓冲器读取OUT数据,同时主机将当前帧的数据写入另一缓冲器中。相似地,8051将IN数据装入同步端点的FIFO缓冲器中,在下一帧中通过USB发送,此时主机从另一缓冲器中读当前帧的数据。在每一个起始帧,USB FIFO和8051 FIFO置位开关或进行乒乓通信。
7 USB的前景展望
其实,除了像显卡这种需要极高数据量和一些实时性要求特别高的控制设备外,几乎所有的PC外设都可以移植到USB上来。而事实上国外几乎已经做到了这一点,特别是在鼠标、键盘等产品上有很强的竞争实力。所以,USB的PC外设的发展空间是不可限量的。它可归纳为以下几个大类供开发者参考:
① 传统PC外设,像鼠标、键盘、音箱、游戏杆、扫描仪、打印机等;
② 基于PC的通信设备,如Modem、ISDN等;
③ 端口转接器,如USB→232、USB→LPT等,以适应原来的设备;
④ 具有中国特色的设备,像汉字输入笔那样的东西;
⑤ 工业领域。
选择何种芯片来设计USB控制系统,一般是基于任务的需求、学习编程的难易程度、性能价格比、可重编程及提供范例代码等几个因素来考虑。EZ-USB使得开发过程更简单和廉价,同时也大大提高了开发效率,缩短了产品的研发周期。