我们有一个由FTDI的D2XX驱动程序控制的USB设备。它目前是通过Python界面从Windows机器上控制的,作为一个有趣的项目,我尝试将控件移动到Raspberry Pi (大约是PC成本的十分之一,不包括操作系统成本)。
有许多障碍需要克服,但几周后,我终于找到了所有的答案,并使它发挥作用。答案分散在几个论坛上,因此作为对Stack溢出社区的感谢,我想我应该在这里合并它们。
首先,该项目要求:
我下载了Wheezy发行版,并使用Win32DiskImager编写了一个4 GB的SD卡。树莓派没有问题地启动。然后我解压缩D2XX库(libftd2xx.so)并将其安装到/usr/local/lib中。
PyUSB (1.6)目前只在Windows上进行测试,但它们提供了源代码。为Raspberry Pi编译一个副本非常简单。基本上,修改setup.py以链接到libftd2xx.so库(不需要复制它)。还编辑D2XX/_d2x.c来注释没有Linux实现的例程(当前是ftobj_Rescan、ftobj_Reload ftobj_GetComPortNumber)。将WinTypes.h和ftd2xx.h从FTDI D2XX驱动程序下载(在发布版中)目录中复制到ftdi- will 32,并运行python setup.py install,它将编译和安装Python模块。
完成所有这些工作后,我编写了一个简单的Python脚本来与FTDI芯片对话。注意,您需要通过sudo运行。
import d2xx
jd = d2xx.open(0)
pd = jd.eeRead()
print pdd2xx模块似乎找不到libftd2xx.so文件。因此,我调整了setup.py脚本以链接到库libftd2x.a的静态副本。瞧,我对这个问题有了第一条线索: D2XX库是使用软浮点数构建的,而我的Wheezy发行版被配置为使用浮点寄存器。也就是说,我的系统上的gcc生成了与D2XX库不兼容的二进制代码,不允许将它们链接到。
为了解决这个问题,我下载了软浮子debian“喘息”分布 (2012-08-08),并写信给4 GB SD卡。这一次,映像将无法启动。环顾四周后,我发现了这个有用的答案。简而言之,软浮子的引导映像有一个问题,所以对于一些树莓Pi板,它不会启动。解决方案是将软浮点数发行版上的start.elf文件替换为一个确实有效的文件,例如,从硬浮点Raspbian映像复制的文件。幸运的是,SD卡有两个分区: FAT和ext3(?)一。引导映像位于FAT分区上,因此将硬浮动SD卡弹出到Windows框中、复制start.elf文件、弹出软浮动SD卡并使用硬浮动SD卡更新其start.elf是非常简单的。在那之后,树莓派启动没有问题。
在安装了FTDI的D2XX驱动程序并从PyUSB构建了d2xx Python模块之后,我再次尝试了测试脚本。它又失败了。d2xx模块可以读取libftd2xx.so库没有问题,但出于某种原因,无法与设备对话。
发布于 2013-01-30 22:56:17
我不知道问题在哪里:是PyUSB,FTDI的libftd2xx.so问题,还是Debian发行版的问题?
对于FTDI包,在release/examples/EEPROM/read下有一个测试。您必须构建它,但这只是键入make的问题。运行它(通过sudo),它未能打开USB设备,所以很明显它不是PyUSB。在浏览了一下之后,我发现了一个对驱动程序ftdi_sio的引用,它可能与其他D2XX驱动程序发生冲突。因此,使用伊默德,我看到默认情况下已经安装了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,但严格来说并不是必要的。
发布于 2013-01-31 19:50:45
有一个特殊版本的libftd2xx 1.1.12修复了Raspberry pi上的问题。这可能会解决你的问题。
我忘了我在哪里找到了它,但是我在我的网站Lightput下载页面的下载页面上有一份拷贝。
https://stackoverflow.com/questions/14615308
复制相似问题