Rockchip Android 13 x3588蓝牙WiFi/BT调试心得分享

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))
    ~                                                                                                                              

    这个脚本有两个功能:

    1. 把内核的ko文件(正基模块:bcmdhb.ko)安装到vendor/lib/modules目录:

    1. 把vendor/rockchip/common/wifi/firmware/目录下的蓝牙固件文件安装到固件的vendor/etc/firmware/目录下.

    所以要把蓝牙模块的固件放在此目录下编译:

  • wifi芯片识别流程:

    1. 开机对wifi模块上电,并自动进行扫描sdio操作。

    1. 系统打开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 #
    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

    RKDocs/android/wifi/Rockchip_Introduction_WIFI_Configuration_CN&EN.pdf

    物联沃分享整理
    物联沃-IOTWORD物联网 » Rockchip Android 13 x3588蓝牙WiFi/BT调试心得分享

    发表回复