==端点==
usb设备或主机上的一段缓冲区,用于存放放松或者接收的数据。每个端点都有唯一的地址,由设备地址和端点号组成。
端点有不同的传输特性:输入端点,输出端点,批量传输端点,配置端点等。
==帧==
时间概念,一帧就是1ms,它是一个独立的单元,usb将1ms分成好几份,每一份中是一个usb的传输动作。
==上行、下行==
主机到设备叫下行,设备到主机叫上行
==传输结构的构成==
传输线由地线、电源线、D+和D-四根线构成,D+、D-是差分输入线,它使用3.3V的电压(和CMOS的5V不同)。
而电源和地线可以给设备提供5V的电压,最大电流为500MA(可以在编程中实现,具体硬件实现可以忽略)。
USB数据格式格式
域(七种)=>包=>事务(IN,OUT,SETUP)=>传输(控制、中断、批量、并行/分时)
==域==
1 同步域(SYNC) 0000 0001 用于本地时钟与输入同步
2 标志域(PID) 4位标识符和4位标识符反码构成,表明包的类型和格式,可见有16种包
3 地址域(ADDR) 七位地址,代表了设备在主机上的地址,0000 0000是零地址,是任何设备被主机配置,
枚举之前的默认地址,由此可知usb只能连接127个设备
4 端点域(ENDP) 4位,由此可知一个USB设备的端点最大为16个
5 帧号域(FRAM) 11位,2^11为2K,共0x800,。对于同步传输很重要。
6 数据域(DATA) 长度为0~1023字节
7 校验域(CRC) 对令牌包和数据包中非PID域进行校验的一种方法
==包==
令牌包
输入包|输出包|设置包
SYNC+PID+ADDR+ENP+CRC5
帧起始包
SYNC+PID+FRAM+CRC5
数据包
DATA0和DATA1包,两个包是交替的。同步传输除外,在同步传输中,所有的数据包都是DATA0包。
SYNC+PID+CRC16
握手包
SYNC+PID
==事务==
每一个事务都是由令牌包,数据包,握手包3个阶段组成。
令牌包:启动一个输入,输出或设置的事务
数据包:按输入,输出发送相应的数据
握手包:返回数据接收情况。在同步传输的IN和OUT事务中没有这个阶段。这是比较特殊的。
IN事务
令牌包阶段:
主机发送一个PID为IN的输入包给设备,通知设备要往主机发送数据。
数据包阶段:
设备会根据情况作出3种反应
1)设备端点正常,设备向主机发送数据包(DATA0和DATA1交替)
2)设备正在忙,无法向主机发送数据包,就发送NAK无效包。
IN事务提前结束,到下一个IN事务才继续。
3)相应设备端点被禁止,发送错误包STALL包,事务也就提前结束了,总线进入空闲状态。
握手包阶段:
主机正确接收到数据包之后就会像设备就会向ACK数据包。
OUT事务
令牌包阶段:
主机发送一个PID为OUT的输出包给设备,通知设备准备接收数据。
数据包阶段:
比较简单,就是主机向设备发送数据,DATA0和DATA1交替。
握手包阶段:
设备会根据情况作出3种反应
1)设备端点接收正确,设备向主机发送ACK,通知主机可以发送新的数据。
如果发生了CRC校验错误,就不会返回任何握手包。
2)设备正在忙,无法往主机发送数据,就发送NAK数据包,通知主机再次发送数据。
3)相应设备端点被禁止,发送错误包STALL,事务提前结束,总线直接进入空闲状态。
SETUP事务
令牌包阶段:
主机发送一个PID为SETUP的输出包给设备,通知设备准备接收数据。
数据包阶段:
比较简单,就是主机向设备发送数据,注意,这里只有一个固定为8个字节的DATA0包,这8个字节
就是标准的USB设备请求命令(共有11条)。
握手包阶段:
设备接收到主机的命令信息后,返回ACK,此后总线进入空闲状态,并准备下一个传输。
(在SETUP事务之后通常是一个IN或OUT事务构成的传输)
==传输==
传输有IN,OUT,SETUP这三种事务组成,共有4种类型。
中断传输 批量传输 同步传输 控制传输
中断传输和批量传输的结构一样,同步传输有罪简单的结构,而控制传输是最重要的也是最复杂的传输
1 中断传输
由IN事务和OUT事务构成,用于键盘,鼠标等HID设备的数据传输中。
2 批量传输
由IN事务和OUT事务构成,用于大容量数据传输,没有固定的传输速率,也不占用带宽-当总线忙时,USB会优先进行其它类型的数据传输,而暂时停止批量传输。
3 同步传输
由OUT事务和IN事务构成,有两个特殊的地方,第一,在同步传输的IN和OUT事务中是没有握手包阶段的。第二,在数据包阶段所有的数据包都为DATA0。
是单向的传输
(用途呢?始终以恒定的速率传输,没有差错控制,适合视频等对时间有要求但对准确性要求不高的业务)
4 控制传输(用在建立连接阶段?)
最重要也是最复杂的传输。
控制传输由3个阶段构成(初始设置阶段,可选数据阶段,状态信息步骤),每一个阶段
看成一个传输,也就是说控制传输其实是由3个传输组成的。
USB设备初次接到主机之后,主机通过控制传输来交换信息,设备地址和读取设备的描述符,使得主机识别设备,并安装相应的驱动程序,这是每一个USB开发者都关心的问题。
1 初始设置步骤:就是一个有SETUP事务构成的传输
2 可选数据步骤:就是一个由IN或OUT事务构成的传输,这个步骤是可选的,要看初始设置步骤有没有要求读/写数据(由SETUP事务数据包阶段发送的标准请求命令决定)
3 状态信息步骤:顾名思义,这个步骤就是要获取状态信息,由IN或OUT事务构成的传输,但是要注意这里的IN和OUT事务和之前有两点不同:
1)传输方向相反,通常IN表示设备往主机发送数据,OUT表示主机向设备发送数据,在这里,恰恰相反。
2)在这个步骤里,数据包阶段的数据包都是0长度的,及SYNC+PID+CRC16。
(思考:这些传输模式在实际操作中应如何通过什么方式去设置?)