每个扩展消息(由设置在消息头中的扩展字段指示)都应包含一个扩展消息头,位于消息头之后,扩展消息头用于支持包含数据大小的数据块的扩展消息,数据块可以单个或作为一系列块发送。如果数据块作为一系列发送时,这个系列块中除了最后一个块都应包含26字节的数据,而最后一个块可能小于26字节,并且填充到下一个4字节数据对象边界。
1. chunked(块)
该字段主要目的是确定是否分块,会有以下几种情况:
1.当端口有一个或两个端口支持分块时:
每个扩展消息的15位应设置位1
每个扩展消息应在端口之间传输每个扩展消息
消息头的Number of data obiect应说明消息中的数据对象的数量包括第一个数据对象的一部分扩展消息头
上述规则应适用到端口与端口分离、硬复位或电源断电
2.当两个端口不支持分块时:
每个扩展消息的15位应设置位0
每个端口直接传输不分块的扩展消息
保留消息头中的Number of data obiect
上述规则应适用到端口与端口分离、硬复位或电源断电
当向电缆插头发送扩展消息时,VCONN源应仅发送分块消息。电缆插头应始终发送数据大小> 26字节分块的扩展消息,并将每个扩展消息中的分块位设置为1。
当支持扩展消息时,应该支持分块。
2. Chunk Number(块数量)
只有扩展消息的15位设置为1时,Chunk Number字段才在消息中有效。如果扩展消息的15位设置为零,Chunk Number字段也应设置为零。
根据消息对数据的请求和被请求数据,给字段使用不同的方式返回数据块:
在请求数据时,该字段指示所请求的块的数量。请求者应仅将此字段设置为系列中下一个块的数量。
在被请求时在请求的数据块中,该字段指示被返回的块的编号。系列中每个块的编号应从零开始,每个块应递增1,最多为9,对应总共10个块。
3. Request Chunk(请求块)
当扩展消息的15位设置为1时,该字段只能用于扩展消息的块传输。不支持未分块的扩展消息传输,消息的发送和接收。
该字段设置为1说明是数据块块的请求,设置为0说明是一个块对一个块的响应,除了Chunk zero,一个请求块的数据块应作为该块的请求块响应返回,块响应和块请求应在消息类型中包含相同的值,当请求块设置为1时,数据大小字段应设置为0。
4. Data Size(数据大小)
Data Size (数据大小)应说明返回的数据块中有多少字节的数据,消息中的数据字节总数不得超过MaxExtendedMsgLen(26字节)。
如果数据大小字段小于MaxExtendedMsgLegacyLen(26字节)并且设置了Chunked位,则数据包有效负载应填充到下一个4字节数据对象边界用零(0x00)。
如果给定Extended Message(扩展消息)的Data Size (数据大小)字段大于预期但小于或等于MaxExtendedMsgLen(26字节),则应适当处理消息中的预期字段,并且应忽略附加字段。
5. Extended Message Examples(扩展消息示例)
Chunked位用于确定是否:
‧ 使用Chunk请求/响应机制
‧ 扩展消息被分块
‧ 应用填充
‧ 使用了“数据对象数量”字段
上图说明了由Security_Response响应的Security_Request消息的典型序列,在USB的Host和power brick之间使用未分块扩展消息(分块位为零)的消息。整个数据块在一条消息中返回。不使用块请求/响应机制。
上图详细说明了上图中所示的Security_Request消息。该图显示了总线上的字节顺序以及在这种情况下没有填充的事实。Number of Data Objects字段的值为0因为Chunked位为零时它被保留。Data Size 字段表示当Chunked位设置为0时扩展消息的长度,在本例中为7个字节。