USB总线协议中的一些基本概念

来源:互联网 发布:日本动漫软件下载 编辑:程序博客网 时间:2024/05/21 18:33

USB总线协议中经常会遇到一些概念,自己总结了下,讲基本的概念进行描述

1.USB系统模型:

USB实际上是一个数据通信协议,由几个大公司定义的。

USB系统由两部分组成,USB主机和USB设备,平常看到的USB主机就是集成在PC上的USB口;USB设备就是我们连接在PC上的设备,如U盘。其中USB设备始终是被动的,USB主机器控制所有的传输,即所有的事务都是由USB主机发起。USB设备通常由两部分芯片组成,USB协议解释芯片+MCU(搬数据)。

1.USB设备地址与端点的区别

端点(EndPoint):首先从物理机制来说,端点可以使嵌入式系统或PC上的一个数据缓冲区,用来存放或发送USB的数据;从逻辑上看,端点可以视为数据的收发器,按照预先定义的传输方式来交换数据。每个端点具有唯一的地址,即端点号。每个端点的属性由硬件芯片设置,需要从data sheet中查看。在USB的固件中,就存在对端点的描述,包括输入/输出方向,端点号,端点包的容量即Buffer大小,如果一次事务传输的数据量>EndPoint.Buffer,则会分包,如TCP传输的数据包>MCU时,在链路层则会出现分片包;其中端点描述为4bit,每个设备最多有2^4=16个端点,其中0号端点为配置端点,可以是双向的。其他端点只能是单向的。一个控制器具体有几个端点以及端点的属性,需要查看芯片手册。

USB设备地址为7bit,2^7=128,其中0号地址是设备枚举成功前默认的地址,所以一个USB主机最多可以连接127个USB设备。USB系统为一个拓扑结构,USB主机需要知道每个设备的地址。


数据在USB设备和USB主机的传输方式是串口模式,但是USB主机与PC的传输是采用PCI总线,并口方式进行的。



2.USB总线上二进制数的发送顺序

当一个数据需要多个字节表示的时候,数据的传输就需要考虑字节顺序了

USB总线上二进制数的发送顺序是按照LSB->MSB的方式进行。

如0x12345678,在USB总线上的发送顺序是0x78,0x56,0x34,0x12的字节顺序发送.

如果数据0x12345678,在PC中采用的保存方式是Little Endian方式(数据在内存中保存的方式0x78 0x56 0x34 0x12),则数据在USB总线的发送不需要转化,如intel

而如果数据0x12345678在PC中采用的保存方式是Big Endian方式(数据在内存中保存的方式0x12 0x34 0x56 0x78),则数据在发送之前需要进行转化。

同时接受段的MCU也需要注意数据的保存方式,处理字节位与地址的关系。

网络字节序采用"所见即所得”的方式获取,如网络抓包工具收到两个字节 0x01 0x02,按照一般的数学常识,数抽从左到右增长的的方式,则解释为0x0102,intel CPU模式则需要进行数据的转化。

即,网络字节流可以理解为Big Endian的方式处理的。

3.USB 事务与传输的概念

4.USB 4种传输模式以及应用场景

5.USB帧格式

5.USB如何实现低功耗