WIFI6 2.4G模组 AIC8800DC移植和替换RTL8723 AP6212过程记录

2024-02-02 01:59

本文主要是介绍WIFI6 2.4G模组 AIC8800DC移植和替换RTL8723 AP6212过程记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(文章尾巴--新增排错部分)

前言

手上拿到的是广州视源基于爱科微AIC8800系列芯片做的模组(代理商深圳市嘉鸿时代提供。),该系列均支持WIFI AX协议(WIFI6),目前这款是低成本单2.4G+BT5.2方案;价格比8723有优势,所以公司打算切入这款WIFI6 单频模组。

实操

实物图

我的主控平台是RK3399  Linux4.14 安卓10;

第一步:

吹下板内的RTL8723DS模块,换上8800模组; 硬件是pintopin,同时模组内置了晶振无需外部添加。

第二步:

找供应商拿到的驱动如下:

前提:wifi驱动 依赖 cfg80211
1. 将 aic 驱动包放置在 kernel/drivers/net/wireless/之下,并且修改
kernel/drivers/net/wireless/Kconfig 以及 kernel/drivers/net/wireless/Makefile

修改内核的 config
(或 make menuconfig)
2. 编译完后即可得到
aic8800_fdrv.ko、aic8800_bsp.ko
3. 各驱动模块的功用
aic8800_bsp.ko:模块固件初始化
aic8800_fdrv.ko:Wifi 驱动
内核移植、蓝牙移植以及 Android 移植完成后,将 SDK 编译即可使用 AIC8800 Wifi 以及蓝
牙功能。 
后续更新测试数据:
-------------------------
-------------------------

WIFI 性能:

----------------------------------------排错部分---------------------------------

一,

SDIO部分

1,扫描不到设备ID?

硬件部分:

检查模组供电情况 / VIO电平1.8或者3.3V(推荐1.8V) / clk配置时钟 / dts 配置了SDIO2.0或者3.0版本

如果供电正常,降低clk时钟依然异常:

排查SDIO走线,是否没有做等长等处理。

软件部分:

FEATURE_SDIO_PHASE 0或者2 翻转试试

正常如下:

cat /sys/bus/sdio/devices/mmc1\:7a8a\:1/uevent                                                                              
SDIO_CLASS=07
SDIO_ID=5449:0145
MODALIAS=sdio:c07v5449d0145

二,

FW固件部分

aic8800_porting_package\SDIO\driver_fw\fw 里面的固件有分别对应的芯片型号:

AIC8800(D) / AIC8800D80  /AIC8800DC  选择对应的固件拷贝到驱动的这个路径即可。

CONFIG _AIC_ FW _PATH: 默认或者自定义路径,加载BSP.KO的时候会从这里获取固件。

三,

测试部分

   a. insmod /vendor/lib/modules/aic8800_bsp.ko
   b. insmod /vendor/lib/modules/aic8800_fdrv.ko
   c. ifconfig wlan0 up

附上正常log (log是AIC8800D80)

测试扫描:

sudo iw dev wlan0 scan

连接测试即可。

四,

休眠部分

瑞芯微 Rockchip 移植方式(SDIO)
aic8800_btlpm
RK 平台默认已经有 bwrite 等接口,不需要使用 aic8800_btlpm 处理蓝牙休眠唤醒。
aic8800_bsp
Makefile 中将以下两个 CONFIG 改成 y,在 aic_bsp_driver.h 中将
AICBT_LPM_ENABLE_DEFAULT 改成 1
aic8800_fdrv
在 Makefile 中将以下两个 CONFIG 改成 y,平台选择 CONFIG_PLATFORM_ROCKCHIP
libbt-vendor
在 vnd_generic.txt 中将以下两个参数打开
upio.c 中修改 init_rfkill() 的代码

static int init_rfkill()
{
#if 1//For RKchar path[64];char buf[16];int fd, sz, id;int rfkill_id;if (is_rfkill_disabled())return -1;for (id = 0; ; id++){snprintf(path, sizeof(path), "/sys/class/rfkill/rfkill%d/type", id);fd = open(path, O_RDONLY);if (fd < 0){ALOGE("init_rfkill : open(%s) failed: %s (%d)\n", \path, strerror(errno), errno);return -1;}sz = read(fd, &buf, sizeof(buf));close(fd);if (sz >= 9 && memcmp(buf, "bluetooth", 9) == 0){rfkill_id = id;break;}}asprintf(&rfkill_state_path, "/sys/class/rfkill/rfkill%d/state", rfkill_id);return 0;#endif#if 0char path[64];char buf[16];int fd, sz, id;const char *basepath = "/sys/devices/platform/aic-bt/rfkill";DIR *d;struct dirent *de;
if (!(d = opendir(basepath)))goto fail;while ((de = readdir(d))) {if (strstr(de->d_name, "rfkill")) {snprintf(path, sizeof(path), "%s/%s/type", basepath, de->d_name);fd = open(path, O_RDONLY);
if (fd < 0)continue;sz = read(fd, &buf, sizeof(buf));close(fd);
if (sz >= 9 && memcmp(buf, "bluetooth", 9) == 0) {ALOGD("%s: rfkill path %s/%s", __func__, basepath, de->d_name);asprintf(&rfkill_state_path, "%s/%s/state", basepath, de->d_name);closedir(d);return 0;}}
}
closedir(d);fail:ALOGE("%s: No rfkill control node found", __func__);return -1;#endif
}
----------------------------------------------------后面更新蓝牙部分-----------------------------

这篇关于WIFI6 2.4G模组 AIC8800DC移植和替换RTL8723 AP6212过程记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/669154

相关文章

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知