WQ9101 WIFI6模组移植实操

物奇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使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/474617.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

领海基点的重要性-以黄岩岛(民主礁)的领海及专属经济区时空构建为例

目录 前言 一、Turf.js缓冲区绘制 1、缓冲区分析介绍 2、缓冲区参数 3、Mask多边形空洞 4、Mask参数 二、领海基点、领海的WebGIS展示 1、领海基点的绘制 2、领海面的绘制 三、毗邻区和专属经济区绘制 1、毗邻区的绘制 2、专属经济区的绘制 四、总结 前言 在上一篇的…

【Pythonr入门第二讲】你好,世界

"Hello, World!" 是一种传统的编程入门示例&#xff0c;通常是程序员学习一门新编程语言时编写的第一个程序。这个程序的目标非常简单&#xff1a;在屏幕上输出 "Hello, World!" 这个字符串。尽管它非常简单&#xff0c;但具有重要的象征意义和实际价值。 …

25.UE5时间膨胀,慢动作,切换地图,刷BOSS

2-27 时间膨胀、慢动作、切换地图、刷BOSS_哔哩哔哩_bilibili 目录 1.刷新BOSS逻辑 2.时间膨胀实现慢动作 3.胜利画面&#xff0c;下一关 3.1胜利画面UI 3.2第一关、第二关游戏模式 3.3下一关按钮事件的绑定 1.刷新BOSS逻辑 实现当场上的怪物都死亡后&#xff0c;进行刷…

探索Python PDF处理的奥秘:pdfrw库揭秘

文章目录 探索Python PDF处理的奥秘&#xff1a;pdfrw库揭秘1. 背景&#xff1a;为何选择pdfrw&#xff1f;2. pdfrw是什么&#xff1f;3. 如何安装pdfrw&#xff1f;4. 五个简单的库函数使用方法4.1 读取PDF信息4.2 修改PDF元数据4.3 旋转PDF页面4.4 提取PDF中的图片4.5 合并P…

游戏引擎学习第19天

介绍 这段内容描述了开发者在进行游戏开发时&#xff0c;对于音频同步和平台层的理解和调整的过程。以下是更详细的复述&#xff1a; 开发者表达了他希望今天继续进行的工作内容。他提到&#xff0c;昨天他讲解了一些关于音频的内容&#xff0c;今天他想稍微深入讲解一下他正…

【初阶数据结构与算法】线性表之栈和队列的定义与实现(含源码和有效的括号练习)

文章目录 一、栈的概念与结构1.栈的概念与操作2.栈的底层结构选型 二、栈的实现1.栈结构的定义2. 栈的初始化和销毁栈的初始化栈的销毁 3.栈的扩容与入栈栈的扩容入栈 4.判断栈是否为空和出栈判断栈是否为空出栈 5.取栈顶元素和获取栈中有效元素个数取栈顶元素获取栈中有效元素…

详细分析ipvsadm负载均衡的命令

目录 前言1. 基本知识2. 命令参数3. 拓展 前言 LVS四层负载均衡架构详解Lvs推荐阅读&#xff1a;添加链接描述 1. 基本知识 ipvsadm 是用于管理和配置 Linux 服务器上 IP Virtual Server (IPVS) 的工具&#xff0c;是 Linux 提供的一个负载均衡模块&#xff0c;支持多种负载…

小程序-基于java+SpringBoot+Vue的小区服务管理系统设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

苹果ASA归因对接以及API接入

一、归因概要 广告归因&#xff0c;目的是用于衡量广告带来的激活用户的成本以及后续进一步的用户质量表现。 Apple Ads 广告平台是基于 App Store&#xff08;站内广告&#xff09;&#xff0c;同时属于自归因平台&#xff08;通常称为 SAN&#xff09;。这两个因素&#xff…

内容占位符:Kinetic Loader HTML+CSS 使用CSS制作三角形原理

内容占位符 前言 随着我们对HTML和CSS3的学习逐渐深入&#xff0c;相信大家都已经掌握了网页制作的基础知识&#xff0c;包括如何使用HTML标记构建网页结构&#xff0c;以及如何运用CSS样式美化页面。为了进一步巩固和熟练这些技能&#xff0c;今天我们一起来完成一个有趣且实…

【金融风控项目-08】:特征构造

