本文主要是介绍WIFI6 2.4G模组 AIC8800DC移植和替换RTL8723 AP6212过程记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(文章尾巴--新增排错部分)
前言
手上拿到的是广州视源基于爱科微AIC8800系列芯片做的模组(代理商深圳市嘉鸿时代提供。),该系列均支持WIFI AX协议(WIFI6),目前这款是低成本单2.4G+BT5.2方案;价格比8723有优势,所以公司打算切入这款WIFI6 单频模组。
实操
实物图
我的主控平台是RK3399 Linux4.14 安卓10;
第一步:
吹下板内的RTL8723DS模块,换上8800模组; 硬件是pintopin,同时模组内置了晶振无需外部添加。
第二步:
找供应商拿到的驱动如下:
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
连接测试即可。
四,
休眠部分



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过程记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!