FT232RL 上的流量控制
Flow control on a FT232RL
我有一个 FT232RL 芯片。我将它用于 usb 到 RS232 协议转换,我需要转换数据并进一步使用它。
我正在使用的"data set"(另一端的设备,如调制解调器,在我的例子中是MAX485 IC)无法配置。我只能给它一个读或写的控制信号。所以用处不大。
我的应用程序要求我能够在发送数据时将其设置为 "write mode",然后在我完成发送后尽快将其设置为 "read mode"接收它产生的响应信号。
注意:控制信号是简单的HIGH或LOW
数据可以是几个字节
我认为一种方法是能够读取 RS232 传输缓冲区中有多少数据。一旦变为“0”,所有数据都已传输,我可以将控制引脚设置为 "read mode"
另一种方法是使用 FLOW CONTROL
为了清楚起见,我想在陈述我的问题之前解释一下我对流量控制的理解:
(1) 我通过 Python 将数据通过 usb
发送到 ftdi
(2) ftdi需要在DTR线上写一个HIGH
(3) 在 DSR 线上接收到高电平时,它需要开始传输(假设我已禁用 rts/cts 流量控制设置)
(4) 发送完成后,需要在DTR线上写一个LOW标记发送结束
问题是我无法让 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 的路由选项。
ASKER 编辑:- 这个答案包含以下几点:-
1) 下载 MPROG 3.5 作为 FTDI 的编程器。
2) Select 来自任何 CBUS0 - CBUS4
的任意一个可编程引脚
3) 然后在读取和解析后,将所选引脚更改为 TXDEN 并点击程序
4) 为 TXDEN
进行必要的硬件连接
TXDEN 在 FTDI 发送数据之前为高电平并立即变低,因此符合我的目的
我有一个 FT232RL 芯片。我将它用于 usb 到 RS232 协议转换,我需要转换数据并进一步使用它。
我正在使用的"data set"(另一端的设备,如调制解调器,在我的例子中是MAX485 IC)无法配置。我只能给它一个读或写的控制信号。所以用处不大。
我的应用程序要求我能够在发送数据时将其设置为 "write mode",然后在我完成发送后尽快将其设置为 "read mode"接收它产生的响应信号。
注意:控制信号是简单的HIGH或LOW 数据可以是几个字节
我认为一种方法是能够读取 RS232 传输缓冲区中有多少数据。一旦变为“0”,所有数据都已传输,我可以将控制引脚设置为 "read mode"
另一种方法是使用 FLOW CONTROL
为了清楚起见,我想在陈述我的问题之前解释一下我对流量控制的理解:
(1) 我通过 Python 将数据通过 usb
发送到 ftdi(2) ftdi需要在DTR线上写一个HIGH
(3) 在 DSR 线上接收到高电平时,它需要开始传输(假设我已禁用 rts/cts 流量控制设置)
(4) 发送完成后,需要在DTR线上写一个LOW标记发送结束
问题是我无法让 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 的路由选项。
ASKER 编辑:- 这个答案包含以下几点:-
1) 下载 MPROG 3.5 作为 FTDI 的编程器。
2) Select 来自任何 CBUS0 - CBUS4
的任意一个可编程引脚3) 然后在读取和解析后,将所选引脚更改为 TXDEN 并点击程序
4) 为 TXDEN
进行必要的硬件连接TXDEN 在 FTDI 发送数据之前为高电平并立即变低,因此符合我的目的