RK3568------Openharmony 4.0-Release WIFI/BT模组适配

RK3568------Openharmony 4.0-Release WIFI/BT模组(ap6236)适配

文章目录

  • RK3568------Openharmony 4.0-Release WIFI/BT模组(ap6236)适配
  • 前言
  • 一、驱动移植
  • 二、设备树配置
  • 三 、内核配置
  • 四、遇到的问题
  • 五、效果展示
  • 总结


前言

随着RK3568适配工作的推进,整体适配工作已经接近结束,本篇文章将讲解最后一个驱动适配,正 wi-fi/BT适配


一、驱动移植

市面上常用的WI-FI/BT模组有3款,正基、海华、realtek。正基的模组驱动在鸿蒙RK3568中,已经通过补丁的形式移植进去了,这里我不在赘述。讨论群里也有群友使用的是realtek模组,提供的相关驱动补丁realtek模组驱动

以上驱动的路径为:

kernel/drivers/net/wireless/rockchip_wlan/
kernel/drivers/net/wireless/rockchip_wlan/rkwifibt/ #正基模组
kernel/drivers/net/wireless/rockchip_wlan/cywdhd/ #cypress海华模组
kernel/drivers/net/wireless/rockchip_wlan/rtlxxx #realtek模组

二、设备树配置

设备树配置:
Wi-Fi/BT硬件管脚的配置主要有以下几点:
切记一定要对照原理图进行配置,且确保使用的dts/dtsi里面包含以下节点

/* WIFI_REG_ON: Wi-Fi的电源PIN脚 */
	sdio_pwrseq: sdio-pwrseq {
		compatible = "mmc-pwrseq-simple";
		pinctrl-names = "default";
		pinctrl-0 = <&wifi_enable_h>;
		/*
		 * On the module itself this is one of these (depending
		 * on the actual card populated):
		 * - SDIO_RESET_L_WL_REG_ON
		 * - PDN (power down when low)
		 */
		post-power-on-delay-ms = <20>;
		/* 这里的电平状态恰好跟使能状态相反,比如REG_ON高有效,则这里为LOW;如果REG_ON低有效,则填HIGH */
		reset-gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;
		status = "okay";
	};

&pinctrl {
     sdio-pwrseq {
     wifi_enable_h: wifi-enable-h {
     rockchip,pins =
 /* 对应上面的WIFI_REG_ON */
    rockchip,pins = <3 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
          };
      };
};
/* 打开SDIO接口 */
&sdio {
 max-frequency = <150000000>; /* sdio接口的最大频率,可调整 */
 bus-width = <4>; /* 4线模式 */
 sd-uhs-sdr104; /* 支持SDIO3.0 */
 … …
 status = "okay";
};
/* WIFI_WAKE_HOST: Wi-Fi唤醒主控的PIN脚 */
wireless-wlan {
 compatible = "wlan-platdata";
 rockchip,grf = <&grf>;
 /* 注意:下面的clock属性是开启PMU的32.768k的,请按照实际使用的型号填写,否在SDIO/WiFi无法使用 */
 rockchip,grf = <&grf>;
 clocks = <&rk809 1>;
 /* 海华/正基模组兼容可以不用修改此名称,realtek需要按实际填写 */
 wifi_chip_type = "ap6255";
 /* WIFI_WAKE_HOST GPIO_ACTIVE_HIGH特别注意:确认下这个wifi pin脚跟主控的连接关系,
直连的话就是HIGH, 如果中间加了一个反向管就要改成低电平LOW触发 */
 WIFI,host_wake_irq = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
 /* 注意USB接口的Wi-Fi需要添加此配置,对应WIFI_REG_ON PIN, 且无需sdio_pwrseq/sdio等
节点 */
 WIFI,poweren_gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
 status = "okay";
};
/* pinctrl的配置 */
wireless-wlan {
 /omit-if-no-ref/
 wifi_wake_host: wifi-wake-host {
 /* 注意一般Wi-Fi的wake up pin都是高电平触发,所以默认这里要配置为下拉,如果客户的
是硬件设计是反向的则要改为上拉,总之要初始化为与触发电平相反的状态*/
 rockchip,pins = <0 RK_PA0 0 &pcfg_pull_down>;
 };
};

!!!!!!!!!!!!!!!!设备树配置这里有几个注意事项:

  • IO电源域的配置
    说明:外部电源比如VCCIO_SDIO(3.3/1.8v)会同时给芯片的IO和Wi-Fi模组的IO供电,以保证它
    们之间的电压匹配,而主芯片的IO需要设置电源域寄存器以匹配外部的供电电压,所以dts里面需
    要特定配置告诉驱动支持SDIO3.0的模组IO一定要接1.8v,SDIO2.0 3.3v/1.8v都可以,但切记要匹
    配,不能出现供电1.8而配置3.3或者反之。

在这里插入图片描述
在这里插入图片描述

