目录
1. VCP驱动和D2XX驱动的区别
2. 使用VCP驱动
3. 卸载VCP驱动
4. 安装D2XX驱动
5. 本地编译和运行D2XX例程
6. 交叉编译
7. 打包库
1. VCP驱动和D2XX驱动的区别
VCP是Virtual COM Port的简称,VCP驱动是通用的虚拟串口驱动,一般系统是内嵌此驱动。D2XX驱动是FTDI为其USB桥接芯片设计的驱动程序,可以提供更多的USB虚拟设备支持(即FTDI独有的MPSSE功能),例如USB转SPI,USB转I2C等。
2. 使用VCP驱动
2.1 打开终端,输入dmesg | grep FTDI(当前插入的FT4232H的平台,4路串口)
2.2 minicom
在终端中输入 : sudo apt-get install minicom
执行minicom:sudo minicom
按键CTRL + A,再按键Z:进入帮助界面
按键O:进入配置minicom
选择“Serial port setup”: 进入串口设置,设置对应的串口参数
可以保存为默认设置:选择“Save setup as dfl”
快速打开对应串口的方法: sudo minicom -D /dev/ttyUSB0
2.3 LOOP测试
将FT4232H的第一个串口的TXD和RXD短接,然后在minicom界面打字就可以看到接收到的数据(因为是Loop测试,所以输入什么字符串就接收到什么字符串)
3. 卸载VCP驱动
在Linux系统中,VCP驱动和D2XX驱动是不兼容的,所以如果要使用D2XX驱动,需要先卸载VCP驱动。
sudo rmmod ftdi_sio
sudo rmmod usbserial
当FTDI的设备重新插入或者复位后,VCP驱动又会加载,所以需要再次卸载VCP。
4. 安装D2XX驱动
下载对应平台系统的D2XX驱动。
4.1 本地编译
拷贝库文件到/usr/local/lib
sudo cp -r lib* /usr/local/lib
进入这个文件夹内,进入终端link库和修改权限(注意版本号和下载的D2XX版本号要一致)。
sudo ln –s libftd2xx.so.1.4.24 libftd2xx.so
sudo chmod 0755 libftd2xx.so.1.4.24
链接用于选择默认驱动程序文件。通过使用版本编号的库文件,可以将任何程序链接到库的特定版本。
4.2 交叉编译
和本地编译类似,将对应的库文件拷贝到交叉编辑器所在的库文件夹内即可,然后进入这个文件夹内,使用终端link库和修改权限,和本地编译一样。
5. 本地编译和运行D2XX例程
D2XX包括动态库(.so)和静态库(.a)。
之前下载的D2XX文件夹中有一个Examples的文件夹,进入这个文件夹,在终端中执行
make –B
编译OK后进入可以进入其中一个例程运行,例如Bitmode
sudo ./bitmode_static
注意,这里有一个VirutalBox的问题,当VB设置为1个CPU 的时候,运行例程会提示错误,可以把CPU改为2个既可以运行成功。
运行结果:
Device 0 Serial Number - FT2U6WIKA
Device 1 Serial Number - FT2U6WIKB
Device 2 Serial Number - FT2U6WIKC
Device 3 Serial Number - FT2U6WIKD
Opened device FT2U6WIKA
FT_Read read 16 bytes
Opened device FT2U6WIKB
还有记得每次要卸载VCP驱动。
6. 交叉编译
6.1 下载对应的交叉编译器
例如对应的交叉编译器为:
gcc-linaro-10.2.1-2021.02-x86_64_aarch64-linux-gnu
6.2 下载对应的d2xx
根据平台信息下载对应的d2xx库,例如ARMv8
6.3 配置环境变量PATH
将编译器的路径添加到PATH,例如编辑器在work文件夹内
编辑器的路径:/work/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin
用管理员打开gedit(sudo gedit),然后再打开/etc/bash.bashrc,在最后添加
export PATH=$PATH:/work/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin
在终端运行对应的gcc确认是否设置OK
aarch64-linux-gnu-gcc -v
也可以运行
echo $PATH
查看PATH的路径是否正确。
6.4 库拷贝
将之前下载的d2xx库里面libftd2xx-arm-v8-1.4.24/release/build/文件夹下的所有文件拷贝到编译器的库路径内,然后在这个路径内终端中执行
sudo ln –s libftd2xx.so.1.4.24 libftd2xx.so
sudo chmod 0755 libftd2xx.so.1.4.24
6.5 修改Rules.make
d2xx库里面examples文件夹下有一个Rules.make文件,编辑这个文件。
6.5.1 增加CC变量
在文件前面添加
CC = aarch64-linux-gnu-gcc
6.5.2 更改库路径
文件中LINKER_OPTIONS和CFLAGS中默认的路径是/usr/local/lib,改成编译器的库路径
ifeq ($(CC), gcc)
LINKER_OPTIONS := -Wl,-rpath /usr/local/lib
CFLAGS = -Wall -Wextra $(DEPENDENCIES) $(LINKER_OPTIONS) -L/usr/local/lib
DYNAMIC_LINK_OPTIONS := -Wl,-rpath /usr/local/lib
endif
ifeq ($(CC), aarch64-linux-gnu-gcc)
LINKER_OPTIONS := -Wl,-rpath /work/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/lib
CFLAGS = -Wall -Wextra $(DEPENDENCIES) $(LINKER_OPTIONS) -L/work/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/lib
DYNAMIC_LINK_OPTIONS := -Wl,-rpath -L/work/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/lib
endif
6.6 (可选)修改make文件
有些例子可能会出现编译错误,一些是没有包含Rules.make文件,例如BitMode中的make文件
#TOPDIR := $(shell cd ..; pwd)
#include $(TOPDIR)/Rules.make
这2句被注释掉了,可以打开,然后把DYNAMIC_LINK_OPTIONS注释掉。
7. 打包库
某些情况下可能会需要通过库压缩包中o文件打包自己的库
在库文件夹/release/build/下新建一个makefile文件,使用文本编辑器添加
OBJS_USB = ./libusb/libusb/*.o
OBJS_OS = ./libusb/libusb/os/*.o
OBJS_D2XX = ./libftd2xx/*.o
OBJS_EEPROM = ./libftd2xx/EEPROM/*.o
CC = aarch64-linux-gnu-gcc
AR = aarch64-linux-gnu-ar
all: lib_dynamic lib_static
lib_dynamic:
$(CC) -shared -fpic -o ./libftd2xx_new.so $(OBJS_USB) $(OBJS_OS) $(OBJS_D2XX) $(OBJS_EEPROM)
lib_static:
$(AR) crv libftd2xx_new.a $(OBJS_USB) $(OBJS_OS) $(OBJS_D2XX) $(OBJS_EEPROM)