如何通过 USB 最大化数据传输速度(配置为虚拟 com 端口)

How to maximize data transfer speed over USB (configured as virtual com port)

我无法通过配置为 VCP 的 OTG-USB-FS 进行流式传输。在我的配置中,我有 nucleo-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, "end\r\n")) {
  CloseHandle(FileHandle);
  fprintf(stderr, "end flag was received\n");
  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 字节)。

这是Listener代码,我敢打赌这不是应该做的,所以我在这里寻求建议。我希望没有控制序列 ("copy") 的完整流式传输是可能的,但在那种情况下我无法接收相邻数据(在一个传输块内没问题,但两个连续接收的块不相邻。

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

有什么方法可以加快我的接收速度吗? (我尝试使用 O2 密钥但没有成功)

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

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