python - FT232RL 上的流量控制

标签 python serial-port pyserial ftdi flow-control

我有一个 FT232RL 芯片。我用它进行 USB 到 RS232 协议(protocol)转换,我需要转换数据并进一步使用它。

我正在使用的“数据集”(另一侧的设备,如调制解调器,在我的例子中是 MAX485 IC)无法配置。我所能给它的只是一个读取或写入的控制信号。所以它不是很有用。

我的应用程序要求我在发送数据时能够将其设置为“写入模式”,然后在发送完成后,我需要能够将其设置为“读取模式”以接收响应它产生的信号。

注意:控制信号是简单的高电平或低电平 数据可以是几个字节

我认为实现此目的的一种方法是能够读取 RS232 传输缓冲区中有多少数据。一旦变为“0”,所有数据都将被传输,我可以将控制引脚设置为“读取模式”

另一种方法是使用流量控制

为了清楚起见,我想在陈述我的问题之前解释一下我对流量控制的理解:

(1) 我通过Python将数据通过usb发送到ftdi

(2) ftdi需要在DTR线上写一个高电平

(3) 在 DSR 线上接收到高电平后,需要开始传输(假设我已禁用 rts/cts 流量控制设置)

(4) 发送完成后,需要在DTR线上写一个低电平,标记发送结束

问题是我无法按预期打开和关闭 DTR 线 步骤 (2) 不会发生

import serial
ser = serial.Serial("com1")      # initialised port as ser
ser.dsrdtr = True                # set dsrdtr mode
ser.write("blah blah")           # sent a command

我什至尝试了以下方法:

ser.setDTR(True)                 # write a HIGH on DTR
ser.setDTR(False)                # write a LOW on DTR

这仍然没有解决我的完整问题。

请指教

编辑:我需要提及的是,我使用的 FT232RL 位于 nex-robotics 的分线板上,我可以访问的引脚是: 3.3V、5V、CD、RXD、TXD、DTR、GND、DSR、RTS、CTS 和 RI,当然还有一个 USB 端口,用于将其连接到我的笔记本电脑

EDIT2:我可以使用 Mprog 3.5 或类似的软件来闪存 EEPROM,它可以支持我想做的事情吗?如果是,如何?

最佳答案

TL;DR

According to the FTDI documentation引脚 CBUS2 的默认配置是 TXDEN,它是专门为此功能设计的,因此只需使用引脚 CBUS2 来使能收发器即可。

背景

FTDI 芯片确实能够 DTR/DSR flow control .

但那是当硬件自行处理流量控制时(与远端通信,可以提供背压)。不需要软件参与。

对于像 RS485 这样的多点总线,实际的流量控制是在软件中处理的,硬件只是在软件的指示下发送数据。

正如您的一位评论者所建议的,您可以编写额外的软件来打开 DTR、发送数据以及关闭 DTR。但这对于满足严格的时序来说是有问题的,而且实际上没有必要这样做,因为 FTDI 芯片支持根据您发送数据的时间为您打开发射器。不过,您所使用的 DTR 信号可能支持也可能不支持此支持。

FTDI可以控制收发器的信号名称是TXDEN。根据您使用的 FTDI 芯片,这可以路由到几个不同的引脚之一。

要设置该路由,您只需运行 FTDI 的 FT_Prog。您可以扫描并解析当前设备,然后使用 GUI 进行更改。您还可以从 XML 文件保存和恢复配置。该程序将向您显示 TXDEN 的路由选项。

提问者编辑:-这个答案包含以下几点:-

1) 下载MPROG 3.5作为 FTDI 的程序员。

2) 从 CBUS0 - CBUS4 中选择任意一个可编程引脚

3)读取并解析后,将所选引脚更改为TXDEN并命中程序

4) 为TXDEN进行必要的硬件连接

TXDEN 一直处于高电平,直到 FTDI 发送数据并立即变低,从而达到我的目的

关于python - FT232RL 上的流量控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32024597/

相关文章:

windows - 如何分配 COM 端口号?

python - 如何在 Python 上使用 Omniorb 通过 ssh 隧道连接到 Corba 服务器

python - 合并两个不同的 Python RegEx 搜索

python - networkx 如何处理 2 元组?

c - 通过串行端口发送整数并打印到 LCD

python - 无法在 Python 中通过 HC-12/UART 发送/接收数据

python - 是否可以使用 HTML5 canvas API 通过脚本以非交互方式批量生成图像?

java - 导入javax.comm*;错误

python - 将 pyserial 移植到 cython 是否可能且有用

连续从串口接收可变数据的Python代码