- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们有一个由 FTDI 的 D2XX 驱动程序控制的 USB 设备。它目前通过 Python 界面从 Windows 机器进行控制,作为一个有趣的项目,我尝试将控制转移到 Raspberry Pi(大约是 PC 成本的 1/10,不包括操作系统成本)。
有许多障碍需要清除,但几周后我终于找到了所有的答案并让它发挥作用。答案分布在多个论坛上,为了感谢 Stack Overflow 社区,我想我应该将它们合并在这里。
一、项目要求:
我下载了 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)。将 FTDI D2XX 驱动程序下载(在发行版中)目录中的 WinTypes.h 和 ftd2xx.h 复制到 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 .简而言之,soft-float 的启动镜像存在问题,因此对于某些 Raspberry Pi 板,它无法启动。解决方案是将 soft-float 发行版上的 start.elf 文件替换为可以正常工作的文件,例如来自 hard-float Raspbian 图像的副本。幸运的是,SD 卡有两个分区:一个 FAT 分区和一个 ext3(?) 分区。引导镜像位于 FAT 分区上,因此将硬 float SD 卡放入 Windows 盒中,复制 start.elf 文件,放入软 float SD 卡并使用硬 float 更新其 start.elf 是微不足道的- float 一个。之后树莓派就可以正常启动了。
安装 FTDI 的 D2XX 驱动程序并从 PyUSB 构建 d2xx Python 模块后,我再次尝试了测试脚本。又失败了。 d2xx 模块可以毫无问题地读取 libftd2xx.so 库,但由于某种原因无法与设备通信。
最佳答案
我不确定问题出在哪里:是 PyUSB、FTDI 的 libftd2xx.so 问题还是 Debian 发行版的问题?
对于 FTDI 包,在 release/examples/EEPROM/read
下有一个测试。您必须构建它,但这只是键入 make 的问题。运行它(通过 sudo),它无法打开 USB 设备,很明显它不是 PyUSB。在四处寻找之后,我发现了对驱动程序 ftdi_sio 的引用,它可能与其他 D2XX 驱动程序冲突。所以,使用 lsmod ,我看到默认情况下已经安装了 ftdi_sio,所以我运行了 rmmod ftdi_sio
。之后,一切正常。读取命令应显示如下内容:
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,但并非绝对必要。
关于python - 在 raspbian soft-float 上使用来自 Raspberry Pi 的 Python 的 FTDI D2XX 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14615308/
我有一个 RaspberryPi3 连接到 Adafruit MPL3115A2通过 I2C 总线。我有最新版本的Raspbian Jessie今天下载了。我唯一做的就是运行 sudo rasp-co
我刚刚开始使用我的 RP3 作为我的开发箱,并且一切正常:Python 3.6,创建 venv,安装 posgresql,使用 Django。一切都很好。除此之外,如果我想使用 Heroku,他们的
我正在我的 RaspberryPi 3 Model B 上从源代码编译 ArangoDB 3.2.3。我正在从这里调整构建过程:https://docs.arangodb.com/3.1/cookbo
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我正在尝试创建一个通用时钟框架设备驱动程序。我的测试环境是一个 Raspberry Pi 3,它连接到一个带有时钟芯片的评估板上(通过 I2C)。现在我只是想了解设备树并弄清楚如何修改它以包含现有时钟
不幸的是,我完全不了解 Linux。我有一些需要在后台运行的 PYTHON 脚本。我创建了一个运行它们的简单脚本: #!/bin/bash # Script to start all custom a
我正在运行python代码来进行某些Web抓取,这意味着该代码有时会将数据写入(附加)到文本文件中。有时代码只会冻结,但Shell中不会显示任何错误消息。 我想知道这是否更有可能是因为raspbian
我有一个运行 Pixel raspbian 的 Raspberry pi 2 B。我需要它在启动时自动运行以下命令,这将在 chromium 中打开一个 HTML 文件: chromium-brows
我有一个在虚拟机内运行的 Windows 服务器,并尝试从配置为可以访问虚拟机网络的 raspberry pi 3 访问它。 问题是,当我使用 IP 来ping服务器时,它会响应,但是当我使用名称(在
我已经创建了一个 python 脚本。我设置为守护进程。 当我手动启动时,它工作正常: service testMotor start 效果很好!很酷。 然后我想让它在启动时运行。我按照给出的提示 h
我在 raspbian (Raspberry Pi 2) 上遇到 mongodb 问题。当我启动系统时,默认情况下mongo服务在后台运行。我可以在本地使用 shell,但我无法从本地网络或外部网络连
我使用以下配置从源代码安装了 bluez-5.15: $ ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc \ -
我编写了这个服务,它使用 node.js 运行 TCP 服务器,将数据从微 Controller 传输到 mysql 服务器。 root@DietPi:~# sudo cat /lib/systemd
我正在使用 PyGObject 创建一个 UI,它将在连接到运行 Raspbian 的 Pi 3 的 7"官方 RPi 触摸屏上运行。作为此界面的一部分,UI 需要一个屏幕键盘。我知道有两个虚拟键盘P
我不是Python的专家,试图通过USB音频设备捕获/记录音频。 在命令终端上工作正常。 但是我想制作一个只录制音频并在需要时停止的程序。 我听说过ab8 Pyaudio库,该库具有某些API来执行此
我正在尝试在树莓派3上旋转一个容器。该容器具有一个MySQL服务器,当我尝试旋转时会给我带来一些麻烦。 $ docker-compose up > /dev/null & $ Building mys
我对 linux 上的设备驱动程序比较陌生。 我想要实现的是,在我的 Raspberry 启动时,外部 RGB 驱动程序将接收 i2c 命令,因此您可以在启动时看到 LED 亮起。 我的方法是尝试通过
我在树莓派上安装了 raspbian jessie。我试图将 iceweasel 网络浏览器配置为在启动时启动。 在/etc/xdg/lxsession/LXDE-pi/autostart 下已经配置
我找不到在 shell 脚本中使用 omxplayer 以随机“随机播放”顺序播放文件夹中视频的方法。我希望它循环播放“播放列表”,但到目前为止,我只能找到一种方法来循环播放按字母顺序排列的所有文件夹
我目前在我的树莓派上使用 wordpress。就在最近,我试图连接到 apache 网络服务器,但遇到了一个有趣的错误。 建立数据库连接时出错。 所以我四处搜索并摆弄我的树莓派,发现 mysql 服务
我是一名优秀的程序员,十分优秀!