我正在使用配置为HID的SiLabs C8051F320将ADC数据(64B或32B报告)传输到PC。我将我的HID基于SiLabs示例代码,bInterval = 1并尝试使用端点1(EP1)与端点2(EP2)。
根据C8051F320的数据表,当端点处于分离模式时,EP1为64B,而非双缓冲时EP2为128B。我没有双缓冲时EP1为64B,双缓冲时为32B。无论是否双重缓冲,EP2都是64B。 ADC数据为每个样本2个字节,因此每个报告传输64个报告中的31个样本和32B报告中的15个样本。
1)非双缓冲EP1(每个报告64B)正确地传输22.5kSps ADC数据 2)双缓冲EP1(每个报告32B)正确地流11.5kSps ADC数据 3)非双缓冲EP2(每个报告64B)不能正确传输22.5kSps ADC数据(我没有检查最大采样率是多少) 4)双缓冲EP2(每报告64B)正确采样22.5kSps ADC数据 5)用样本填写报告的时间似乎必须长于bInterval。例如,如果bInterval是10而不是1,则非双缓冲EP1正确地流式传输3kSps。
上述情况是否正确?为什么EP1允许比EP2更快的转移?为什么报告填写时间需要比bInterval更长?
答案 0 :(得分:1)
使用样本填写报告的时间似乎必须长于bInterval。
正确:HID使用中断类型端点,它们可以每隔bInterval ms传输一个报告。这允许您计算最大数据速率为64字节* 1000 Hz = 64000字节,以秒为单位。 如果样本中有2个字节,则会产生32kHz的最大采样率。
为什么EP1允许比EP2更快的传输?
除了编程错误之外,我没有理由看到这种行为。
注意:HID协议是流数据的不良选择。批量类型端点允许更高的数据吞吐量。