查看上面原理图,找到Wi-Fi对应的sdio接口部分,图中有标注VCCIOX(有些芯片组名字为:APIOX

或者其它),比如这个是VCCIO1,则给VCCIO1供电的是VCCIO_SDIO,查找VCCIO_SDIO连接的网络
是3.3v还是1.8v,如果硬件是3.3v,按照对应关系进行修改,切记不能出现不匹配的问题。

  • 32.768K的配置

正基/海华的模组都是要外供32.768k,而Realtek的模组都是内部封装好的,只有COB芯片才会外供。
如果Wi-Fi模组需要外部供这个频率,则有两种情况:

  1. 从原理图可以看到RK8XX型号的PMU会给Wi-Fi供32k,一般PMU默认打开32k,如果没有打开则需
    要添加如下配置:
    注意:如果用的不是RK的PMU,则不能这样配置;看下原理图的32k是如何供的,然后根据实际情况打
    开32k。
  2. 如果需要CPU去供32K,则dts需要添加如下配置(不建议使用这种方式):
    硬件连接如下图所示:
    在这里插入图片描述
    在这里插入图片描述

三 、内核配置

ap6236:
CONFIG_AP6XXX_WIFI6
CONFIG_BCMDHD
CONFIG_WL_ROCKCHIP
CONFIG_WLAN

rtl8733:
CONFIG_RTL8733BU=y

四、遇到的问题

1.启动后ifconfig找不到网卡
我移植后,ifconfig后找不到网卡,我查找问题的思路有以下几个点:

  • 模组本身有问题
  • 设备树没有正确配置,导致驱动加载失败
    有问题先排查硬件,我更换了一个底板以后,还是找不到网卡,并且测量电源是正确的。排除模组本身问题;接着查看内核打印,查看驱动加载情况
    在这里插入图片描述
    追加了一个打印,发现驱动加载成功,并且也成功分配了wlan0的MAC地址,说明驱动加载成功了。
    最后判断应该是查找网卡出现了问题,使用ifconfig -a 以后,wlan0存在

2.找到网卡但是不能正常运行
追加驱动源码的打印:
在这里插入图片描述
在这里插入图片描述
芯片需要的固件错误,于供应商沟通更换固件
3.运行后搜索不到热点
首先排查硬件,发现没有安装天线

五、效果展示

WIFI展示


总结

本人之前一直从事应用开发,借着这次电鸿的契机进行系统级开发的学习,将我在工作中的遇到的问题及解决思路记录并分享,希望可以与诸君共勉
目前网上技术讨论群大都是鸿蒙的应用开发,总结此类文章也是希望将同样进行鸿蒙设备开发的同僚召集到一起,一起讨论学习。如果有同样在进行鸿蒙设备开发的朋友,可以加我的联系方式,期待您的消息
个人微信
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/786575.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

差分+前缀和习题集

&#xff08;luogu题号&#xff09; P6568 [NOI Online #3 提高组] 水壶 思路分析 前缀和优化问题。 其实题意就是让你求有k1个数的区间和最大值&#xff0c;那么直接前缀和优化&#xff0c;就可以通过本题。 代码 #include<bits/stdc.h> using namespace std;const in…

spring的bean注册

bean注册 第三方jar包的类想添加到ioc中&#xff0c;加不了Component该怎么办呢。 可以使用Bean和Import引入jar包&#xff0c;可以使用maven安装到本地仓库。 修改bean的名字&#xff1a;Bean("aaa")使用ioc的已经存在的bean对象&#xff0c;如Country&#xff1a;p…

【数据分享】1981—2023年中国逐日归一化植被指数(NDVI)栅格数据

NDVI&#xff0c;全名为Normalized Difference Vegetation Index&#xff0c;中文名称为归一化植被指数。这个指数可以用来定性和定量评价植被覆盖及其生长活力&#xff0c;我们也可以简单地将它理解为体现植被密度和健康状况的一个指标。 本次我们给大家分享的是1981年6月24日…

VSCode用ssh连接ubuntu虚拟机实现远程访问文件夹

1. ubuntu安装ssh服务 1.1 安装 sudo apt-get install ssh sudo apt-get install openssh-server1.2 启动ssh服务 sudo service ssh start sudo service ssh status # 查看状态 ## 或者用下面方式重启ssh服务 ## /etc/init.d/ssh restart1.3 ssh服务加入开机启动 sudo syst…

从天空到地面:无人机航拍推流直播技术在洞庭湖决口封堵中的全方位支援

据新闻报道&#xff0c;受持续强降雨影响&#xff0c;湖南省华容县团洲垸洞庭湖一线堤防发生管涌险情&#xff0c;随后出现决口。截至7月8日20时左右&#xff0c;226米长的洞庭湖一线堤防决口已累计进占208米&#xff0c;目前剩余18米&#xff0c;有望在今晚或9日凌晨实现合龙。…

python爬虫基础入门

步骤 获取网页内容&#xff1a; http请求 python的Requests库 解析网页内容 html网页结构 python的Beautiful Soup库 储存或分析数据 储存进数据库 作为ai分析的数据 转化为图表显示出来 DDoS攻击 通过给服务器发送海量高频请求&#xff0c;大量消耗网页资源&#…

