1

我正在使用 C8051F320 并将我的固件基于 HID 示例固件(例如,BlinkyExample)。

IN 和 OUT 报告的长度均为 64B(单个 64B 数据包)。

我启用了 ADC 并将其设置为 10kSps。每个 ADC 中断,一个样本存储在一个数组中。当采集到足够多的样本来填充一个数据包时,就会发送一个 IN 数据包。

软件发送一个报告,告诉固件要返回多少个报告。

1) 示例固件使用 EP1,它有 128B。它将 EP 分成 IN 和 OUT,每个 64B。

固件以 10kSps 的速度丢弃每个 IN 报告的第一个样本。在 5kSps 时它运行良好。

2)我将EP1修改为双缓冲,但现在只有32B长。无论如何,使用 10kSps 数据流式传输 1000 份 IN 报告效果很好(通过软件中采样正弦波的 FFT 确认)。

3)我修改固件以使用 EP2,因为它总共有 256B,如果拆分和双缓冲,则为 64B。

a) 同样,在 10kSps 时,每个数据包的第一个样本被丢弃。为什么?它以 5kSps 运行良好。

实际上,我似乎无法想象双缓冲是如何工作的。如果采样率快于 HID 传输率,FIFO 无论如何都会溢出,对吧?双缓冲有什么帮助?但似乎要使双缓冲有效,数据包大小必须减半。

b) 在将 EP1 的引用切换到 EP2 时,我在 F3xx_USB0_Standard_Requests.c 中遇到了这段代码:DATAPTR = (unsigned char*)&ONES_PACKET;。设置 char* = char* 的地址对我来说似乎不正确。我将其修改为 DATAPTR = (unsigned char*)ONES_PACKET; 无论如何,似乎没有区别。zeros 和 one 数组有什么作用?

4

1 回答 1

0

HID 示例固件

HID 使用中断类型的端点,它每帧最多传输一次数据,或者每 1 毫秒传输一次数据 - 根据您的 HID 描述符,它可能会慢得多。这产生了大约 64000 字节/秒的净数据速率。

一旦您需要传输更多数据,请使用批量或同步端点。

于 2012-04-23T22:05:25.843 回答