FTDI驱动程序(Windows)FT_Write()存在大(1KB)数据块问题-(版本2.12.16.0)

FTDI驱动程序(Windows)FT_Write()存在大(1KB)数据块问题-(版本2.12.16.0),windows,driver,ftdi,tx,large-data,Windows,Driver,Ftdi,Tx,Large Data,我在PC上的应用程序向嵌入式设备发送一个1KB大小的文件(2MB) 我使用FTDI Windows驱动程序,我使用经典的FT_Write()API函数,因为我的代码是跨平台的 注意:当我使用1KB块大小时,会出现以下问题。较小的块(我尝试了64字节)可以正常工作 问题是该函数每隔几百个数据包返回“0字节已发送”并被卡住。我找到了一个解决办法,清除TX和Rx,然后调用ResetDevice()恢复芯片。它仍然每隔几百个包发生一次,但至少我可以发送整个文件(2MB) 但是当我使用USB隔离器() 这

我在PC上的应用程序向嵌入式设备发送一个1KB大小的文件(2MB)

我使用FTDI Windows驱动程序,我使用经典的FT_Write()API函数,因为我的代码是跨平台的

注意:当我使用1KB块大小时,会出现以下问题。较小的块(我尝试了64字节)可以正常工作

问题是该函数每隔几百个数据包返回“0字节已发送”并被卡住。我找到了一个解决办法,清除TX和Rx,然后调用ResetDevice()恢复芯片。它仍然每隔几百个包发生一次,但至少我可以发送整个文件(2MB)

但是当我使用USB隔离器() 这项工作失败了

我相信我的工作不是一个优雅的解决方案

注:我之所以使用大数据块,是因为我在下面的FTDI应用说明中找到了建议:

将数据写入FTDI设备时,应尽可能多地输入数据 在应用程序中进行缓冲,并在单个 写入函数调用(使用 Win32 API,如果使用D2XX经典接口或 FT_WriteFile(如果使用D2XX FT_W32接口)。结果呢, 数据将以每个USB 64字节的速度写入设备 包

知道解决这些问题的正确方法吗?是否与FTDI初始化有关?我的驱动程序版本是2.12.16.0(3/9/2016)

  • 我还看到了同样的问题,即如果传递了太多数据,API FT_Write()无法正常工作, 在处理我的USB设备库时。 我主要是在同步比特交换模式下工作,而不是UART,但毕竟是一样的 硬件、驱动程序和API

  • 有USB 2.0规范或FTDI FT232RL规范,然后是 电子和比特的真实性。传输速度的预期数量在任何时候都不匹配 至少一开始是这样。换言之,它是复杂的(请参阅下面我引用的博客文章中的更多内容)

  • 2015年,我的印象是FTDI芯片FT232RL的384字节大小运行良好 数字来自芯片数据表(128字节接收缓冲区和256字节发送缓冲区)。 使用500字节的大小仍然可以工作,但超过600字节的事情将不起作用

    后来我使用了FT231X芯片,它有一个较大的缓冲区(1k、512字节接收缓冲区和512字节发送缓冲区)。 并且能够使用FT_Write()1k和2k缓冲区传输数据,因此传输速度是我的两倍多。 但超过2k的事情就行不通了

  • 2016年,我阅读了所有关于FTDI USB 2.0全速芯片的文章,我来到了 结论:FT_写入应支持高达64K(见以下芯片数据表 FT232RL、FT231X、FT232H、FT260、FT4222)

  • 我也做了一些研究

    不知何故,我能够更新我的C#库,以在FT#u Write()中发送32k缓冲区中的数据,这是真的 使用FT232RL和FT231X芯片,但我无法告诉您发生了什么变化。 我可能没有完全理解USB 2.0全速FTDI技术的进出

    例如,假设您正在使用FT232RL,并在使用时传输384字节 FT_Write()。知道USB 2.0全速运行时至少有1毫秒的延迟 是的,您从USB的角度传输384*1000/1024,理论上是375k字节/s (这将是最大值),也就是说,您的嵌入式设备支持的波特率是多少。 波特率是多少? FT232RL的最大波特率为900000波特,这将只为您提供900000/(1+8+1)==87 K字节/秒。 马上你就可以看出会有一些问题,可能是FTDI驱动程序处理的 不管是不是。我不知道。 根据嵌入式设备支持的波特率和384字节的缓冲区重新计算 每秒发送1000,然后使用sleep()降低USB速度以匹配波特率

    这就是我要开始的地方

  • 我还看到了同样的问题,即如果传递了太多数据,API FT_Write()无法正常工作, 在处理我的USB设备库时。 我主要是在同步比特交换模式下工作,而不是UART,但毕竟是一样的 硬件、驱动程序和API

  • 有USB 2.0规范或FTDI FT232RL规范,然后是 电子和比特的真实性。传输速度的预期数量在任何时候都不匹配 至少一开始是这样。换言之,它是复杂的(请参阅下面我引用的博客文章中的更多内容)

  • 2015年,我的印象是FTDI芯片FT232RL的384字节大小运行良好 数字来自芯片数据表(128字节接收缓冲区和256字节发送缓冲区)。 使用500字节的大小仍然可以工作,但超过600字节的事情将不起作用

    后来我使用了FT231X芯片,它有一个较大的缓冲区(1k、512字节接收缓冲区和512字节发送缓冲区)。 并且能够使用FT_Write()1k和2k缓冲区传输数据,因此传输速度是我的两倍多。 但超过2k的事情就行不通了

  • 2016年,我阅读了所有关于FTDI USB 2.0全速芯片的文章,我来到了 结论:FT_写入应支持高达64K(见以下芯片数据表 FT232RL、FT231X、FT232H、FT260、FT4222)

  • 我也做了一些研究

    不知何故,我能够更新我的C#库,以在FT#u Write()中发送32k缓冲区中的数据,这是真的 使用FT232RL和FT231X芯片,但我无法告诉您发生了什么变化。 我可能没有完全理解USB 2.0全速FTDI技术的进出

    例如,假设您正在使用FT232RL,并在使用时传输384字节 FT_Write()。知道USB 2.0全速运行时至少有1毫秒的延迟 是的,你不是