USB的传输,编码,数据格式,掌握usb的必备知识

1、端点:位于USB设备或主机上的一个数据缓冲区 , 用来存放和发送USB的各种数据 , 每一个端点都有惟一的确定地址 , 有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)
2、帧:时间概念 , 在USB中 , 一帧就是1MS , 它是一个独立的单元 , 包含了一系列总线动作 , USB将1帧分为好几份 , 每一份中是一个USB的传输动作 。
3、上行、下行:设备到主机为上行 , 主机到设备为下行
下面以一问一答的形式开始学习吧 。
问题一:USB的传输线结构是如何的呢?
答案一:一条 USB的传输线分别由地线、电源线、D+、D-四条线构成 , D+和D-是差分输入线 , 它使用的是3.3V的电压(注意哦 , 与CMOS的5V电平不同) , 而 电源线和地线可向设备提供5V电压 , 最大电流为500MA(可以在编程中设置的 , 至于硬件的实现机制 , 就不要管它了) 。
问题二:数据是如何在USB传输线里面传送的
答案二:数据在USB线里传送是由低位到高位发送的 。
问题三:USB的编码方案?
答案三:USB 采用不归零取反来传输数据 , 当传输线上的差分数据输入0时就取反 , 输入1时就保持原值 , 为了确保信号发送的准确性 , 当在USB总线上发送一个包时 , 传输设 备就要进行位插入***作(即在数据流中每连续6个1后就插入一个0) , 从而强迫NRZI码发生变化 。这个了解就行了 , 这些是由专门硬件处理的 。

USB的传输,编码,数据格式,掌握usb的必备知识

文章插图
 
问题四:USB的数据格式是怎么样的呢?
答案四:和其他的一样 , USB数据是由二进制数字串构成的 , 首先数字串构成域(有七种) , 域再构成包 , 包再构成事务(IN、OUT、SETUP) , 事务最后构成传输(中断传输、并行传输、批量传输和控制传输) 。下面简单介绍一下域、包、事务、传输 , 请注意他们之间的关系 。
(一)域:是USB数据最小的单位 , 由若干位组成(至于是多少位由具体的域决定) , 域可分为七个类型:
1、同步域(SYNC) , 八位 , 值固定为0000 0001 , 用于本地时钟与输入同步
2、标识域(PID) , 由四位标识符+四位标识符反码构成 , 表明包的类型和格式 , 这是一个很重要的部分 , 这里可以计算出 , USB的标识码有16种 , 具体分类请看问题五 。
3、地址域(ADDR):七位地址 , 代表了设备在主机上的地址 , 地址000 0000被命名为零地址 , 是任何一个设备第一次连接到主机时 , 在被主机配置、枚举前的默认地址 , 由此可以知道为什么一个USB主机只能接127个设备的原因 。
4、端点域(ENDP) , 四位 , 由此可知一个USB设备有的端点数量最大为16个 。
5、帧号域(FRAM) , 11位 , 每一个帧都有一个特定的帧号 , 帧号域最大容量0x800 , 对于同步传输有重要意义(同步传输为四种传输类型之一 , 请看下面) 。
6、数据域(DATA):长度为0~1023字节 , 在不同的传输类型中 , 数据域的长度各不相同 , 但必须为整数个字节的长度
7、校验域(CRC):对令牌包和数据包(对于包的分类请看下面)中非PID域进行校验的一种方法 , CRC校验在通讯中应用很泛 , 是一种很好的校验方法 , 至于具体的校验方法这里就不多说 , 请查阅相关资料 , 只须注意CRC码的除法是模2运算 , 不同于10进制中的除法 。
USB的传输,编码,数据格式,掌握usb的必备知识

文章插图
 
(二)包:由域构成的包有四种类型 , 分别是令牌包、数据包、握手包和特殊包 , 前面三种是重要的包 , 不同的包的域结构不同 , 介绍如下
1、令牌包:可分为输入包、输出包、设置包和帧起始包(注意这里的输入包是用于设置输入命令的 , 输出包是用来设置输出命令的 , 而不是放据数的)
其中输入包、输出包和设置包的格式都是一样的:


推荐阅读