物奇WQ9101是集成 Wi-Fi和蓝牙子系统的双模芯片。支持 802.11a/b/g/n/ac/ax协议、2.4G+5G双频并发的 Wi-Fi子系统,以及支持Bluetooth 5.3协议的蓝牙子系统。主要应用于 电视、 平板电视、 平板PC、手机智能音箱等 、手机智能音箱等 、手机智能音箱等领域 。
一、平台信息
平台:触觉智能IDO-EVB3588-V1
Kernel版本:GNU/Linux 5.10.110 aarch64
系统版本:Ubuntu 20.04.6 LTS
搭载RK3588高性能SOC,集成了四核Cortex-A76和四核Cortex-A55 CPU,主频高达2.4G
二、硬件连接与识别
模组使用QOGRISYS的O9101UD模组焊在测试底板通过USB接口连接开发板。
上电后查询系统识别模组是否正常,使用dmesg查看上电打印或lsusb查看ID:
root@Industio:~# dmesg -c
[ 63.569616] usb 2-1.3: new high-speed USB device number 4 using ehci-platform
[ 63.703302] usb 2-1.3: New USB device found, idVendor=0ffe, idProduct=0002, bcdDevice= 1.01
[ 63.703315] usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 63.703321] usb 2-1.3: Product: WuQi USB Adapter
[ 63.703326] usb 2-1.3: Manufacturer: WuQi
[ 63.703334] usb 2-1.3: SerialNumber: 123456789
[ 63.718315] cdc_acm 2-1.3:1.4: ttyACM0: USB ACM device
root@Industio:~# lsusb
Bus 002 Device 004: ID 0ffe:0002
三、WiFi驱动的交叉编译与加载
我司针对WQ9101芯片做了两款型号模组,一款是O9101UB,一款是O9101UD,芯片是一样的,都是USB接口,只是外围封装、天线等略有不同,详情请查询模组规格书,WiFi驱动也略有不同,请找软件FAE获取对应模组的最新驱动。
1、WQ9101UD驱动交叉编译与加载
解压驱动 unzip WQ9101UD_8.2.0.v490_20241012.zip
解压后进入目录WQ9101UD_8.2.0.v490_20241012/host_driver/kiwi_dtop_drv
在usb/Makefile文件设置交叉编译环境如下
设置好后保存退出,在kiwi_dtop_drv目录下执行make进行编译,接着跳转到WQ9101UD_8.2.0.v490_20241012/host_driver/rwnx_drv目录,在Makefile设置交叉编译环境:
设置好后保存退出,在rwnx_drv目录下执行make进行编译,以上编译完毕后总共有两个ko文件:
./host_driver/kiwi_dtop_drv/usb/kiwidtop_usb.ko
./host_driver/rwnx_drv/fullmac/rwnx_fdrv.ko
将这两个ko文件拷贝至开发板上,并将驱动fw目录下的4个bin文件拷贝至开发板的firmware目录下,加载驱动使用如下命令:
而后使用ifconfig -a查看是否生成wlan节点
root@Industio:~/wq9101/9101UD# ifconfig -a
wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500ether 28:36:13:71:f1:3b txqueuelen 1000 (Ethernet)RX packets 14 bytes 2425 (2.4 KB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 61 bytes 6688 (6.6 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0wlan1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500ether 2a:36:13:71:f1:3b txqueuelen 1000 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2、O9101UB驱动交叉编译与加载
解压驱动 unzip WQ9101UB_8.2.0.445_20240904.zip
解压后进入目录WQ9101UB_8.2.0.445_20240904/kiwi_dtop_drv/kiwi_dtop_drv
在usb/Makefile文件设置交叉编译环境如下:
设置好后保存退出,在kiwi_dtop_drv目录下执行make进行编译,接着跳转到WQ9101UB_8.2.0.445_20240904/rwnx_drv目录,在Makefile设置交叉编译环境。
设置好后保存退出,在rwnx_drv目录下执行make进行编译,以上编译完毕后总共有两个ko文件
./kiwi_dtop_drv/kiwi_dtop_drv/usb/kiwidtop_usb.ko
./rwnx_drv/fullmac/rwnx_fdrv.ko
将这两个ko文件拷贝至开发板上,并将驱动fw目录下的4个bin文件拷贝至开发板的firmware目录下,加载驱动使用如下命令
而后使用ifconfig -a查看是否生成wlan节点
四、BT驱动的交叉编译与加载
WQ9101UB和WQ9101UD的蓝牙驱动是一样的
注意:加载蓝牙驱动之前必须先加载WiFi驱动!!!
解压蓝牙驱动unzip kiwi_bt_usb_drv.zip
解压后进入目录usb_bt_driver/kiwi_bt_drv/kiwi_bt_drv
在usb/Makefile文件设置kernel路径:
保存退出在kiwi_bt_drv目录下执行如下命令进行编译:
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- mod=usb
ARCH和CROSS_COMPILE根据实际情况输入,mod是指定蓝牙接口类型。
编译完生成驱动文件usb/kiwibt_usb.ko,将wq9101_fw_bt_1_2.bin拷贝到开发板firmware目录下,kiwibt_usb.ko拷贝到任意目录
加载驱动命令:
insmod kiwibt_usb.ko fw_name=wq9101_fw_bt_1_2.bin bt_dev_mode=1
而后使用hciconfig -a查看是否生成hci节点
root@Industio:~/wq9101/wq_usb_bt# insmod kiwibt_usb.ko fw_name=wq9101_fw_bt_1_2.bin bt_dev_mode=1
[ 4768.925663] [wq_bt_drv]:BT: Loading driver
[ 4768.925810] [wq_bt_drv]:WuQi Bluetooth USB driver
[ 4768.926048] [wq_bt_drv]:bt_usb_probe: intf 000000007c0b71df id 000000008d9e359f
[ 4768.926054] [wq_bt_drv]:usb_update_fw_name: wq9101_fw_bt_1_2.bin
[ 4768.926068] [wq_bt_drv]:bt_usb_probe: USB2.0 detected
[ 4768.926077] [wq_bt_drv]:VID/PID = 0x0FFE/0x0002, Boot2 version = 0x101
[ 4768.929166] [wq_bt_drv]:FW is not Active, Needs to be downloaded
[ 4768.929174] [wq_bt_drv]:BT: Driver loaded successfully
root@Industio:~/wq9101/wq_usb_bt#
root@Industio:~/wq9101/wq_usb_bt#
root@Industio:~/wq9101/wq_usb_bt# hciconfig -a
hci0: Type: Primary Bus: USBBD Address: 28:36:13:71:F1:47 ACL MTU: 1021:9 SCO MTU: 255:16UP RUNNING PSCAN RX bytes:0 acl:0 sco:0 events:62 errors:0TX bytes:0 acl:0 sco:0 commands:0 errors:0Features: 0xbf 0xee 0xcd 0xfe 0xdb 0xff 0x7b 0x87Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV3 Link policy: RSWITCH SNIFF Link mode: SLAVE ACCEPT Name: 'Industio'Class: 0x0c0000Service Classes: Rendering, CapturingDevice Class: Miscellaneous, HCI Version: (0xb) Revision: 0x5LMP Version: (0xb) Subversion: 0x5Manufacturer: not assigned (1902)root@Industio:~/wq9101/wq_usb_bt#
root@Industio:~/wq9101/wq_usb_bt# hciconfig hci0 piscan //设置蓝牙可被扫描可被连接属性
root@Industio:~/wq9101/wq_usb_bt#
root@Industio:~/wq9101/wq_usb_bt# hciconfig -a
hci0: Type: Primary Bus: USBBD Address: 28:36:13:71:F1:47 ACL MTU: 1021:9 SCO MTU: 255:16UP RUNNING PSCAN ISCAN RX bytes:0 acl:0 sco:0 events:67 errors:0TX bytes:0 acl:0 sco:0 commands:0 errors:0Features: 0xbf 0xee 0xcd 0xfe 0xdb 0xff 0x7b 0x87Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV3 Link policy: RSWITCH SNIFF Link mode: SLAVE ACCEPT Name: 'Industio'Class: 0x0c0000Service Classes: Rendering, CapturingDevice Class: Miscellaneous, HCI Version: (0xb) Revision: 0x5LMP Version: (0xb) Subversion: 0x5Manufacturer: not assigned (1902)
至此蓝牙工作正常,可使用bluez相关工具去操作蓝牙了。如果是安卓系统,驱动加载时就不需要后面的参数了,直接insmod kiwibt_usb.ko 即可,而后搭配bt_hal使用。