如何在VCP模式下使用FTDI芯片?

时间:2013-04-23 18:29:59

标签: python linux usb ftdi

我正在尝试使用基于FT245RL芯片的SainSmart USB中继板,并且工作非常糟糕。我的印象是我可以从命令行控制继电器,例如:

echo -e -n "\xFF\x1\x1" > /dev/ttyUSB1

虽然设备是自动安装的,但我认为我已经设置了波特率和权限,我的Debian squeeze或CentOS 5机器上没有任何反应。 SainSmart的支持毫无价值。

我决定尝试使用Windows,所以我安装了驱动程序并在python中编写了一个小程序:

import serial
ser = serial.Serial(2) #COM3
ser.write(chr(255) + chr(0) + chr(1))
ser.close

仍然没有。也许这是一个硬件问题所以我安装了一个提供的Windows程序。当我点击继电器按钮时,它会看到设备并正常工作。气馁,我退出他们的程序,寻找我的错误(找不到任何),但无论如何尝试它,它的工作原理!我写了一个更大的程序来做各种很酷的事情和很酷的事情发生,直到我拔掉设备。当我重新插入时,没有任何作用。在代码执行任何操作之前,我必须运行并退出继电器控制程序。

我怀疑我必须对像FT_SetBitMode()这样的d2xx驱动程序做些什么。有没有办法只使用VCP模式? PyUSB不会安装在我的电脑上,也不适用于Linux。

我想要的只是一种使用python在Linux上控制中继的简单方法。

4 个答案:

答案 0 :(得分:1)

我建议您先试用hyperterminal

从您的代码段开始,您似乎缺少波特率(假设其余的将是默认值)。而且我真的不知道它是否重要,但我总是明确地将端口设置为Serial('COM3'),这样就少了一个失败点:)

答案 1 :(得分:1)

我遇到了同样的问题,我认为你对FT_SetBitMode()是正确的。最终我使用ftd2xx(你可以通过pip获得)来使用它。您还需要安装D2XX drivers

import ftd2xx
if ftd2xx.listDevices() < 1:
    print "No relays found. Exiting..."
    exit()
else: print "Initializing relays..."
relays = ftd2xx.open(0)
relays.setBitMode(255,1) # I think this uses FT_SetBitMode()
relays.write(b'\01\01')  # relay one on
relays.write(b'\01\01')  # relay two on
relays.write(b'\00\00')  # all relays off
relays.close()

答案 2 :(得分:0)

可能你没有Python的问题,但是控制设备就是这样。

您应该尝试查明设备是否对控制线的状态(DST,DTR等)有特殊要求。

并且,不要忘记,Alex already mentions的通信速度。

答案 3 :(得分:0)

在 Windows 上使用虚拟 com 端口我发现我必须使用 115k 波特