首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在raspbian软浮点上使用Raspberry Pi的FTDI D2XX驱动程序

在raspbian软浮点上使用Raspberry Pi的FTDI D2XX驱动程序
EN

Stack Overflow用户
提问于 2013-01-30 22:43:24
回答 2查看 24.8K关注 0票数 6

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

有许多障碍需要克服,但几周后,我终于找到了所有的答案,并使它发挥作用。答案分散在几个论坛上,因此作为对Stack溢出社区的感谢,我想我应该在这里合并它们。

首先,该项目要求:

  • 操作系统:我从树莓Pi网页上获得了最新的树莓Pi网页 Raspbian (硬浮点2012-12-16)。这包括Python。
  • 与我们的FTDI设备通话的FTDI D2XX驱动程序
  • D2XX驱动程序的Python接口。我用了PyUSB
  • 我们的Python脚本

我下载了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运行。

代码语言:javascript
运行
复制
import d2xx
jd = d2xx.open(0)
pd = jd.eeRead()
print pd

d2xx模块似乎找不到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库没有问题,但出于某种原因,无法与设备对话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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命令应该显示如下所示:

代码语言:javascript
运行
复制
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,但严格来说并不是必要的。

票数 4
EN

Stack Overflow用户

发布于 2013-01-31 19:50:45

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

我忘了我在哪里找到了它,但是我在我的网站Lightput下载页面的下载页面上有一份拷贝。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14615308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档