x3588的wifi/bt使用的是外挂双模模块,根据数据通信接口的差异分为PCIE和SDIO两种。
x3588使用的是SDIO接口双模模块:AP6398S。
DTS参考配置:
参考rockchip android13: rk3588-x3588-sdk.dts
蓝牙配置:
wireless_bluetooth: wireless-bluetooth {
compatible = "bluetooth-platdata";
clocks = <&hym8563>; // 外部时钟
clock-names = "ext_clock";
uart_rts_gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_LOW>; //uart的rts脚
pinctrl-names = "default", "rts_gpio";
pinctrl-0 = <&uart9m0_rtsn>, <&bt_reset_gpio>, <&bt_wake_gpio>, <&bt_irq_gpio>;
pinctrl-1 = <&uart9_gpios>;
BT,reset_gpio = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>; //蓝牙的复位脚
BT,wake_gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; //CPU唤醒蓝牙模块的GPIO
BT,wake_host_irq = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>; //蓝牙模块唤醒CPU的GPIO
status = "okay";
};
uart的rts脚:UART_CTS_N
复位脚:BT_REG_ON->BT_REG_ON_S->BT_REG_ON_H
CPU唤醒蓝牙GPIO:脚:BT_WAKE
蓝牙唤醒CPU模块的GPIO:脚BT_HOST_WAKE
WIFI配置:
wireless_wlan: wireless-wlan {
compatible = "wlan-platdata";
wifi_chip_type = "ap6398s"; // 模块名称
pinctrl-names = "default";
pinctrl-0 = <&wifi_host_wake_irq>; ///<&wifi_poweren_gpio>;
WIFI,host_wake_irq = <&gpio0 RK_PB2 GPIO_ACTIVE_HIGH>; // wifi模块唤醒CPU
WIFI,poweren_gpio = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; // 控制wifi模块电源
status = "okay";
};
wifi唤醒CPU:脚:WL_HOST_WAKE
控制wifi模块电源:脚WL_REG_ON
SDIO配置:
&sdio {
max-frequency = <150000000>;
no-sd;
no-mmc;
bus-width = <4>;
disable-wp;
cap-sd-highspeed;
cap-sdio-irq;
keep-power-in-suspend;
mmc-pwrseq = <&sdio_pwrseq>;
non-removable;
pinctrl-names = "default";
pinctrl-0 = <&sdiom0_pins>;
sd-uhs-sdr104;
status = "okay";
};
驱动软件配置:
确认defconfig是将wifi驱动编译成ko modules的配置。
上面配置好后编译内核时会自动编译wifi ko文件。
编译android的时候会自动把ko文件和wifi固件编译到vendor.img,存放在vendor/lib/modules目录下。
vendor/rockchip/common/wifi/wifi.mk
WIFI_KO_FILES := $(shell find $(TOPDIR)$(PRODUCT_KERNEL_PATH)/drivers/net/wireless/rockchip_wlan -name "*.ko" -type f)
BOARD_VENDOR_KERNEL_MODULES += \
$(foreach file, $(WIFI_KO_FILES), $(file))
WifiFirmwareFile := $(shell ls $(CUR_PATH)/wifi/firmware)
PRODUCT_COPY_FILES += \
$(foreach file, $(WifiFirmwareFile), $(CUR_PATH)/wifi/firmware/$(file):$(TARGET_COPY_OUT_VENDOR)/etc/firmware/$(file))
~
这个脚本有两个功能:
把内核的ko文件(正基模块:bcmdhb.ko)安装到vendor/lib/modules目录:
把vendor/rockchip/common/wifi/firmware/目录下的蓝牙固件文件安装到固件的vendor/etc/firmware/目录下.
所以要把蓝牙模块的固件放在此目录下编译:
wifi芯片识别流程:
开机对wifi模块上电,并自动进行扫描sdio操作。
系统打开wifi后,分别对系统sys/bus/sdio(sdio wifi)下的uevent进行读取,
软件会根据读取的pid和vid识别蓝牙芯片模块。
查看pid,vid:
rk3588_t:/sys/bus/sdio/devices/mmc0:0001:1 # cat uevent
DRIVER=bcmsdh_sdmmc
SDIO_CLASS=00
SDIO_ID=02D0:AAE8 // pid(02d0), vid(aae8)
SDIO_REVISION=0.0
MODALIAS=sdio:c00v02D0dAAE8
rk3588_t:/sys/bus/sdio/devices/mmc0:0001:1 #
根据wifi/bt芯片vid和pid加载对应的ko和蓝牙驱动:
代码加载位置:frameworks/opt/net/wifi/libwifi_hal:
在配置表中supported_wifi_devices[]和module_list[]加上我们的蓝牙模块名称,此名称可以板子上贴片信息:AP6275S,pid:vid(这里"02d0:aae8")一定对应正确。通过/sys/bus/sdio/devices/mmc0:0001:1 # cat uevent查看。
hardware/broadcom/libbt下的修改配置:
注意:对照硬件图修改蓝牙模块用的uart串口,sdk默认是ttyS8
我们芯片是串口9,所以要改成ttyS9。
device/rockchip/rk3588/rk3588_t/BoardConfig.mk:
4.识别到wifi类型后加载不同的wpa_supplicant参数启动wifi。
核心代码目录:
android /frameworks/opt/net/wifi
kernel/net/rfkill/rfkill-wlan.c
hardware/broadcom
external/wpa_supplicant_8/wpa_supplicant/main.c
参考:
https://blog.csdn.net/weixin_43245753/article/details/123999080文章来源:https://www.toymoban.com/news/detail-613798.html
RKDocs/android/wifi/Rockchip_Introduction_WIFI_Configuration_CN&EN.pdf文章来源地址https://www.toymoban.com/news/detail-613798.html
到了这里,关于Rockchip Android13 x3588蓝牙wifi/bt调试心得的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!