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

相关文章

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手