- 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/
我的问题特定于来自 FTDI 的库 libMPSSE,以便在 Linux 上使用 USB 到串行端口(SPI、I2C 等)适配器。 当我执行与库链接的任何程序时,调用 Init_libMPSSE()
我正在使用 Nodejs 对一些内容进行排序,然后将其发送到 FTDI,但我无法弄清楚如何执行此操作。 我尝试安装ftdi来自 npm,但它的安装脚本失败了,所以现在我想知道没有它怎么办(授人以渔)。
我正在尝试让 9 位串口与需要将第 9 位设置为高才能接收的设备进行通信(是的,我知道......)。 我正在使用一个非常标准的 USB-RS232 加密狗,里面有一个 FTDI 芯片,它似乎正在使用
4 使用 Raspian Wheezy 对 Raspberry Pi B 进行编程。我的 pi 有带有 FTDI usb/串行芯片 FT231X 的定制子板。我找到了这个设备的驱动程序 ( FTD2x
有没有办法连续读出或强制刷新 FTDI FT232R 的 RX fifo。我想为接收到的字节加上时间戳,因此想避免接收到的字节以 block 的形式发送。我想强制芯片在它们到达时通过 USB 发送它们
我有一个 FTDI 写入函数,当程序是 .net3.5 时它可以工作,但我一直在更新它,所以它现在可以在 .net 4.0 上运行,现在我的 FTDI 写入函数在输入后没有返回。 private FT
将 FTDI 设备连接到 USB 端口后,FT_OpenEx()返回错误代码 2,即 FT_DEVICE_NOT_FOUND .然而,在终端中运行“lsusb”时,FTDI 设备确实出现了。 是什么导
我想开发一个iOS应用程序,可以将iPhone中的串行数据发送到FTDI芯片-FT231X(vid: '0403', pid: '6015')。我一直在寻找这个解决方案一段时间,但找不到与我的问题相关
我正在尝试基本的 FTDI 编码,这里有一个简单的程序,应该能够从单个 FTDI 设备读取字节: #include "stdafx.h" #include "ftd2xx.h" #include #
是否有可能以某种方式将 FTDI 驱动程序包含在 py2exe 安装程序中?如果没有,是否有任何方法可以将两者结合在一个简单的安装程序中? 最佳答案 使用 py2exe 的 data_files 选项
我制作了一个 Android 应用程序,它通过 FTDI 230X 芯片与定制硬件进行通信。该应用程序工作正常并与连接的设备通信。但在某些手机/平板电脑上,Android 设备无法识别通过 OTG 连
我正在尝试将 USB 转串口驱动程序添加到我的 arch linux arm 设备,我注意到内核源代码树已经包含 FTDI 驱动程序的源文件,位于: drivers/usb/serial,存在ftdi
我尝试通过FT_Prog更改FTDI芯片(R232R)中的PID。它可以工作,但之后我发现 Windows 7 自动重新安装 USB 设备的驱动程序,而不是 FTDI 设备。所以我想将PID改回默认值
我需要用 C# 编写一个 FTDI 应用程序来与位于另一个站点的专用硬件交互。 当为 C# 应用程序使用 FTD2XX_NET.dll 包装器时,我收到: Failed to load FTD2XX.
我想更改 FTDI 芯片中的设备描述。为此,我首先定义 FT_PROGRAM_DATA ftData,调用 FT_EE_Read,修改字段 ftData.Description,最后调用 FT_EE_
我正在开发 V2DIP FTDI 板。刷新 USBHOSTHidKDB 等键盘固件后,我得到的键盘值如下: 0000040000000000 for 'a' key 0000050000000000
为了向外部设备发送命令,我使用了 FTDI 的 TTL-232R-3V3 线。我想在那里设定通往高或低的具体途径。不需要奇偶校验或停止位。 我的操作系统是 Ubuntu Linux 13.04。 我想
我正在尝试让 Matlab MEX 在 Linux 中运行。它使用 FTDI 的 D2XX 库 v1.3.6 ( Documentation )。 FT_CreateDeviceInfoList(&f
关于 FT_Write() 的问题功能。 FT_STATUS FT_Write (FT_HANDLE ftHandle, LPVOID lpBuffer, DWORD dwBytesToWrite,
我们有一个 FTDI 设备 FT2232H 和一个 EEPROM M93C46-WMN6TP。是否有使用命令行在 Linux 中对 eeprom 进行编程的实用程序或方法?我们没有提供 Linux 中
我是一名优秀的程序员,十分优秀!