我使用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)如果这些字节不是来自校验和,为什么要添加这些字节?
答案 0 :(得分:1)
我知道为校验和添加了4个字节
错误。 CRC是2个字节用于数据包,5个用于令牌包。此外,CRC永远不会存储/转发到用户缓冲区中。在验证CRC期间,控制器会将其剥离。所以你根本不会看到CRC。 但是,如果您仍想查看CRC,请连接USB数据包分析器并查看跟踪。
1)这些字节是在数据包的开头还是结尾添加的?
最后添加了2个字节。
2)这些字节是否有保留值?
没有。它根据数据包的内容计算
3)如果传输中丢失了一些数据字节。我应该对用于校验和的字节使用哪些注意事项?
如果在计算CRC之后丢失了一些字节,则会出现USB事务错误(来自主机的CRC不匹配)。主机将重试相同的交易。
PS - 我以为你使用的是高速设备