5. 在“FULL SPEED(12MBITS/SEC)”和在“HIGHT SPEED(480MBITS/SEC)”上传送“OUT PACKET”有不同。
A. 在“FULL SPEED”,主机重复送“OUT DATA”。
B. 在“HIGHT SPEED”,首先,主机送“PING ”指令到“OUT(输出)”终端,询问在外围设备中,这儿是否有空间为“OUT DATA(输出数据)”。仅仅当主机收到回答,既收到“ACK”,主机才会送“OUT TOKEN AND DATA(输出指令和数据)。
(我想就是因为这个改进,一部份提高了传输速度,这就是“HIGHT SPEED”和“FULL SPEED”的差别)
6. 这儿有两个重复的DATA PIDS (数据包IDS),这是由于USB严格的查错机制。其查错过程如下:A,设备的ACK握手信号,表明设备接受数据无误,(而且我认为它的CRC循环冗余,也是其数据严格的表现)B,如果设备不回复,表示数据可能丢失,主机自然会重发的。(那你说,发了两个重复数据,如没丢,不多了吗?这不多,设备自然会处理多的那个)
7. 接下来我会讲解各PIDS。
A. SETUP TOKEN(SETUP领牌)是唯一的用来“控制”传输的。
B. SOF TOKEN(START OF FRAME,开始帧)。在FULL SPEED(12MBITS/SEC)下,SOF TOKEN 每MS(毫秒)发生。在HIGH SPEED下,125MS一帧,而每帧包含一个SOF TOKEN。
C. ACK (ACKONWLEDGE)表示数据接收成功。
D. NAK(NEGATIVE ACKONWLEDGE)是设备表示自己很忙,请主机再传。注意它不是“ERROR(出错)”,当USB设备发现传输有错时,它会选择不“回答”。
E. STALL 表示出现主机不可预知的错误。
F. NYET(NOT YET)它只出现在HIGH SPEED模式下,表示设备数据传输成功,但还没准备好接受下个设备。
G. PRE 这个出现在LOW SPEED(1。5MBITS/SEC)下,FX2不支持。
1.5.1 RECEIEING DATA FROM THE HOST(接受来自主机的数据)。
1. 以下我将写这的过程。
A. 首先主机送给设备,数据和“OUT”(记住OUT在数据后哦)。
B. 接下就是设备回复主机了,这儿分三种情况1,设备有接受数据的空间,设备回复“ACK”。2,如果这儿没多空,它会送“NACK”到主机。3,如果设备发现主机传来的数据有误,它会什么也不发(我想这也是加快其运行速度的好方法),主机在规定时间内没收到任何来自设备的信号,它会重发数据。
1.6.2 SENDING DATA TO THE HOST(送数据到主机)
- USB设备不会传数据到主机,(这是我自己翻译的,我不知道是否理解正确,我把原文写下“A USB DEVICE NEVER SPONTANEOUSLY SENDS DATA TO THE HOST”)。
- 当主机送一个“IN”请求到FX2,数据将被外围设备通过端口送到主机。
1.7 USB FRAMES(USB 帧)
1. USB 主机每毫秒(MILLISECOND)传输一个SOF(START OF FRAME,开始帧)给 所有USB设备。
2. SOF包中 每帧由11位组成。其当前帧(其帧号[0-2047])可在任意时间从FX2内部寄存器读出。
3. 在HIGH SPEED(480MBIT/S)每一秒毫秒(ONE MILLISECOND)帧被分成8个125微秒(MICROSECOND),每个包含1个SOF包。而帧号以毫秒(MILLISECOND)计数,既一秒一个,因此这8个帧有相同的帧号。为跟踪当前的微秒帧(MICROFRAME[0-7]),FX2提供了一个可读的微秒帧计数器(MICROFRAME COUNT)。
4,当FX2收到一个SOF,它将产生一个中断请求。
A在FULL SPEED 情况下,每毫秒一次(ONCE EVERY MILLISECOND),
B在HIGH SPEED情况下,每125微秒一次(ONCE EVERY 125 MICROSECOND)。
这个SOF中断应用于,比如服务同步数据时使用。
1.8 USB FRANSFER TYPES(USB传输类型)
它有四个类型,以在总线上传输方式而定。
1.8.1 BULK TRANSFERS (块传输)
输入IN
|
ADDR
|
ENDP
|
CRC5
|
|
DATA1
|
有效数据PAYLOAD DATA
|
循环冗余
CRC16
|
|
应答ACK
|
令牌包
TOKEN PACKET
|
数据包
DATA PACKET
|
握手包H/S PKT
|
输出OUT
|
ADDR
|
ENDP
|
CRC5
|
|
DATA1
|
有效数据PAYLOAD DATA
|
循环冗余
CRC16
|
|
ACK
|
TOKEN PACKET
|
DATA PACKET
|
H/S PKT
|
它的特性,
- 突发性(BURSTY)。
- A在FULL SPEED (12Mbits/Sec)情况下 每数据包包含8,16,32,64个字节。
B在HIGH SPEED (480Mbits/Sec)情况下 每数据包包含512个字节。 - 精确性。
- 可用于打印机,扫描仪等。
1.8.2 INTERRUPT TRANSFER (中断传输)
1 中断数据与块传输数据格式相同,如下图
输入IN
|
ADDR
|
ENDP
|
CRC5
|
|
DATA1
|
有效数据PAYLOAD DATA
|
循环冗余
CRC16
|
|
应答ACK
|
令牌包
TOKEN PACKET
|
数据包
DATA PACKET
|
握手包H/S PKT
|
1 .8. 2 INTERRUPT TRANSFERS (中断传输)
IN(输入)
|
ADDR(地址)
|
ENDP
|
CRC5(循环冗余)
|
|
DATA1(数据)
|
PAYLOAD DATA(有效数据)
|
CRC16(循环冗余)
|
|
ACK(应答)
|
TOKEN PACKET(令牌)
|
DATA PACKET(数据包)
|
H/S PKT(握手)
|
1. 中断数据传输的数据与块传输的数据类似。
2. 中断传输 在FULL SPEED (12Mbits/Sec)情况下,它的传输字节可在1之64个字节间。在HIGH SPEED (480Mbits/Sec)情况下,它的传输字节可高达1024个字节。
3. 它使用了IN 令牌(TOKEN)。
1.8.3 ISOCHRONOUS TRANSFERS(同步传输)
IN(输入)
|
ADDR(地址)
|
ENDP
|
CRC5(循环冗余)
|
|
DATA1(数据)
|
PAYLOAD DATA(有效数据)
|
CRC16(循环冗余)
|
|
ACK(应答)
|
TOKEN PACKET(令牌)
|
DATA PACKET(数据包)
|
H/S PKT(握手)
|
1. 同步传输适用于音响或视频。
2. 同步传输 在FULL SPEED (12Mbits/Sec)情况下,它的传输字节每包可在1之1023个字节间。在HIGH SPEED (480Mbits/Sec)情况下,它的传输字节每包可在1之1024个字节间。
3. A.同步传输中,时间非常重要。
B.在USB帧中,分配了一定的USB带宽给同步传输。
C.同步传输没有握手(NO HANDSHAKE ,SUCH AS ACK/NAK/STALL/NYET),没有重发(NO RETRIES)。而查错被限制在16-bit CRC。
D.同步传输不使用数据轮换机制(DATA-TROGGLE MECHANISM),在FULL SPEED (12Mbits/Sec)情况下,仅仅有DATA0。在HIGH SPEED (480Mbits/Sec)情况下,有DATA0,DATA1,DATA2,MDATA,
E.同步传输每帧每个端点传输的包量。在FULL SPEED (12Mbits/Sec)情况下,每帧每个端点传输可传输一个同步数据包;在HIGH SPEED (480Mbits/Sec)情况下,每帧每个端点可传输高达3个同步数据包。
1.8.4 CONTROL TRANSFERS (控制传输)
以下将介绍控制传输的三个阶段:SETUP STAGE(SETUP 阶段),DATA STAGE(DATA 阶段,此阶段可根据需要缺省),STATUS STAGE(STATUS 阶段)。
如下图:
1. A.CONTROL TRANSFERS (控制传输)配置和送控制命令到主机。
B.CONTROL TRANSFERS (控制传输)非常重要,它使用最广泛的USB错误检测。
C.主机为控制传输在USB帧中保留了一部分空间。
2.控制传输由二或三个阶段构成(DATA 阶段,此阶段可根据需要缺省)。
A.SETUP STAGE(SETUP 阶段)包含了8字节的USB控制数据。
B.DATA STAGE(DATA 阶段)如果需要可缺省。
C.STATUS STAGE(STATUS 阶段)也可称(HANDSHAKE,握手)在这个阶段,允许设备直接显示CONTROL传输成功。
1.9 ENUMERQTION(枚举)
1.USB设备的即插即入(PLUG AND PLAY),这是大家都知道的USB的一个很大的特点。但这就导出下面一个问题:"这一切如何发生?"在每个USB 设备中,这儿有个描述符表,这表包含了设备所有特性和要求。
当插入USB设备后,主机将进行以下步骤:
- 主机发出Get-Descriptor/Device(获取描述符表/设备)的请求到地址0(设备第一个连接时必须响应地址0)。
- 设备响应回答送ID data到主机。
- 主机送Set Address请求为设备安排唯一地址。
- 主机送更多Get Descriptor请求要求设备送更多设备信息,以便了解设备端点数,电源要求,总线带宽要求,驱动程序的装载。
温馨提示:
百合电子工作室有一个关于USB开发方面的开源项目-Easy USB 51 Programer,整个开发过程写得非常详细,不防参考一下,您还可以进入她的论坛参与此项目的讨论。