我尝试使用 UART-WiFi 桥接器将文件从 Windows 10 PC 发送到 Raspberry Pi Compute Module 3+;Pi 连接到 UART 端,PC 通过 WiFi 连接到桥接器。桥接器是与 Pi 进行接口的唯一可能形式,无需进行重大项目修改。我已使用 TeraTerm 的 ZMODEM 功能成功传输了小型(~3-5kB)文件,包括文本和二进制文件,但如果我尝试发送任何更大的文件,即使是几十千字节,ZMODEM 传输也会挂起,最终我会得到“文件 xyz 被删除”、垃圾文件或什么都没有。
对于 13kB 的文件,进度条达到 100%,传输的字节数看起来正确,但仍然会失败,而对于兆字节范围内的明显较大的文件,进度条只会达到某个值,然后挂起/闪烁。对于任何一个文件,这个值似乎都是恒定的,也就是说,每次我尝试发送文件时,它都会达到相同的数字,但不同文件之间的差异很大。
我尝试发送的较大文件是桌面上随意放置的 Excel 电子表格和 .stl 文件(如果相关的话)。知道问题可能是什么吗?我怀疑是连接不良,但在升级 UART-WiFi 桥接器(ESP8266)上的天线后,进度条在挂起之前仍达到完全相同的值。我可能怀疑有特殊角色在捣乱,但我认为 ZMODEM 可以抵御这种事情。绝对有足够的空间容纳所有文件,因为我最近删除了一个 33GB 的大型视频流文件。
答案1
我以前也见过类似的问题。可能是您的桥接器或 PC 端的驱动程序配置错误或无法遵守设备 UART 的流量控制。如果幸运的话,您的桥接器软件可能允许配置模拟硬件流量控制。
一些旧的 *Modem 传输程序允许您对数据包大小和/或数据包之间的延迟时间进行一定程度的控制。它们还允许您启用/禁用线路级流量控制并设置许多其他步调参数,例如在字符之间添加一些延迟。
当串行端的设备调用硬件流控制时,串行到 X 桥经常会感到困惑,当它有一块数据要写入另一个设备时可能会这样做,并且需要暂时阻止串行中断。
距离我上次使用 ZModem 已经过去了几十年,但我认为您可以配置 PC 端,在数据包之间引入延迟,并配置 Pi 端以不使用硬件流控制。我似乎记得还有一个可以配置的滑动窗口大小,但我可能会将其与其他 *Modem 程序之一混淆。
您只需 RTM 并进行实验即可。请记住,ZModem 的文件大小限制为 4GiB,因为当接收方请求丢弃数据包时,它使用 32 位文件偏移量。我想如果传输过程中没有丢弃数据包,并且实现不会阻止您尝试,那么这可能会持续更长时间。