我有一条 USB 转 RS232 适配器电缆 (FT232R),用于 Windows 和 Linux。因此我使用带有 pyserial 的 Python 脚本。
在Windows下,数据传输期间TX线上的最低电压为-6.2V,最高电压为6.2V。与连接设备的通信在这里完美运行。
在 Linux 下,我发送完全相同的数据(相同的 python 代码),但 TX 电压向上移动。最低电压为-0.8V,最高电压为11.8V。这里通讯失败。当我测量超过 10k 的电阻时,电压在开始时为正,并在 Linux 下的传输过程中下降(见图)。
Linux(Ubuntu)下如何调整电压?
适配器电缆来自 W&T (https://wut.de/e-38011-ww-dade-000.php)。在 Linux 下,适配器被识别为“Ltd FT232 串行 (UART) IC”。
图片可以在这里找到:https://imgur.com/a/lB78S4a
答案1
就像评论中的@Bodo一样,我首先想到的是“硬件问题”,但后来我意识到这也可能是USB省电。
由于 USB 仅提供 +5V,任何负电压和高于 +5V 的电压都必须由适配器中的电荷泵电路产生 - 如果在省电模式下关闭该电路,则打开端口时它可能会被完全耗尽。
数据表表明您的适配器使用 FTDI FT232R 串行转换器芯片。这是它的数据表,直接来自芯片制造商。
请参见第 24 页第 7.1 章中的 USB 转 RS232 转换器电路示例:请注意,RS232 电平转换器芯片与 FT232R 芯片的 SLEEP# 引脚有连接,这表明当主芯片进入电源时,电平转换器会断电。节省模式。
由于实际 FT232R 芯片的 UART 接口最多只能提供 0V / +5V 信号电平,因此很明显您的适配器包含电平转换芯片。
如果您的 Linux 与 Windows 运行在不同的硬件上,那么甚至可能是 Linux 系统上的 USB 电源输出不足,无法保持电平转换器的电荷泵充满电以防止 RS232 设备的耗尽。
看看在打开/初始化端口和实际传输之间添加几秒钟的延迟是否会改变情况。如果问题是适配器在省电模式下启动,则初始化端口后的延迟可能会使适配器退出省电模式,并允许电荷泵在开始通信之前充电。