使用来自Raspberry Pi的Python的FTDI D2XX驱动程序使用rasppy soft-float

时间:2013-01-30 22:43:24

标签: python usb raspberry-pi ftdi raspbian

我们有一个由FTDI的D2XX驱动程序控制的USB设备。它目前通过Python界面从Windows机器控制,作为一个有趣的项目,我尝试将控件移动到Raspberry Pi(大约是PC成本的十分之一,不包括操作系统成本)。

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

首先,项目要求:

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

我下载了Wheezy发行版并使用Win32DiskImager写入4 GB SD卡。 Raspberry Pi启动时没有任何问题。然后我解压缩了D2XX库(libftd2xx.so)并将其安装到/usr/local/lib

PyUSB(1.6)目前仅针对Windows进行测试,但它们提供了源代码。编译Raspberry Pi的副本非常简单。基本上,修改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。我有第一个问题的线索:D2XX库是使用soft-float构建的,我的Wheezy发行版配置为使用浮点寄存器。也就是说,我系统上的gcc生成的代码与D2XX库不兼容,并且不允许它们链接到。

为了解决这个问题,我下载了soft-float debian "wheezy" distribution(2012-08-08)并写入4 GB SD卡。这次图像无法启动。环顾四周后,我找到了helpful answer。简而言之,软浮动的启动映像存在问题,因此对于某些Raspberry Pi板,它将无法启动。解决方案是将软浮点分布上的start.elf文件替换为有效的例子。来自硬浮Raspbian图像的副本。幸运的是,SD卡有两个分区:FAT 1和ext3(?)。启动映像在FAT分区上,因此将硬浮SD卡弹出到Windows框中,复制start.elf文件,弹出软浮SD卡并用硬盘更新它的start.elf是微不足道的。 - 浮动一个。之后,Raspberry Pi启动没问题。

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

2 个答案:

答案 0 :(得分:3)

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

使用FTDI软件包进行release/examples/EEPROM/read下的测试。你必须构建它,但这只是输入make的问题。运行它(通过sudo),它无法打开USB设备,所以很明显它不是PyUSB。在探索之后,我找到了对驱动程序ftdi_sio的引用,并且它可能与其他D2XX驱动程序冲突。所以,使用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,但并不是绝对必要的。

答案 1 :(得分:1)

有一个特殊版本的libftd2xx 1.1.12修复了Raspberry pi上的问题。这可能会解决你的问题。

我忘记了发现它的位置,但我的网站下载页面上有一份副本Lightput Download page