USB2.0控制器CY7C68013特点与应用

文章作者:长沙国防科学技术大学 扈 啸 张连超
文章类型:设计应用 文章加入时间:2003年3月18日4:17

文章出处:单片机与嵌入式系统应用

    摘要:介绍USB2.0协议以及Cypress公司推出的USB2.0控制器CY7C68013。USB2.0协议提供480Mb/s的传输速度,向下完全兼容流行的USB1.1协议。CY7C68013是USB2.0的完整解决方案。该芯片包括带8.5KB片上RAM的高速8051单片机、4KB FIFO存储器以及通用可编程接口(GPIF)、串行接口引擎(SIE)和USB2.0收发器,无需外加芯片即可完成高速USB传输,性价比较高。

    关键词:USB2.0 高速模式 端点

本刊2002年到2、3期已对EZ-USB单片机的介绍。本文在此只重点介绍USB2.0的特殊之处以及芯片CY7C68013的主要特点。*

1 USB2.0的主要特点

USB协议的2.0版本于2000年4月推出。支持以下3种速度模式:

低速模式(low speed) 1.5Mb/s;

全速模式(full speed) 12Mb/s

高速模式(high speed) 480Mb/s

USB2.0协议支持现存的所有USB设备,既可以把USB1.1设备插入USB1.1的PC机接口,并且在电气上兼容USB1.1的连接线。

    1.1 数据包

USB传输的数据包的类型用称之为Packet Ids(PIDs)的特定代码来定义。USB包中共有4种PID类型,如表1所列。

表1 USB2.0的数据包类型

PID类型 PID名称
令牌 IN,OUT,SOF,SETUP
数据 DATA0,DATA1,DATA2,MDATA
握手 ACK,NAK,STALL,NYET
特殊类型 PRE,ERR,SPLIT,PIN

注:黑体字表示USB2.0增加的PID类型。

在全速模式时,每个OUT传输发送OUT数据包,不考虑外设是否处于“忙”状态而不能接收数据。针对这种浪费带宽的情况,在高速模式时推荐使用新的PID类型“PING”。主机先对OUT端点发出个较短的“PING”令牌,访问当前外设是否有数据文凭间来存放OUT的数据包。仅仅当外部设备回答“ACK”时,主机才发送较长OUT数据包。

SETUP邻牌只用于控制传输。它数据包中的前8个字节。通过这8个字节,外设对主机的设备请求进行译码。

SOF令牌代表一个USB帧的开始。

ACK(Acknowlegde)表示成功,数据接收无误。

NAK(Negavite Acknowlegde)表示忙,得发。这并不是出错,USB外设没有应答表示出错。

STALL表示未知错误,外设未能理解主机发出的设备请求,可能是外设端出错,或是主机访问并存在的资源。USB协议提供了从stall状态恢复的方法。

    NYET(Not Yet)类似于ACK,表示数据接收无误,并且指出外设还没准备好接收下一个OUT数据包。NYET PID只用于在高速模式。

其它PID详见参考文献[1]。

1.2 帧结构

USB主机每毫秒向所有的USB设备发送1上SOF包(Start of Frame),以此来提供时间基准。SOF包括1个自增的11位帧序号。FX2随时可以从寄存器中读出这个范围在[0~2047]的帧序号。

地高速模式下(480Mb/s),每个1ms长的帧被分成了8个125μs长的微帧。每个微帧也都由一个SOF包开始。帧序号还是每个毫秒自增1次,所以这8个微帧都含有相同的帧序号。为了区别每个微帧FX2提供1个只读的微帧计数器,并且FX2能在收到SOF包时产生1个中断请求,即在全速模式下1ms/次,高速模式下125μs/次。

1.3 传输类型

为了适用480 Mb/s的高速数据传输,USB.0协议扩大了各种传输类型数据包长度,与USB1.1的对照如表2所列。

表2 USB2.0与USB1.1数据包长度的对照

传输类型 数据包度/B
USB1.1 USB2.0
控制传输 8,16,32,64 64
块传输 8,16,32,64 512
中断传输 1~64 1024
同步传输 1023 1024

1.4 高速模式和全速模式的检测

USB2.0规范要求高速设备必须能在全速模式下枚举。每个高速设备都在全速模式下开始枚举过程。当与主机达成“Chirp”协议后设备再切换到高速工作模式下。详细内容见参考文献[1]第7章。FX2能自动检测高速主机,并切换到高速模式下。

1.5 传输性能分析

以USB硬盘为例分析USB2.0的高速传输性能。图1为USB2.0与硬盘接口的带宽分析。

每分转速7200带有2MB缓存的ATA100硬盘,接口数据传输速率可达100MB/s,可持续的有效传输速率只有39MB/s。

USB2.0在每个上微帧中最大可传输13个块传输包,而每个微帧长固定为125μs,所以其最大传输速率为:512×13×8×1000=53MB/s。

2 EX-USB FX2的主要特点

2.1 芯片结构

