赞
踩
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时钟不同)
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: 主机唤醒蓝牙
WL_REG_ON拉高电平,CPU发送SDIO_DATA_CLK时钟,发送CMD命令,只要是sdio设备会通过DAT0(DAT1-3)返回数据,CPU接收到信号就会和WIFI芯片建立连接。在文件系统可以查看是否识别到设备。
通过UART串口下载固件,生成hci节点
RK平台识别不到设备,需增加上拉(驱动能力);CLK串22Ω电阻,平滑信号,如下图
注:其他平台也可以参考,具体查看相关平台的数据手册
/* 打开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都是高电平触发,所以默认这里要配置为下拉,如果客户的
是硬件设计是反向的则要改为上拉,总之要初始化为与触发电平相反的状态*/
};
};
// 注:不要重复定义,特别是引脚
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>;
};
};
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。