加密与安全_密钥体系的三个核心目标之完整性解决方案

文章目录 Pre机密性完整性1. 哈希函数&#xff08;Hash Function&#xff09;定义特征常见算法应用散列函数常用场景散列函数无法解决的问题 2. 消息认证码&#xff08;MAC&#xff09;概述定义常见算法工作原理如何使用 MACMAC 的问题 不可否认性数字签名&#xff08;Digital …

详细解读COB显示屏使用的共阴技术原理

倒装COB显示屏技术中采用的共阴技术是一种旨在提升能效并且减少驱动功耗的LED驱动方式&#xff0c;常规LED显示屏一般采用共阳极或者独立驱动的方式&#xff0c;而共阴技术就有所不同了&#xff0c;其基本原理如下&#xff1a; 一、基本概念&#xff1a;   共阴技术是指在LED…

Java内存区域与内存溢出异常(自动内存管理)

序言&#xff1a;Java与C之间有一堵由内存动态分配和垃圾收集技术所围成的高墙&#xff0c;墙外面的人想进去&#xff0c;墙里面的人却想出来。 1.1概述 对于从事C、C程序开发的开发人员来说&#xff0c;在内存管理领域&#xff0c;他们既是拥有最高权力的“皇帝”&#xff0c…

【源码下载】瓦房店农村电商大数据平台模板

技术详细实现可在评论区留言。 概述 用 echarts 和 jquery 实现的大屏模板效果。 部分代码展示&#xff0c;访问 dt.sim3d.cn 获取源码&#xff1a; (function($){$.extend({initMapChartPath : function(options){var defs {domId : ,mapName:china,mapCenter:["5…

【目标检测】使用自己的数据集训练并预测yolov8模型

1、下载yolov8的官方代码 地址&#xff1a; GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > OpenVINO > CoreML > TFLite 2、下载目标检测的训练权重 yolov8n.pt 将 yolov8n.pt 放在ultralytics文件夹下 3、数据集分布 注…

基于SpringBoot实现轻量级的动态定时任务调度

在使用SpringBoot框架进行开发时&#xff0c;一般都是通过Scheduled注解进行定时任务的开发&#xff1a; Component public class TestTask {Scheduled(cron"0/5 * * * * ? ") //每5秒执行一次public void execute(){SimpleDateFormat df new SimpleDateFormat(…

视频监控管理平台智能边缘分析一体机视频监控系统客流统计检测算法

在当今数据驱动的时代&#xff0c;客流统计作为商业分析的重要手段&#xff0c;其准确性和实时性对于商家决策具有至关重要的影响。随着技术的发展&#xff0c;智能边缘分析一体机结合了边缘计算与深度学习技术&#xff0c;为客流统计提供了更为高效、精准的解决方案。 首先&am…

湖南源点咨询 正确定义问题是企业市场调研至关重要的第一步

湖南&#xff08;市场调研公司&#xff09;源点咨询认为:正确地定义问题是市场调研过程中至关重要的第一步。 如果没有正确的定义所调研的问题&#xff0c;那么调研目标也会是错误的&#xff0c;并且整个市场调研过程都将会浪费时间和金钱。一家大型的消费品包装企业想要在品牌…

代码随想录算法训练营第二天|【数组】59.螺旋矩阵II

这两天工作的事情有点多&#xff0c;周末又比较懒&#xff0c;所以没有跟上进度。这两天开始补进度。 题目 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&a…

Java代码实现elasticSearch的DSL复合查询

elasticsearch提供DSL&#xff08;domain specific language&#xff09;查询&#xff0c;就是以json格式定义查询条件实现复杂条件查询。 DSL查询分为俩大类&#xff1a; 叶子查询&#xff1a;一般是在特定的字段里查询特定值&#xff0c;属于简单查询&#xff0c;很少单独使…

峟思雨水情智能监测与预警系统核心运作机制解析

雨水情智能监测与预警系统&#xff0c;作为现代水文观测领域的尖端技术集成体&#xff0c;其运作机制深度融合了信息采集的精准性、数据传输的高效性、数据分析的智能化以及预警响应的及时性&#xff0c;构建了全方位、多层次的水文安全防线。以下是对该系统核心运作机制的深入…

C++的入门基础

目录 C的简单介绍命名空间命名空间的使用C的输入与输出缺省参数函数重载 C的简单介绍 本贾尼斯特劳斯特卢普博士在C的基础上增加了面向对象的特性&#xff0c;这时又增加了继承和、类、封装的概念&#xff0c;为后来的面向对象的编程奠定了基础&#xff0c;这被命名为C 命名空…

进度条提示-在python程序中使用避免我误以为挂掉了

使用库tqdm 你还可以手写一点&#xff0c;反正只要是输出点什么东西都可以&#xff1b; Demo from chatgpt import time from tqdm import tqdm# 示例函数&#xff0c;模拟长时间运行的任务 def long_running_task():total_steps 100for step in tqdm(range(total_steps), …

用python生成词频云图(python实例二十一)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.词频云图 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&a…