EZ-USB FX2芯片包括1个8051处理器、1个串行接口引擎(SIE)、1个USB收发器、8.5KB片上RAM、4KB FIFO存储器以及1个通用可编程接口(GPIF),如图2所示。FX2是一个全面集成的解决方案,它占用更少的电路板空间,并缩短开发时间。

EZ-USB FX2拥有1个独特的架构,其中包括1个智能串行接口引擎(SIE)。它执行所有基本的USB功能,将嵌入式MCU解放出来以用于实现专用的功能,并保证其持续的高性能的传输速率。FX2还包括2个通用可编程接口(GPIF),允许它“无胶粘接”,即可与任何ASIC或DSP进行连接,并且它还支持所有通用总线标准,包括ATA、UTOPIA、EPP和PCMCIA。EZ-USB FX2完全适用于USB2.0,并向下兼容USB1.1。

FX2有3种封装形式:56脚 SOPP、100脚的TQFF(薄形四方扁平封装)、128脚的TQFP。引脚数的区别在于输入、输出引脚数的不同,以针对不同的应用要求。

2.2 结构特点

当大部分USB1.1器件都需要微控制器参与数据从端点FIFOs到应用环境转移,如图3所示。显然,微控制器本身的工作频率在相当程度上限制了带宽的进一步提高。虽然在12Mb/s的全速模式下,这种限制并不明显,但当速度提升至480 Mb/s时,在成本严格控制下微控制器就必然成为整个系统的带宽并颈。

EZ-USB FX2提供了一种独持架构,使USB接口和应用环境直接共享FIFO,而微控制器可不参与数据传输但允许以FIFO或RAM的方式访问这些共享FIFO,如图4所示。这种被称之为“量子FIFO”(Quantum FIFO)的处理架构,较好地解决了USB高速模式的带宽问题。

具体来说,如图5所示,USB执行OUT传输,将EP2端点设成512字节重FIFO(如2.3小节所述)。在USB端和外部接口端都并不知道有四重FIFO。看来,USB端只要有1个FIFO为“半满”,就可以继续发送数据。当胶操作的FIFO写“满”时,FX2自动将其转换到外部接口端,排除等候读取;并将USB接口队列中下一个为“空”的FIFO转移到USB接口上,供其继续写数据。外部接口端与此类似,只要1有个FIFO为“半满”,就可以继续读取数据。当前操作的FIFO读“空”时,FX2自动将其转换到USB接口端,排除等候写入;并将外部接口队列中下一个为“满”的FIFO转移到外部接口上,供其继续读取数据。

2.3 端点缓存

USB协议定义了端点作为数据的接收器和发送器。主机发送4个bit的地址和1个bit的方向来选择端点,因此USB最多可有32个端点定义:IN0~IN15和OUT0~OUT15。

FX2定义了7个端点,在高速模式下的端点缓存结构如图6所示。EP0IN&OUT、EP1IN、EP1OUT是64byte的端点缓存。EP0是默认的控制传输端点,既是IN端点也是OUT端点。EP1IN、EP1OUT支持块、中断和同步传输。EP0、EP1IN和EP1OUT只能由FX2的固件访问;而EP2、4、6和8无需固件干涉即可同片外互传高速数据。

FX2端点配置方式非常灵活。EP2、4、6和8是大容量高带宽的数据传输端点,可设为IN或OUT端点的一种,能配置成多种形式以适应带宽需要。在图6中,每一列代表1种配置方式。带阴影的方框可包括2、3、4个512或1024字节的缓存,分别表示端点可配置成双重、三重和四重缓存。双缓存是指USB可以读或写1个数据包,而另一个数据包(同一个端点内另一个缓冲存储器中的)可供外部接口操作;三重缓存加了第3个数据包存储器可供USB和外部接口需要的一方使用;四重缓存增加了第4个数据包存储器。多缓存的结构以在读写双方速度相似时有效地改善带宽,平滑带宽抖动,减少双方的互相等待时间。

3 EZ-USB FX2的接口方式

FX有2种接口方式:Slave FIFOs和可编程接口GPIF。

Slave FIFOs方式是从机方式,外部控制器可像普通FIFO一样对FX2的多层缓冲FIFO进行读写。FX2的Slave FIFOs工作方式可设为同步或异步;工作时钟可选为内部产生或外部输入;其它控制信号也可灵活地设置为高有效或低有效。

可编程接口GPIF是主机方式,可以软件编程读写控制波形,几乎可以对任何8/16 bit接口的控制器、存储器和总线进行数据的主动读写,非常灵活。

4 EZ-USB FX2的开发工具

如同EZ-USB系列的其它控制器一样,Cypress公司对FX2也提供了较为完备的开发套件CY3681。它包括带128脚CY7C68013的硬件开发板和相应的控制面板(Control panel)、GPIF代码自动生成软件(GPIFTool)以及固件方面丰富的例子和大量的帮助文档。可以尽量节省学习时间,加快开发速度。