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

1 篇文章 0 订阅
1 篇文章 0 订阅

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

前言

手上拿到的是广州视源基于爱科微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 RK
        char 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 0
            char 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
}
----------------------------------------------------后面更新蓝牙部分-----------------------------
  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
aic8800wifi蓝牙是一种集成了无线局域网(WiFi)和蓝牙功能的芯片。移植指的是将这种功能与其他系统或平台进行整合和适配,从而使其在特定环境中正常工作。 移植过程中需要详细的文档来指导开发者完成各项任务。这些文档通常包括以下内容: 1.硬件接口:文档会给出芯片的硬件接口信息,包括引脚定义、供电需求和电器特性等。这有助于开发者了解芯片与其他硬件组件的连接方式,进行正确的硬件设计和布线。 2.软件驱动:移植文档还会提供相应的软件驱动程序,它们是实现芯片功能的核心代码。文档会详细介绍驱动程序的安装和配置方法,以及各种可用的功能接口和参数说明。 3.操作系统适配:移植通常需要将芯片的功能与特定操作系统进行适配。文档会提供适配代码和说明,以帮助开发者将芯片与目标操作系统无缝集成,并确保其正常运行。 4.API文档:开发者在进行移植时可能需要使用库或API来实现特定的功能。API文档会提供所需库或API的详细说明,包括函数调用方式、参数用法和返回值等信息。 5.测试和调试:文档还包括测试和调试方法,以帮助开发者验证移植的正确性和性能。它们可能包括示例代码、测试工具和调试方法等。 综上所述,aic8800wifi蓝牙移植文档涵盖了硬件接口、软件驱动、操作系统适配、API文档以及测试和调试方法等内容,它们是开发者在进行移植工作时的重要参考和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值