1、环境介绍
硬件:飞凌ok3568-c开发板
软件:原厂rk356x sdk
2、目标
调试海华AW-CM358SM WIFI/BT模组,可以正常上网、使用蓝牙。
3、海华AW-CM358SM
3.1、基本信息
- 主芯片:NXP的88W8987
- Wi-Fi接口:SDIO
- BT接口:UART
3.2、支持SDIO3.0
3.3、电气特性
AW-CM358SM的VDDIO为1.8V:
所以,RK3568的SDIO接口的工作电压也要是1.8V,请检查设备树电源域&pmu_io_domains
节点vccio6是否配置为1.8v(同时,SDIO3.0模式必须为1.8v):
4、适配流程步骤
- 配置设备树,让SDIO控制器工作。
- 配置设备树,让SDIO控制器可以发现WIFI/BT模组。
- Wi-Fi适配:配置设备树,移植设备驱动。
- 验证Wi-Fi功能。
- 蓝牙适配:配置设备树。
- 验证蓝牙功能。
5、SDIO控制器适配
现在先解决“适配流程步骤”的第1,第2点。即让SDIO控制器工作,且可以扫到WIFI卡。
5.1、sdio dts配置
从下面两幅原理图可以得出:
- WIFI模组的WIFI_REG_ON引脚接到了RK3568的GPIO3_D4。
- WIFI模组的SDIO接口接到了RK3568的SDMMC2接口。
设备树配置如下:
/* WL_REG_ON 由 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 = <200>;
/* 这里配置的是WL_REG_ON引脚 */
reset-gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;
};
&pinctrl {
sdio-pwrseq {
wifi_enable_h: wifi-enable-h {
/* 这里配置的是WL_REG_ON引脚 */
rockchip,pins = <3 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};
/* SDIO接口Wi-Fi专用配置:SDIO接口节点 */
&sdmmc2 {
max-frequency = <150000000>; /* sdio接口的最大频率,可调整 */
supports-sdio;
bus-width = <4>; /* 4线模式,可调整1线模式 */
disable-wp;
cap-sd-highspeed;
cap-sdio-irq;
keep-power-in-suspend;
mmc-pwrseq = <&sdio_pwrseq>; /* WL_REG_ON 管理 */
non-removable;
pinctrl-names = "default";
pinctrl-0 = <