RK356x-8:Wifi模块AP6xxx配置与调试

本文记录如何根据原理图,配置和调试RK356x(测试用RK3566)主板上wifi/蓝牙模块(测试用AP6212,rkwifibt),使其能正确连网。

1.配置SOC接口

        1.1  查看原理图,看看wifi模块用的接口是什么,一般支持sdio,sdmmc,pcie,USB等,参考文档:docs/cn/Linux/Wifibt/Rockchip_Developer_Guide_Linux_WIFI_BT_CN.pdf.

        通过原理图,可以知道,我的wifi模块接在sdmmc1上,因此,打开sdmmc1节点,并进行其它参数设置,如下:

&sdmmc1 {max-frequency = <200000000>; //最大频率150或200MHzno-sd; //初始化期间,仅发送SD命令no-mmc; //初始化期间,仅发送MMC命令non-removable; //不可进行热插拔bus-width = <4>; //4线通信//disable-wp;cap-sd-highspeed; //支持高速时序cap-sdio-irq; //使能SDIO中断keep-power-in-suspend; //挂起期间依然保持供电rockchip,default-sample-phase = <90>;mmc-pwrseq = <&sdio_pwrseq>; //使能sdio_pwrseq,只能被一个节点使用pinctrl-names = "default";pinctrl-0 = <&sdmmc1_bus4 &sdmmc1_cmd &sdmmc1_clk>;sd-uhs-sdr104; //支持SD UHS SDR104速度模式status = "okay";
};

        特别注意,sdio_pwrseq节点,是关联wifi模块的主节点,只能被一个节点使用。

        1.2 配置sdio_pwrseq节点

sdio_pwrseq: sdio-pwrseq {compatible = "mmc-pwrseq-simple";//clocks = <&rk809 1>;//clock-names = "ext_clock";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 = <200>;reset-gpios = <&gpio2 RK_PC2 GPIO_ACTIVE_LOW>;
};

        这个节点在两个与主板相关的dtsi文件中,都可能有,为了避免一个会覆盖一个,因此,保留最初的一个即可。它最重要的配置是reset-gpios引脚,原理图上这个引脚连到了wifi模块的WL_REG_ON上面,一定要配置正确这个引脚,它在识别模块上非常重要。

        同时修改wifi_enable_h节点,使它与reset-gpios对应:

sdio-pwrseq {wifi_enable_h: wifi-enable-h {rockchip,pins = <2 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;};
};

        1.3 配置wireless_wlan节点,并打开它:

&wireless_wlan {pinctrl-names = "default";pinctrl-0 = <&wifi_host_wake_irq>;WIFI,host_wake_irq = <&gpio2 RK_PC4 GPIO_ACTIVE_HIGH>;status = "okay";
};

         注意,在&wireless_wlan修改节点的地方,重要的配置是WIFI,host_wake_irq,它连接到模块的WL_HOST_WAKE引脚上面,我的电路板连的是GPIO2_PC4。同时配置控制节点wifi_host_wake_irq,使之与这里引脚匹配:

wireless-wlan {wifi_host_wake_irq: wifi-host-wake-irq {rockchip,pins = <2 RK_PC4 RK_FUNC_GPIO &pcfg_pull_down>;};
};

        在节点 wireless_wlan原始定义文件中,需要配置wifi_chip_type,它是wifi模块的名称,我这里写入ap6212a,同时配置WIFI,poweren_gpio,它连接到模块的WL_REG_ON上(与sdmmc中的reset gpios是一个脚):

wireless_wlan: wireless-wlan {compatible = "wlan-platdata";rockchip,grf = <&grf>;clocks = <&rk809 1>;//clocks = <&hym8563>;clock-names = "ext_clock";wifi_chip_type = "ap6212a1";WIFI,poweren_gpio = <&gpio2 RK_PC2 GPIO_ACTIVE_HIGH>;status = "disabled";
};

        1.4 检查接口配置是否正确

        如此配置后,烧录到主板上,可以在系统总线上(/sys/bus/mmc/devices),看到sdmmc1产生的设备名称,通过file它,应该可以链接到一个sdmmc1地址相同的文件上:

        上图的mmc0对应节点sdhci,它是EMMC的接口,系统烧录进这里面去了,启动必须有这个接口,通过file命令可以查看它实际链接的文件。

         而mmc2:0001则对应的就是sdmmc1节点,可以通过file看到它实际链接的设备地址是0xFE2C0000,这个地址正是节点sdmmc1的地址。

        这表示,系统总线上已经发现了sdmmc1设备。