文章目录 1.数据准备1.1 风控建模特征数据1.2 人行征信数据1.3 据之间的内在逻辑 2 样本设计和特征框架2.1 定义观察期样本2.2 数据EDA(Explore Data Analysis)2.3 梳理特征框架 3 特征构造3.1 静态信息和时间截面特征3.2 未来信息问题3.2.1 未来信息案例3.2.2 时间序列特征的未…

Linux网络:HTTPS协议

Linux网络&#xff1a;HTTPS协议 加密方式对称加密非对称加密混合加密中间人攻击 证书数据签名CA认证 HTTPSSSL/TSLHTTPS 在HTTP协议中&#xff0c;所有的数据都采用明文的形式传输&#xff0c;这就会导致数据非常容易泄露&#xff0c;只要拿到HTTP报文&#xff0c;就可以窃取各…

Redis配置主从架构、集群架构模式 redis主从架构配置 redis主从配置 redis主从架构 redis集群配置

Redis配置主从架构、集群架构模式 redis主从架构配置 redis主从配置 redis主从架构 redis集群配置 1、主从模式1.1、主节点配置1.2、从节点配置1.3、测试 2、集群模式 1、主从模式 1.1、主节点配置 # 监听所有网络接口 bind 0.0.0.0# cluster-enabled表示为集群模式&#xff…

柔性仿人手指全覆盖磁皮肤,具备接触觉和运动觉的双模态感知能力

人体精细触觉和本体运动觉依赖于相同类型的感受器&#xff0c;这些感受器位于肌肉、肌腱、关节和皮肤中&#xff0c;负责感知轻触、挠痒、细微压力、形状变化、肌肉张力、肌腱拉伸和关节位置变化等信息。因此方斌教授团队着手于具有高精度、小尺寸、可定制等优势的磁触觉传感器…

【蓝桥杯C/C++】I/O优化技巧:cin.tie(nullptr)的详解与应用

文章目录 &#x1f4af;前言&#x1f4af;I/O流的基本概念&#x1f4af;cin.tie(nullptr)使用场景底层机制与ios::sync_with_stdio(false) 的搭配使用手动刷新输出流 &#x1f4af;使用示例和性能对比示例代码 &#x1f4af;常见误区和注意事项进一步优化&#xff1a;快速输入输…

字节青训-判断数组是否单调、判断回旋镖的存在、字符串解码问题、小F的矩阵值调整、数字字符串中圆圈的数量计算 、小Q的非素数和排列问题

目录 一、判断数组是否单调 问题描述 测试样例 解题思路&#xff1a; 解题思路 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; ​编辑 二、判断回旋镖的存在 问题描述 测试样例 解题思路&#xff1a; 解题思路 算法步骤 最终代码&#xff…

ArkTS组件结构和状态管理

1. 认识基本的组件结构 ArkTS通过装饰器Component 和Entry 装饰 struct 关键字声明的数据结构&#xff0c;构成一个自定义组件 自定义组件中提供了一个build函数&#xff0c;开发者需要在函数内以链式调用的方式进行基本的UI描述&#xff0c;UI描述的方法请参考UI描述规范srtuc…

14. 乘法口诀挑战赛

文章目录 概要整体架构流程技术细节小结 1. 概要 ~ Jack Qiao对米粒说&#xff1a;“为了帮助孩子们更好地学习乘法&#xff0c;智慧镇的镇长决定举办一场特别的活动——“乘法口诀挑战赛”。比赛的规则非常简单&#xff1a;参与者需要输入一个正整数 n&#xff0c;然后系统会…

环形缓冲区 之 STM32 串口接收的实现

STM32串口数据接收环形缓冲区接收实例说明 ...... 矜辰所致前言 关于环形缓冲区&#xff0c;网上有大量的理论说明文章&#xff0c;在有些操作系统中&#xff0c;会有实现环形缓冲区的代码&#xff0c;比如 RT-Thread 的 ringbuffer.c 和 ringbuffer.h 文件&#xff0c;Li…

Matplotlib | 理解直方图中bins表示的数据含义

引出问题 hist作图中 bins 发生变换 y轴的数据也变化 想不通 不是说y轴计算的是频率吗 频率既然是定值 为什么y轴的数据就还会变化&#xff1f;那我确定了bins的数值 我想获得bins内各个柱子&#xff08;bin&#xff09;中数据点的数量如何获得 bins的变化 先看一组数据 da…