1

我正在使用配置为 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 个字节,因此每个报告传输 64B 报告中的 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 长?

4

1 回答 1

1

似乎用样本填充报告的时间必须比 bInterval 长。

正确:HID 使用中断类型的端点,它们可以每 bInterval ms 传输一份报告。这使您可以计算每秒 64 字节 * 1000 Hz = 64000 字节的最大数据速率。样本中有 2 个字节,这将导致 32kHz 的最大采样率。

为什么 EP1 允许比 EP2 更快的传输?

除了编程错误之外,我看不出这种行为的原因。

注意:HID 协议对于流式数据来说是一个糟糕的选择。批量类型端点允许更高的数据吞吐量。

于 2013-03-01T18:32:32.213 回答