2012-04-19 120 views
1

我正在使用C8051F320並將我的固件基於HID示例固件(例如BlinkyExample)。瞭解雙緩衝區

IN和OUT報告每個長度爲64B(一個64B數據包)。

我啓用ADC並將其設置爲10kSps。每個ADC中斷,一個採樣都存儲在一個數組中。當採集足夠的樣本來填充分組時,發送IN分組。

軟件發送一個報告告訴固件要返回多少報告。

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

固件將每個IN報告的第一個採樣以10kSps丟棄。在5kSps它運行良好。

2)我將EP1修改爲雙緩衝,但現在只有32B長。無論如何,用10kSps數據傳輸IN報告流1000s效果很好(由軟件中採樣正弦波的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;無論如何,似乎沒有區別。零和數組是做什麼的?

回答

0

HID例如固件

HID使用中斷類型endpints,這將至多傳輸數據每幀一次,或每1毫秒 - 這取決於你HID描述符,其可以是慢得多。這產生了大約64000字節/秒的淨數據速率。

一旦您需要傳輸更多數據,請使用批量或等時端點。