使用FTDI D2XX驱动程序和raspbian s上Raspberry Pi的Python

2024-05-17 06:25:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一个由FTDI的D2XX驱动程序控制的USB设备。它目前是通过一个Python接口从Windows机器上控制的,作为一个有趣的项目,我试着将控件移到一个树莓Pi(大约是PC成本的1/10,不包括操作系统成本)。

有许多障碍需要清除,但几周后,我终于找到了所有的答案,并让它发挥作用。答案被散布在几个论坛上,作为对Stack Overflow社区的感谢,我想我会把它们整合在这里。

首先,项目要求:

  • 一个操作系统:我从Raspberry Pi webpage中获取了最新的"Wheezy"Raspbian(硬浮点2012-12-16)。这包括Python。
  • 与我们的FTDI设备通话的FTDI D2XX drivers
  • D2XX驱动程序的Python接口。我用了PyUSB
  • 我们的Python脚本

我下载了喘息分发版,并使用Win32DiskImager写入4gb的SD卡。覆盆子皮没有问题。然后我解包了D2XX库(libftd2xx.so),并将其安装到/usr/local/lib

PyUSB(1.6)目前只在Windows上测试,但它们提供了源代码。为覆盆子皮编译一个副本非常简单。基本上,修改setup.py以链接到libftd2xx.so库(无需复制)。还可以编辑d2xx/_d2xx.c来注释掉没有Linux实现的例程(当前是ftobj_Rescan,ftobj_Reload ftobj_GetComPortNumber)。将WinTypes.h和ftd2xx.h从FTDI D2XX驱动程序下载目录(在发行版中)复制到FTDI-win32中,并运行python setup.py install,这将编译并安装Python模块。

完成所有这些之后,我编写了一个简单的Python脚本来与FTDI芯片对话。注意您需要通过sudo运行。

import d2xx
jd = d2xx.open(0)
pd = jd.eeRead()
print pd

d2xx模块似乎找不到libftd2xx.so文件。所以,我调整了setup.py脚本以链接到库的静态副本libftd2xx.a.Voila,我得到了问题的第一个线索:D2XX库是使用软浮点构建的,而我的喘息分布被配置为使用浮点寄存器。也就是说,我系统上的gcc生成的代码与d2x库的二进制不兼容,并且不允许链接到它们。

为了解决这个问题,我下载了soft-float debian "wheezy" distribution(2012-08-08)并写入了4gb的SD卡。这次映像无法启动。环顾四周,我发现了这个helpful answer。简而言之,软浮动的启动映像有问题,因此对于一些覆盆子Pi板,它不会启动。解决方案是将软浮点发行版上的start.elf文件替换为一个有效的文件,例如从硬浮点Raspbian图像复制。幸运的是,SD卡有两个分区:胖分区和ext3(?)一个。启动映像位于胖分区上,因此将硬浮动SD卡弹出到Windows框中、复制start.elf文件、弹出软浮动SD卡并用硬浮动SD卡更新其start.elf是很简单的。之后,覆盆子皮启动没有问题。

在安装了FTDI的d2x驱动程序并从PyUSB构建了d2xpython模块之后,我再次尝试测试脚本。又失败了。d2xx模块可以读取libftd2xx。因此库没有问题,但由于某种原因,无法与设备通信。


Tags: 模块文件脚本覆盆子sowindows驱动程序pi
2条回答

我不确定问题出在哪里:是PyUSB,FTDI的libftd2xx.so的问题,还是Debian发行版的问题?

对于FTDI包,在release/examples/EEPROM/read下有一个测试。你必须建立它,但那只是一个简单的问题,键入make。运行它(通过sudo),它无法打开USB设备,所以很明显它不是PyUSB。在四处寻找之后,我找到了一个司机的参考,ftdi_-sio,它可能与其他d2x司机冲突。所以,使用lsmod,我看到默认情况下已经安装了ftdi_sio,所以我运行了rmmod ftdi_sio。之后,一切顺利。read命令应该显示如下内容:

Library version = 0x10112
Opening port 0
FT_Open succeeded.  Handle is 0xf7d240
FT_GetDeviceInfo succeeded.  Device is type 4.
FT_EE_Read succeeded.
Signature1 = 0
Signature2 = -1
Version = 1
VendorId = 0x0407
ProductId = 0x6009
Manufacturer = MagicIncorporated
ManufacturerId = wo
Description = MyCompany Test Board
SerialNumber = testit_028
MaxPower = 44
PnP = 1
SelfPowered = 0
RemoteWakeup = 1
2232RC:
-------
    Rev5 = 0x1
    IsoInA = 0x0
    IsoInB = 0x0
    IsoOutA = 0x0
    IsoOutB = 0x0
    PullDownEnable5 = 0x0
    SerNumEnable5 = 0x0
    USBVersionEnable5 = 0x0
    USBVersion5 = 0x110
    AIsHighCurrent = 0x0
    BIsHighCurrent = 0x0
    IFAIsFifo = 0x0
    IFAIsFifoTar = 0x0
    IFAIsFastSer = 0x0
    AIsVCP = 0x0
    IFBIsFifo = 0x0
    IFBIsFifoTar = 0x0
    IFBIsFastSer = 0x0
    BIsVCP = 0x0
Returning 0

我也从PyUSB切换到了ftd2xx,因为它是纯python,但并不是绝对必要的。

libftd2xx 1.1.12的一个特殊版本修复了覆盆子pi上的问题。那可能会解决你的问题。

我忘了在哪儿找到的,但我在网站的下载页上有一个副本,Lightput Download page

相关问题 更多 >