摘 要:本文简要介绍了CYPRESS公司的USB2.0控制器CY7C68013的性能特点;同时分析了制约USB2.0带宽的因素,并使用CY7C68013对USB2.0的带宽进行了测试。
关键词:FX2;USB2.0;CY7C68013;速度测试
CY7C68013简介
Cypress公司的EZ-USB FX2单片机CY7C68013是一款性能较高的USB2.0微控制器。通过在单片上集成USB2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的外围接口,Cypress公司提供了一个高效的USB2.0解决方案。FX2独特的设计使得在最小仅为56SSOP的空间内,数据的传输率可达到56Mbyte/s,是USB2.0允许的最大带宽,同时还集成了一个低成本的8051控制器。EZ-USB
FX2中的智能SIE可以处理大部分USB1.1和USB2.0协议,使得微控制器可以专注于应用功能,从而减少了开发时间、确保了USB的兼容性。通用可编程接口GPIF(General
Programmable Interface)和主/从端点FIFO(8位或16位数据总线)为ATA、UTOPIA、EPP、PCMCIA和DSP等通用接口提供了简单的无缝连接(见图1)。
图1 CY7C68013功能框图(略)
CY7C68013的特点
EZ-USB FX2 的独特设计使得CY7C68013具有如下特点:
(1)在单片中集成了USB2.0收发器、SIE(串行接口引擎)和增强的8051微处理器;
(2)软件:8051程序从内部RAM运行,程序可以通过USB总线下载,或者从EEPROM中装载,或者使用外部存储设备(只支持128管脚的封装);
(3)四个可编程BULK/INTERRUPT/ISOCHRONOUS端点。缓冲方式有:双缓冲、三倍缓冲和四倍缓冲;
(4)8位或16位外部数据接口;
(5)通用可编程接口(GPIF),可以同大多数8位或16位并行接口直接连接,具有可编程的波形描述符和配置寄存器,支持多重RDY输入和CTL输出;
(6)集成工业标准的8051内核,具有以下增强特性:高达48MHz的时钟;每条指令四个时钟周期;两个USART;三个计数器/定时器;扩展的中断系统;两个数据指针;
(7)通过再枚举方式支持总线供电;
(8)3.3V电源;
(9)智能的串行接口引擎(SIE);
(10)矢量USB中断;
(11)在控制传输阶段为SETUP和DATA提供分离的数据缓冲区;
(12)集成I2C兼容控制器,运行在100或400kHz;
(13)8051可工作在48MHz、24MHz、12MHz三种时钟频率;
(14)四个集成FIFO,可以同16位总线进行自动转换;可工作在主/从模式;FIFO可使用外部提供的时钟或异步选通信号;为ASIC和DSP提供方便的接口;
(15)为FIFO和GPIF设计的专门自动中断矢量;
(16)最多可有40个通用目的I/O。
由于具有上述特点,CY7C68013可以广泛的用于DSL调制解调器、ATA接口、存储卡读卡器、相机、扫描仪、Home PNA、无线局域网、MP3播放器等应用。
USB引导方式和枚举
上电时,内部逻辑将检测连接到I2C总线上的EEPROM中的第一个字节是否为0xC0或0xC2。当检测到0xC0时,就使用EEPROM中的VID/PID/DID值来替代内部存储的值;当检测到0xC2,则下载EEPROM中的内容到内部RAM。如果没有检查到EEPROM,FX2就会使用内部存储的描述符来进行枚举。FX2缺省的VID/PID/DID是0x04B4/
0x8613/ 0xXXYY。
当第一次插入到USB接口时,FX2通过USB电缆自动枚举,并下载固件程序和USB描述符表;接下来,FX2再次枚举,作为下载的信息定义USB设备。这两个步骤称作再枚举,设备插入时就立即执行而没有提示。
CY7C68013的程序/数据空间
FX2的存储器空间有两种映射方式:内部程序存储器模式(EA=0)和外部程序存储器模式(EA=1)(见图2)。
图2 存储器映射方式(略)
当EA=0时,工作在内部程序存储器模式。此时内部8KB的主RAM(0x0000-0x1FFF)作为联合的程序和数据空间。为了避免同主RAM冲突,存取片外存储器地址0x0000-0x1FFF时,RD、WR、CS、OE和PSEN管脚的信号被抑制了。这使得可以使用一个64K的片外存储器(程序或数据)而无需额外的逻辑来避免存取片内低8K的RAM。应注意到PSEN和RD信号是分开的,因此外部的程序和数据存储器空间是分开的,而不同于FX2内部使用联合的数据和程序空间。当运行0x0000-0x1FFF的程序时,是运行片内RAM
0x0000-0x1FFF中的程序,此时PSEN管脚没有被激活;当运行片外存储器空间0x2000-0xFFFF中的程序时,PSEN管脚才被激活。
当EA=1时,工作在外部程序存储器模式。此时所有的程序存储器都是片外的;所有的片内RAM,包括主RAM,都仅作为数据存储器。FX2读取所有的片内RAM只使用RD选通信号,联合的RD和PSEN被禁止,因此片内RAM只能作为数据存储器。所有的程序存储器都是片外的,存取低8K字节的片外存储器不再被禁止。所有取指令的操作都将激活PSEN。在重启后,程序将从片外存储器地址0x0000开始执行,而并非等待EEPROM下载或者USB代码下载。
端点FIFO和通用可编程接口(GPIF)
FX2的端点缓冲区分为大、小两组。EP0和EP1是小端点,大小为64字节,只能由CPU来存取,不能与外部逻辑连接;EP2、EP4、EP6和EP8是大的、可配置的端点,它们专为满足USB2.0高带宽要求而设计。
FX2可以运行在全速(12Mbps)和高速(480Mbps)两种模式下。此两种模式对数据载荷大小和传输速率的要求是不同的。FX2构架为高速传输作了优化:
(1)FX2使用数量较少的大端点缓冲区代替数量较多的小端点缓冲区;
(2)FX2为其大端点(EP2、4、6、8)提供了双倍、三倍和四倍缓冲方式;
(3)高带宽的数据传输不需要CPU的参与。FX2精心设计的逻辑和统一的端点/接口FIFO使数据直接以USB2.0速率进出芯片,而不需要CPU干预。
FX2工作在全速和高速模式下,端点的大小不一样。这依赖于两种模式中USB规范定义的最大包大小不同,如表1所示。
表1:(略)
FX2中有8个独立的256 16的RAM块用作端点FIFO。这些FIFO既可以被8051存取,也可以与USB进行数据交换。
一些基于FX2的设备可能是由FX2内部的CPU直接处理USB数据,但是大多数设备仅仅将FX2作为USB和外部数据处理逻辑(例如ASIC或DSP等)之间的管道。在使用外部数据处理逻辑时,USB数据通过FX2中的端点FIFO在主机和外部逻辑中传输而不需要FX2的CPU参与。当连接的外部逻辑没有通用的FIFO接口时,端点FIFO工作在“主”模式下,由通用可编程接口GPIF提供时钟信号、握手信号(满、空、可编程电平)、读写选通信号、输出使能信号等信号。此外FIFO还可由外部的主机控制,此时工作在“从”模式下。
通用编程接口GPIF是一个灵活的8位或16位的并行接口,它由一个用户可编程的状态机驱动。在不增加大量成本的情况下,GPIF为EZ-USB
FX2和许多外部设备提供了一个接口。它允许CY7C68013进行局部总线管理,同时处理多种协议,如ATA接口,打印机并行接口,UTOPIA等。GPIF有6条可编程控制输出线(CTL),9条地址输出线和6条通用目的的准备输入线。数据线宽度可为8位或16位。
USB2.0带宽测试
制约USB2.0速度的因素
通过USB2.0进行数据传输的实际带宽取决于很多复杂的因素,其中最主要的有:
1) PC主板结构;
2) USB驱动程序栈;
3) USB外设硬件和固件程序。
这些因素都是"串联"起来的,最慢的因素决定数据传输的实际带宽。
主板芯片组
主板的数据吞吐量高度取决于USB2.0主控制器连接到内部总线的位置。图1-3说明了通常的PC总线结构。USB2.0主控制器可能集成在主板上或者位于一个基于PCI总线的插卡上。PCI总线对于处理USB1.1规范中的最高速度12Mbps来说是足够了;但是如果要处理USB2.0高速模式下高达480Mbps的信号率来说,是不够理想的。
图3 通用PC总线结构(略)
正如PC中的图形系统放弃带宽受限的PCI总线而采用独立的AGP总线一样,高速USB2.0主机控制器需要一个比PCI总线更快的内部总线来充分体现它的性能。这样至少需要一个新的芯片组将USB2.0主机控制器集成到桥接芯片上去,但现在大多数主板仍然使用PCI总线连接USB2.0主机控制器。
USB驱动程序
USB驱动程序是一个非常重要的因素。除了基本的USB驱动程序外,外设的类驱动程序(如通用存储设备的驱动程序)对于能否发挥最大的数据传输率起着非常关键的作用。调整驱动程序中的诸如主控制器中断门限、命令排队策略、请求包大小等因素可以明显的提高数据的传输速率。
外设
USB2.0外设为实现高速传输而专门设计,以确保不会成为限制带宽的瓶颈。如果一个USB2.0外设芯片可以处理480Mbps的信号速率,而不引入任何延时(NAKS或者NYETS),那么它就不会成为高速传输的瓶颈。
Cypress公司的EZ-USB FX2为从USB到内部的端点FIFO,从端点FIFO到外部设备提供了一个高速数据通道。内部集成的8051的作用就如同交警一样,它只是配置芯片并监测高速数据包,但不介入数据传输的通道中。
内部的特殊构架使得FX2芯片成为测量USB2.0带宽非常好的选择。通常的做法是将FX2设置成为一个批量数据传输的无限信源和信宿,而8051则监测数据的传输确保FX2没有延时。
为了与外部设备进行高速率数据交换,FX2使用了通用可编程接口GPIF来传送端点FIFO中的数据,但这里没有与外部设备的数据交换,因此没使用GPIF。
USB2.0速度测试方案
USB2.0的带宽测试使用的是一块带有USB2.0接口的开发板的一部分,这部分的测试电路的示意如图4所示。
图4 测试电路示意图(略)
发光二极管D2点亮表示工作在USB高速模式,USB总线连接到一个高速主机。
每次收到SOF标志时,发光二极管D2、D3轮流点亮,表明程序正在运行。
发光二极管D5点亮表示8051探测到NAK或者NYET。这表明在测试过程中,FX2在数据传输过程中引入了延时。
使用CY68013进行带宽测试时应尽量避免其自身对速度的影响。因此,在带宽测试的固件程序采用8051汇编程序编写以加快程序执行速度;同时代码的结构也为实现最高的性能而作了优化。例如,直接记录中断请求位而非响应较长延迟的中断。
为了简化编程,固件程序使用了FX2中内建的USB设备配置。USB设备由FX2内部逻辑建立,它配置USB内部逻辑并自动返回不同的列举描述符以创建一个USB高速外设连接,其设备特点如表2所示。
表2:缺省的FX2端点设置(略)
在本测试中,使用可选择的设置1,固件使用端点6和8作为双缓冲的BULK-IN端点,端点2和4作为双缓冲BULK-OUT端点。“双缓冲”意味着内部的8051可以检测和修改一个缓冲区中的数据,而另一个缓冲区同时在进行数据传送。
一个高速的BULK包有512个字节(4096位),如果按照最高速率480Mbps进行传输,一个数据包可在最小的8.53 s(4096/480)中完成。这是最小的传输时间,因为8.53
s中没有包括USB协议的开销,如标记、比特填充、错误校检等,因此实际的时间应大于8.53 s。
内部的8051最高的时钟速率为48MHz;每个总线周期占4个时钟周期,其最高速度为12MHz;假设保守估计每条指令占2个周期,那么8051每秒钟将执行大约6百万条指令,或者8.53
s中执行约51条指令。固件程序应要求在此时限内做完自己内部的工作以确保USB2.0主机无需等待FX2的服务。
为了测量的准确性,应确保在程序执行的期间从未引入延时,即从未发生NAKS或NYETS。对于这些事件,FX2都会产生中断请求,因此8051在主循环程序中应检测这些中断的标志位以确保没有激活中断。
固件程序很简单,初始时使用常数值填充EP6/8 IN缓冲区。主程序中循环检测下列事件:
a.EP6/8 IN 为空缓冲区
b.EP2/4 OUT 接收到BULK包
c.收到一个SOF标志
d.EP8 IN NAK
e.EP4 OUT 拒绝一个PING
f.收到EP1的一个IN请求
如果a为真,则程序向512字节的EP8 BULK IN端点缓冲区的最后一个字节写入已经发送的包的数量,从而标记下一个待发送的数据包。这样就可以使用控制面板应用程序检测包的内容(特别是包的最后一个字节的内容)来确认这些数据包。每个包的内容除了最后一个字节外其余的字节都与上一个包的内容一样。同时,用来记录内部IN数据包的变量加1;端点字节计数寄存器重新写入512来开始下一次传输。
如果b为真,程序仅简单的重新配置该端点,并准备下一次OUT传输。
如果c为真,则将包记数器的值存入一个64字节的历史缓冲区中,以更新最大数据包每微帧的值,同时清零包记数器。当第一个BULK数据包被探测到时,程序就开始将最大数据包每微帧的值写入历史缓冲区,经过64个微帧后停止。
如果d、e为真,程序打开警报灯D5。
当检测到f时,将64个字节的历史缓冲区的值返回给主机,这个历史中记录了64个连续微帧中,每个微帧内传输的BULK数据包的数量。然后程序又重新初始化并准备下一次任务。
USB2.0带宽测试使用的驱动程序和应用程序分别是CYPRESS提供的EZUSB.SYS和EZ-USB Control Panel。传输方式采用BULK方式。
在一次测试中,将14336字节的BULK IN数据包由FX2传回PC使用了四个微帧,每个微帧包含了6、8、7、7个512字节的BULK-IN数据包(总共28个数据包,28
512=14336字节)。如下图所示,通过端点1 IN可以返回一个64字节的历史缓冲区,历史缓冲区中记录着每一帧传输的包的数目(见图5)。
图5 EZ-USB Control Panel显示的USB2.0带宽测量结果(略)
理论上USB2.0高速模式每微帧可以传输13个BULK数据包,这是最高的带宽:
13 512/125 s=53.24MB/s(理论最大值)
上图的测量结果是在Windows 2000操作系统,华硕的P4PE-X主板(集成USB2.0主机控制器)环境中得到的。在一个微帧内最多传输了8个BULK数据包,因此峰值带宽为:
8 512/125 s=32.768MB/s
传输14336个字节一共用了28个数据包,四个微帧(500 s)。因此平均的数据传输率为28.672 MB/s。
由此可见,USB2.0的带宽与USB1.1相比已有大幅度的提高;但实际的测量结果于理想值还是有一定的差距。如果能采用更先进的主板进行带宽测试将会获得更好的测试结果。
|