电子说
USB数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。下面介绍一下域、包和事务。
域是USB数据最小的单位,由若干位组成(多少位由具体的域决定),域可分为七个类型:
1、同步域(SYNC)
所有的USB包都由SYNC开始,高速包的SYNC宽度为32bit,全速/低速包的SYNC段度为8bit。实际接收到的SYNC长度由于USB HUB的关系,可能会小于该值。八位的值固定为0000 0001,用于本地时钟与输入同步。
2、标识域(PID)
由四位标识符 + 四位标识符反码构成,表明包的类型和格式,这是一个很重要的部分,这里可以计算出,USB的标识码有16种。USB2.0使用了十六种标识码,标识码的作用是用来说明包的属性的,标识码是和包联系在一起的,标识码分别有以下十六种:
令牌包 :
0x01:输出(OUT)启动一个方向为主机到设备的传输,并包含了设备地址和标号。
0x09:输入(IN) 启动一个方向为设备到主机的传输,并包含了设备地址和标号。
0x05:帧起始(SOF)表示一个帧的开始,并且包含了相应的帧号。
0x0d:设置(SETUP)启动一个控制传输,用于主机对设备的初始化。
数据包 :
0x03:偶数据包(DATA0)。
0x0b:奇数据包(DATA1)。
握手包:
0x02:确认接收到无误的数据包(ACK)。
0x0a:无效,接收(发送)端正在忙而无法接收(发送)信息。
0x0e:错误,端点被禁止或不支持控制管道请求。
特殊包0x0C前导,用于启动下行端口的低速设备的数据传输。
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进制中的除法。
全部0条评论
快来发表一下你的评论吧 !