Я использую SiLabs C8051F320, настроенный как HID для потоковой передачи данных АЦП (в отчетах 64 или 32 байт) на ПК. Я основываю свой HID на примере кода SiLabs с bInterval = 1 и экспериментирую с конечной точкой 1 (EP1) по сравнению с конечной точкой 2 (EP2).
Согласно таблице данных C8051F320, когда конечные точки находятся в режиме разделения, EP1 равен 64B, а EP2 - 128B, когда не используется двойная буферизация. У меня EP1 как 64B без двойной буферизации и 32B при двойной буферизации. EP2 - это 64B, независимо от того, имеет ли он двойную буферизацию или нет. Данные АЦП составляют 2 байта на выборку, поэтому на один отчет передается 31 выборка в отчете размером 64 байт и 15 выборок в отчете 32 байт.
1) EP1 без двойной буферизации (64B на отчет) правильно передает данные АЦП 22,5kSps 2) EP1 с двойной буферизацией (32B на отчет) правильно передает данные ADC 11,5kSps 3) EP2 без двойной буферизации (64B на отчет) выполняет не передает данные АЦП 22,5 кГц / с должным образом (я не проверял, какая максимальная частота дискретизации) 4) EP2 с двойной буферизацией (64 байт на отчет) сэмплы 22,5 кГц данных АЦП должным образом 5) Кажется, что время для заполнения отчета с образцами должно быть длиннее, чем bInterval. Например, если bInterval было 10 вместо 1, то EP1 без двойной буферизации правильно передает потоки 3kSps.
Правильно ли выглядит приведенный выше сценарий? Почему EP1 обеспечивает более быструю передачу, чем EP2? Почему время заполнения отчета должно быть больше, чем bInterval?