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将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

将图片导入Python的turtle库的详细过程

《将图片导入Python的turtle库的详细过程》在Python编程的世界里,turtle库以其简单易用、图形化交互的特点,深受初学者喜爱,随着项目的复杂度增加,仅仅依靠线条和颜色来绘制图形可能已经... 目录开篇引言正文剖析1. 理解基础:Turtle库的工作原理2. 图片格式与支持3. 实现步骤详解第

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Maven 依赖发布与仓库治理的过程解析

《Maven依赖发布与仓库治理的过程解析》:本文主要介绍Maven依赖发布与仓库治理的过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录Maven 依赖发布与仓库治理引言第一章:distributionManagement配置的工程化实践1

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J