我正在尝试让Matlab MEX在Linux中运行。它使用 FTDI 的 D2XX 库 v1.3.6(文档(。
FT_CreateDeviceInfoList(&ftdi_count)
给了我一个ftdi_count
1,所以检测到 FTDI 芯片。
但是,当从FT_GetDeviceInfoList(device_list, &ftdi_count)
遍历设备列表时,我的FT_DEVICE_LIST_INFO_NODE
结构都是零,所以显然代码找不到具有它正在寻找的描述的设备:
(gdb) p *p_device
$3 = {Flags = 1, Type = 3, ID = 0, LocId = 0, SerialNumber = ' 00' <repeats 15 times>,
Description = ' 00' <repeats 63 times>, ftHandle = 0x0}
我的第一个猜测是 udev 没有设置。但问题仍然存在
SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}="6014", MODE="0666"
lsusb -v
有权访问以下值:
Bus 001 Device 012: ID 0403:6014 Future Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0403 Future Technology Devices International, Ltd
idProduct 0x6014 FT232H Single HS USB-UART/FIFO IC
bcdDevice 9.00
iManufacturer 1 FTDI
iProduct 2 [company that provided me with their] Kit v3
iSerial 3 FT266WVA
bNumConfigurations 1
[...]
我该怎么做才能使 FTDI 功能正常工作?
问题是 Linux 会自动加载 VCP 驱动程序 ( ftdi_sio
(。
在问题如何获取具有FTDI D2XX驱动程序API的Linux设备中,Akira展示了一个udev脚本,以从A博客卸载该驱动程序。我修改了它以与我的FT232H芯片配合使用,该芯片只有一个端口:
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", RUN+="/bin/sh -c 'echo -n $kernel:1.0 > /sys/bus/usb/drivers/ftdi_sio/unbind;'"