当前位置: 首页 > ops >正文

Linux内核(十)WIFI BT电路解析 对应设备树配置解析

文章目录

      • 参考电路解析
        • WIFI相关引脚解析
        • BT相关引脚解析
      • WIFI识别过程以及BT加载过程
        • WIFI识别过程
        • BT加载过程
      • BUG: 识别不到设备
      • 设备树配置解析(基于RK3568设备树,其他平台可以参考)
        • SDIO接口WIFI配置
        • BT设备树配置解析


参考电路解析

在这里插入图片描述

WIFI相关引脚解析

WL_REG_ON: 主要用于上电,休眠的时候,请保持GPIO上电,否则会丢失WiFi内部的状态,导致WiFi唤醒失败; SDIO注册上WIFI就有电压
WL_HOST_WAKE: 主要用于WiFi设备有数据的时候,唤醒CPU,进入中断。
(其中引脚的电平要看CPU如何配置的,如果配置的是高电平有效,那么默认情况下是低电平,当WiFi有数据过来的时候就拉高,直到主控这边把数据拿完再拉低,如果主控一直没有来拿数据就一直是高电平。)
(通过WL_HOST_WAKE中断实现当有网络数据的时候,才唤醒CPU,平时CPU处于Standby状态下, 达到低功耗的第一步.)
CLK信号: HOST给DEVICE的 时钟信号,每个时钟周期传输一个命令。
CMD信号: 双向 的信号,用于传送 命令 和 反应。
DAT0-DAT3 信号: 四条用于传送的数据线。
XTAL_OUT/TAL_IN: 外部晶振(与wifi和天线输出频率有关,不同WIFI时钟不同)

BT相关引脚解析

LPO: 默认上拉3.3V电压,PMIC_CLK32K_OUT由PMIC电源管理芯片输出。PMIC为开漏输出(只输出低电平),软件配置后,PMIC固定输出低电平,形成32.768M的时钟(这个时钟与蓝牙有关,与wifi没有关系)识别到设备后产生
UART_RXD/UART_TXD: 连接串口收发,对应连接
UART_CTS_N/UART_RTS_N: 连接串口复位/清除功能(注:UART1_CTSn -> UART_RTS_N, UART1_RTSn -> UART_CTS_N )
BT_REG_ON: 蓝牙开关
BT_WAKE_HOST: 蓝牙唤醒主机
HOST_WAKE_BT: 主机唤醒蓝牙


WIFI识别过程以及BT加载过程

WIFI识别过程

WL_REG_ON拉高电平,CPU发送SDIO_DATA_CLK时钟,发送CMD命令,只要是sdio设备会通过DAT0(DAT1-3)返回数据,CPU接收到信号就会和WIFI芯片建立连接。在文件系统可以查看是否识别到设备。

BT加载过程

通过UART串口下载固件,生成hci节点


BUG: 识别不到设备

RK平台识别不到设备,需增加上拉(驱动能力);CLK串22Ω电阻,平滑信号,如下图
在这里插入图片描述
注:其他平台也可以参考,具体查看相关平台的数据手册


设备树配置解析(基于RK3568设备树,其他平台可以参考)