2. 配置和测试wifi模块

2.1  配置全局板级文件

        首先,在全局板级文件中加入语句:RK_WIFIBT_CHIP="AP6212A1"

        其中,AP6212A1可以是:

                AP6275/AP6358S/AP6212A1/AP6236...之一

                RTL8723DS/RTL8822CS...之一

                CYW4354/CYW43438/CYW5557X_PCIE/CYW5557X_PCIE...之一

       根据电路板所使用的模块写入。

2.2 执行命令./build.sh wifibt,可能会报错,主要是文件权限问题,造成脚本不能移动某些模块,根据报错,将文件权限修改一下即可。

        执行命令./build.sh rootfs编译一下根文件系统

        执行命令./build.sh firmware打包成update.img,最后烧录运行

2.3 系统启动后,执行以下命令:

ip a 查看是否有wlan0出现

ip link set wlan0 up 打开wifi

nmcli dev wifi 扫描热点

nmcli dev wifi connect "name" password "xxxxx" 连接热点

ip a 查看wlan0是否有IP地址出现

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础——网络编程

可以让设备中的程序与网络上其他设备中的程序进行数据交互&#xff08;实现网络通信的&#xff09;。 1. 基本的通信架构 基本的通信架构有2种形式&#xff1a;CS架构&#xff08;Client客户端/Server服务端&#xff09;、BS架构&#xff08;Browser浏览器/Server服务端&…

变分自编码器(VAE, Variational Autoencoder)

代码说明 VAE 模型结构&#xff1a; 编码器将输入数据&#xff08;如 MNIST 图像&#xff09;映射到潜在空间&#xff0c;生成均值 (mu) 和对数方差 (logvar)。 通过重新参数化技巧 (reparameterize) 从正态分布中采样潜在向量 z。 解码器将潜在向量 z 映射回原始空间&#xf…

1. Django中的URL调度器 (项目创建与简单测试)

1. 创建 Django 项目 运行以下命令创建一个名为 blog_project 的 Django 项目&#xff1a; django-admin startproject blog_project2. 创建博客应用 Django 中&#xff0c;项目可以包含多个应用。创建一个名为 blog 的应用&#xff1a; cd blog_project python manage.py …

多目标优化算法:多目标黑翅鸢算法(MOBKA)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码

一、黑翅鸢算法介绍 黑翅鸢优化算法&#xff08;Black-winged Kite Algorithm, BKA&#xff09;是2024年提出的一种元启发式优化算法&#xff0c;其灵感来源于黑翅鸢的迁徙和捕食行为。这种算法通过模拟黑翅鸢在捕食过程中的飞行和搜索策略&#xff0c;被用来解决优化问题&…

记一次Mysql远程连接报错

问题描述&#xff1a; Plugin caching sha2 password could not be loaded: 在wsl2用docker中拉取了mysql镜像&#xff0c;启动后想在win下的环境远程连接到docker中的mysql&#xff0c;报错了&#xff0c;报错如下所示 搜寻了相关的资料发现&#xff0c;在拉下来的myslq版本…

STM32F103移植FreeRTOS

1. 源码下载 在https://www.freertos.org/中下载源码&#xff0c;这里下载的是FreeRTOSv202212.01版本&#xff0c;源码内容解释可参考&#xff1a; https://rtos.100ask.net/zh/FreeRTOS/DShanMCU-F103/chapter7.html#_7-1-freertos%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84拷贝…

CAD多段线两侧偏移(交叉线容易出错)

