如何识别USB ISO-Transfer中用于CRC(校验和)的数据字节?

时间:2017-06-27 18:35:19

标签: c usb libusb

我使用libusb从USB音频设备实时获取数据。我的最大数据包大小为196个字节。我知道为校验和添加了4个字节。我想确定用于校验和的字节,所以我只能存储传输的有用数据,但我有一些疑问:

1)这些字节是在数据包的开头还是结尾添加的?

2)这些字节是否有保留值?

3)如果传输中丢失了一些数据字节。我应该对用于校验和的字节使用哪些注意事项?

编辑1

我有这些疑问,因为我的特定设备有一个接口和alt设置,采样率为48 KHz,2个通道,16位深度,最大数据包大小为196字节。

因此有48个样本* 2个通道* 2个字节= 192个字节

那么我的数据包应该是192字节但是当我设置我的设备使用该接口和alt设置时,我开始接收196字节的数据包。 OUT ISO端点的相应接口和alt设置工作采样率为48 KHz,2个通道,16位深度,最大数据包大小为192字节。

4)如果这些字节不是来自校验和,为什么要添加这些字节?

1 个答案:

答案 0 :(得分:1)

enter image description here

我知道为校验和添加了4个字节

  
    

错误。 CRC是2个字节用于数据包,5个用于令牌包。此外,CRC永远不会存储/转发到用户缓冲区中。在验证CRC期间,控制器会将其剥离。所以你根本不会看到CRC。     但是,如果您仍想查看CRC,请连接USB数据包分析器并查看跟踪。

  

1)这些字节是在数据包的开头还是结尾添加的?

  
    

最后添加了2个字节。

  

2)这些字节是否有保留值?

  
    

没有。它根据数据包的内容计算

  

3)如果传输中丢失了一些数据字节。我应该对用于校验和的字节使用哪些注意事项?

  
    

如果在计算CRC之后丢失了一些字节,则会出现USB事务错误(来自主机的CRC不匹配)。主机将重试相同的交易。

  

PS - 我以为你使用的是高速设备