如何通过 USB(配置为虚拟 COM 端口)最大限度地提高数据传输速度



我很难通过OTG-USB-FS将我的流媒体配置为VCP。在我的性格中,我有核-h743zi板,它似乎在向我发送数据方面做得很好,但在PC端,我在接收这些数据方面遇到了问题。

for(;;) {
#define number_of_ccr 1024
unsigned int lpBuffer[number_of_ccr] = {0};
unsigned long nNumberOfBytesToRead = number_of_ccr*4;
unsigned long lpNumberOfBytesRead;

QueryPerformanceCounter(&startCounter);  
ReadFile(
hSerial,
lpBuffer,
nNumberOfBytesToRead,
&lpNumberOfBytesRead,
NULL
);
if(!strcmp(lpBuffer, "endrn")) {
CloseHandle(FileHandle);
fprintf(stderr, "end flag was receivedn");
break;
}
else if(lpNumberOfBytesRead > 0) {
// NOTE(): succeed
QueryPerformanceCounter(&endCounter);
time = Win32GetSecondsElapsed(startCounter, endCounter);
char *copyString = "copy";
WriteFile(hSerial, copyString , strlen(copyString), &bytes_written, NULL);
DWORD BytesWritten;
// write data to file
WriteFile(FileHandle, lpBuffer, nNumberOfBytesToRead, &BytesWritten, 0);
}
}

QPC 显示速度为 0.00733297970 - 一次成功的数据块传输(1024*4 字节(。

这是侦听器代码,我敢打赌这不是应该这样做的方式,所以我在这里寻求建议。我渴望也许没有控制序列("复制"(的完整流式传输是可能的,但在这种情况下,我无法接收相邻数据(在一个传输块内没关系,但两个连续接收的块不相邻。

例: block_1: 1 2 3 4 5 6 block_2: 13 14 15 16 17 18

有什么方法可以加快我的接收速度吗? (我正在尝试O2键,但没有任何成功(

您需要在PC端配置缓冲区,该缓冲区将是从主板传输的缓冲区的2或3倍,并使用双缓冲区方案来传输数据。在提交第二个缓冲区的同时传输第一个缓冲区,然后交替。 好办法是激活缓存,并将缓冲区放在 stm32h7 的快速内存中(它是 1 个域 RAM(。

但是,如果您的界面与您需要的速度不匹配,则没有任何技巧可以做到这一点。除了一个,如果您的控制器足够快 ->您可以对您的数据实施和使用无损数据压缩并传输压缩文件。如果您传输低熵数据,这可以大大提高您的速度。

最新更新