public void 交叉多段线容易出错(){List<Curve> entse Z.db.SelectEntities<Curve>();List<Polyline> ents Z.db.CurvesToPolyLines(entse);//Z.db.SelectEntities<Polyline>();double offsetDistance 5.0;//偏移距离List<Polyline> resultP…

数据库EVA模式与传统数据库模式 | 分析对比及应用场景

目录 1. 实战场景2. 基本知识3. 应用场景 1. 实战场景 从实战进行探讨以及深入&#xff1a; 事因是同事给我创建表结构的时候&#xff0c;以如下这种方式进行创建&#xff1a; 看到这张表的结构可能会思考&#xff1a; 为啥设备的部件值&#xff08;日期、数值、字符串&…

算法【Java】—— 动态规划之简单多状态 dp 问题

按摩师 https://leetcode.cn/problems/the-masseuse-lcci 状态表示&#xff1a;根据经验和题目要求&#xff0c;达到 i 位置的时候&#xff0c;预约时间最长 接着我们细分状态表示&#xff1a;在遍历数组的时候&#xff0c;到达 i 位置的时候&#xff0c;又两种情况&#xff…

小鸡模拟器 1.8.11 | 街机怀旧重温经典游戏,支持手柄

小鸡模拟器是一款支持多种经典游戏机模拟的游戏应用&#xff0c;包括街机、索尼(SONY)、世嘉、任天堂等主流掌机游戏以及PSP、GBA、NDS、SFC(超级任天堂SNES)、FC(红白机NES)、MD(世嘉MEGA DRIVE)、PS1、PS2等。应用支持手柄完美操作&#xff0c;兼容安卓手柄&#xff0c;让玩家…

Pygame坦克大战游戏开发实验报告

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Springboot3.3.5 启动流程之 tomcat启动流程介绍

在文章 Springboot3.3.5 启动流程&#xff08;源码分析&#xff09; 中讲到 应用上下文&#xff08;applicationContext&#xff09;刷新(refresh)时使用模板方法 onRefresh 创建了 Web Server. 本文将详细介绍 ServletWebServer — Embedded tomcat 的启动流程。 首先&…

电子应用设计方案-12:智能窗帘系统方案设计

一、系统概述 本设计方案旨在打造便捷、高效的全自动智能窗帘系统。 二、硬件选择 1. 电机&#xff1a;选用低噪音、扭矩合适的智能电机&#xff0c;根据窗帘尺寸和重量确定电机功率&#xff0c;确保能平稳拉动窗帘。 2. 轨道&#xff1a;选择坚固、顺滑的铝合金轨道&…

Javaweb-day12(登录认证)

登录功能 登录校验&#xff08;重点&#xff09; 登录校验指的是在服务器接收到浏览器发送过来的请求之后&#xff0c;首先要对这个请求进行校验&#xff0c;先要校验一下用户登录了没有 怎么来实现登录校验的操作呢&#xff1f;具体的实现思路可以分为两部分&#xff1a; 在…

记录大学Linux运维上机考试题目和流程

备注&#xff1a;今年的Linux操作系统考试已经全部结束&#xff0c;仅作为一个记录和留念 前提&#xff1a;配置环回网卡和环境和nat网卡 1、搭建dns服务器 2、Apache和http服务 3、搭建postfix邮件服务器实现邮件发送 4、搭建vsftpdFTP服务器实现文件上传 题目如下&…

Linux驱动开发第2步_“物理内存”和“虚拟内存”的映射

“新字符设备的GPIO驱动”和“设备树下的GPIO驱动”都要用到寄存器地址&#xff0c;使用“物理内存”和“虚拟内存”映射时&#xff0c;非常不方便&#xff0c;而pinctrl和gpio子系统的GPIO驱动&#xff0c;非常简化。因此&#xff0c;要重点学习pinctrl和gpio子系统下的GPIO驱…

关于强化学习的一份介绍

在这篇文章中&#xff0c;我将介绍与强化学习有关的一些东西&#xff0c;具体包括相关概念、k-摇臂机、强化学习的种类等。 一、基本概念 所谓强化学习就是去学习&#xff1a;做什么才能使得数值化的收益信号最大化。学习者不会被告知应该采取什么动作&#xff0c;而是必须通…

vue内置指令和自定义指令

常见的指令&#xff1a; v-bind : 单向绑定解析表达式, 可简写为 :xxx v-model : 双向数据绑定 v-for : 遍历数组/对象/字符串 v-on : 绑定事件监听, 可简…

《Java核心技术 卷I》用户界面AWT事件继承层次

AWT事件继承层次 EventObject类有一个子类AWTEvent&#xff0c;它是所有AWT事件类的父类。 Swing组件会生成更多其他事件对象&#xff0c;都直接拓展自EventObject而不是AWTEvent。 AWT将事件分为底层(low-level)事件和语义事件。 语义事件&#xff1a;表示用户的动作事件&…

AntFlow:一款高效灵活的开源工作流引擎

AntFlow 是一款功能强大、设计优雅的开源工作流引擎&#xff0c;其灵感来源于钉钉的工作流设计理念&#xff0c;旨在为企业和开发者提供灵活、高效的工作流解决方案。AntFlow 支持复杂的业务流程管理&#xff0c;具有高度可定制性&#xff0c;且拥有现代化的前端设计&#xff0…