包是传输的基本单元
这个是我自己定义的,怎么说呢,就是这个USB传输数据的时候的基本单元,即最小的那个组织方式,那就是 “包”!USB传输中有各种各样的“包”。
例如 令牌包,数据包,握手包等等。当然这些包是由字节构成的,这些包有不同的个格式,但基本格式都是一样的:
即 同步域 | 包标示符(PID)| ........ | 包结束符(EOP) 中间省略号 根据包不同,格式也不同。
下面介绍一下各种包的概念:主要介绍令牌包,数据包,握手包。
如令牌包:包含IN包,OUT包,SETUP包。由名字可以知道,令牌包就是发命令的包。其格式是:
同步域 | 包标示符(PID)| 设备地址 | 端点号 | CRC校验 | 包结束符(EOP)
解释一下,同步域:就是用来数据同步的,这个电脑圈圈的书上解释了,挺好的,大家看一下,知道作用就行了。
包标示符: 显而易见,用来区分各种各样的包的,包的不同,对应的标示符也不同。八位,前四位是后四位的补码还是反码,我给忘了,即决定包的类型的其实只有4位。
设备地址:USB的地址。第一次枚举时,地址为0,然后有主机分配一个地址给USB设备。见后续文章关于 枚举过程介绍
端点号:区分不同端点的,主机和设备是通过端点来传输的,即向USB设备传数据时,实际上是往USB端点里写数据。USB端点就是一块挺大的内存,缓冲,fifo。
CRC校验:校验用的
EOP:包结束的标志
下面是数据包的格式:
同步域 | 包标示符(PID)| 字节0 | 字节1 |字节2 | 。。。。。。| CRC校验 | 包结束符(EOP)
其中字节即是要传输的数据,其他同令牌包。
握手包格式
同步域 | 包标示符(PID) | 包结束符(EOP)