SDIO接口WIFI配置
/* 打开SDIO接口 */
&sdmmc2 {max-frequency = <150000000>;      /* sdio接口的最大频率,可调整 */supports-sdio;    bus-width = <4>;                   /* 4线模式 */disable-wp;cap-sd-highspeed;cap-sdio-irq;keep-power-in-suspend;mmc-pwrseq = <&sdio_pwrseq>;non-removable;pinctrl-names = "default";pinctrl-0 = <&sdmmc2m0_bus4 &sdmmc2m0_cmd &sdmmc2m0_clk>;sd-uhs-sdr104;                   /* 支持SDIO3.0 */status = "okay";
};/* WIFI_REG_ON: Wi-Fi的电源PIN脚 */
sdio_pwrseq: sdio-pwrseq {compatible = "mmc-pwrseq-simple";clocks = <&rk809 1>;           /* 特别注意:下面的clock属性是开启RK8XX PMU的32.768k的,请按照实际使用的型号填写,否在
SDIO/Wi-Fi无法使用,最新SDK已经把这个属性移到到wireless-wlan节点下,只要不重复配置即可 */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 = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;   /* 这里的电平状态恰好跟使能状态相反,比如REG_ON高有效,则这里为LOW;如果REG_ON低有效,
则填HIGH */
};/* 对应上面的WIFI_REG_ON */
sdio-pwrseq {wifi_enable_h: wifi-enable-h {rockchip,pins = <3 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;};
};/* WIFI_WAKE_HOST: Wi-Fi唤醒主控的PIN脚 */
wireless_wlan: wireless-wlan {compatible = "wlan-platdata";rockchip,grf = <&grf>;wifi_chip_type = "apxxx";        /* 海华/正基模组(AP系列)兼容可以不用修改此名称,realtek需要按实际填写 */status = "okay";
};&wireless_wlan {pinctrl-names = "default";pinctrl-0 = <&wifi_host_wake_irq>;WIFI,host_wake_irq = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;   /* WIFI_WAKE_HOST GPIO_ACTIVE_HIGH特别注意:确认下这个wifi pin脚跟主控的连接关系,
直连的话就是HIGH, 如果中间加了一个反向管就要改成低电平LOW触发 *//* 注意USB接口的Wi-Fi需要添加此配置,对应WIFI_REG_ON PIN, 且无需sdio_pwrseq/sdio等
节点 *///WIFI,poweren_gpio = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
};wireless-wlan {wifi_host_wake_irq: wifi-host-wake-irq {rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_down>;    /* 注意一般Wi-Fi的wake up pin都是高电平触发,所以默认这里要配置为下拉,如果客户的
是硬件设计是反向的则要改为上拉,总之要初始化为与触发电平相反的状态*/};
};
BT设备树配置解析
// 注:不要重复定义,特别是引脚
wireless_bluetooth: wireless-bluetooth {// compatible = "bluetooth-platdata";// clocks = <&rk809 1>;// clock-names = "ext_clock";//wifi-bt-power-toggle;// uart_rts_gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_LOW>;// pinctrl-names = "default", "rts_gpio";// pinctrl-0 = <&uart8m0_rtsn>;// pinctrl-1 = <&uart8_gpios>;// BT,reset_gpio    = <&gpio3 RK_PA0 GPIO_ACTIVE_HIGH>;// BT,wake_gpio     = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>;// BT,wake_host_irq = <&gpio3 RK_PA2 GPIO_ACTIVE_HIGH>;status = "disabled";
};
/* 打开对应的UART配置 */
&uart1 {status = "okay";pinctrl-names = "default";pinctrl-0 = <&uart1m1_xfer &uart1m1_ctsn>;
};&wireless_bluetooth {compatible = "bluetooth-platdata";clocks = <&rk809 1>;clock-names = "ext_clock";//wifi-bt-power-toggle;uart_rts_gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_LOW>;       /* 这里要配置为蓝牙所使用uart的rts脚 */pinctrl-names = "default", "rts_gpio";pinctrl-0 = <&uart1m1_rtsn>;                            /* 定义gpio4 RK_PB6 为uart rst引脚 */pinctrl-1 = <&uart1_gpios>;				 /* 定义gpio4 RK_PB6 为蓝牙引脚 */BT,reset_gpio    = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;     /* BT_REG_ON 蓝牙电源的开关 */BT,wake_gpio     = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>;	  /* HOST_WAKE_BT */BT,wake_host_irq = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>;     /* BT_WAKE_HOST */status = "okay";
};wireless-bluetooth {uart1_gpios: uart1-gpios {rockchip,pins = <4 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;};
};
http://www.xdnf.cn/news/11162.html

相关文章:

  • Ubuntu安装eclipse
  • 补丁(patch)的制作与应用
  • 什么是原码、反码和补码
  • reviewboard环境搭建(3):创建站点
  • 姓氏的来历
  • 位图是什么
  • PDF 解锁(unlock)
  • Zblog模板:三栏自适应网赚博客主题模板
  • ActivityThread分析—ActivityThread的main方法的执行流程分析
  • Flask——request的form_data_args用法
  • 汇编语言入门教程
  • HttpWatch使用教程
  • 万用表之电压测量原理(基于ICL7107)
  • 多点定位MLAT系统解决方案
  • static 函数和普通函数
  • 归并排序(Merge Sort)
  • C++ assert.h头文件
  • H264解码之TS流解析
  • VRML基础知识
  • SCJP 学习笔记
  • 数字货币/币币交易所系统开发|案例介绍|APP开发|项目测试
  • 图片Base64编码
  • xiao77论坛php,论坛
  • 缓存服务器
  • MATLAB中的代数环概念
  • Centos 6.3 安装 yozo office (永中office)
  • window.open()各参数详解
  • infopath java包_InfoPath 2013 修补程序包 (Ipeditor x none.msp) 的描述︰ 2014 年 4 月 8,...
  • win10 如何卸载OfficeScan
  • Altium Designer 10 介绍、原理图及其模板常规设计