EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
(一)域:是USB数据最小的单位,由若干位组成(至于是多少位由具体的域决定),域可分为七个类型:
1 Z) Z, P, @! N- f; m# L1 K7 E1、同步域(SYNC),八位,值固定为0000 0001,用于本地时钟与输入同步 1 Z3 x% _' J8 u/ P' L& l3 g, B
2、标识域(PID),由四位标识符+四位标识符反码构成,表明包的类型和格式,这是一个很重要的部分,这里可以计算出,USB的标识码有16种,具体分类请看问题五。 5 e; X) s5 i5 `9 n. J5 x+ r% t
3、地址域(ADDR):七位地址,代表了设备在主机上的地址,地址000 0000被命名为零地址,是任何一个设备第一次连接到主机时,在被主机配置、枚举前的默认地址,由此可以知道为什么一个USB主机只能接127个设备的原因。
6 I! D9 r8 `6 U4、端点域(ENDP),四位,由此可知一个USB设备有的端点数量最大为16个。
: y6 R4 o+ |. V5、帧号域(FRAM),11位,每一个帧都有一个特定的帧号,帧号域最大容量0x800,对于同步传输有重要意义(同步传输为四种传输类型之一,请看下面)。 & H' w9 d: Z9 Z7 F
6、数据域(DATA):长度为0~1023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度
& b1 K9 B3 H4 h7、校验域(CRC):对令牌包和数据包(对于包的分类请看下面)中非PID域进行校验的一种方法,crc校验在通讯中应用很泛,是一种很好的校验方法,至于具体的校验方法这里就不多说,请查阅相关资料,只须注意CRC码的除法是模2运算,不同于10进制中的除法。 8 U3 s% r) K1 X2 K# }
(二)包:由域构成的包有四种类型,分别是令牌包、数据包、握手包和特殊包,前面三种是重要的包,不同的包的域结构不同,介绍如下 & z3 c8 `$ C1 _$ y& ^; B
1、令牌包:可分为输入包、输出包、设置包和帧起始包(注意这里的输入包是用于设置输入命令的,输出包是用来设置输出命令的,而不是放据数的) 其中输入包、输出包和设置包的格式都是一样的: SYNC+PID+ADDR+ENDP+CRC5(五位的校验码) 帧起始包的格式: SYNC+PID+11位FRAM+CRC5(五位的校验码)
# p* a! I' u( ]2、数据包:分为DATA0包和DATA1包,当USB发送数据的时候,当一次发送的数据长度大于相应端点的容量时,就需要把数据包分为好几个包,分批发送,DATA0包和DATA1包交替发送,即如果第一个数据包是 DATA0,那第二个数据包就是DATA1。但也有例外情况,在同步传输中(四类传输类型中之一),所有的数据包都是为DATA0,格式如下: SYNC+PID+0~1023字节+CRC16
6 @7 r% F, T. `1 P+ X# [( ]3、握手包:结构最为简单的包,格式如下 SYNC+PID
S0 y( v( ?( A/ s6 j+ ?# t |