当前位置:   article > 正文

Rockchip Android13 x3588蓝牙wifi/bt调试心得_android13 wifi唤醒

android13 wifi唤醒

x3588的wifi/bt使用的是外挂双模模块,根据数据通信接口的差异分为PCIE和SDIO两种。

x3588使用的是SDIO接口双模模块:AP6398S。

DTS参考配置:

参考rockchip android13: rk3588-x3588-sdk.dts

  • 蓝牙配置:

  1. wireless_bluetooth: wireless-bluetooth {
  2. compatible = "bluetooth-platdata";
  3. clocks = <&hym8563>; // 外部时钟
  4. clock-names = "ext_clock";
  5. uart_rts_gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_LOW>; //uart的rts脚
  6. pinctrl-names = "default", "rts_gpio";
  7. pinctrl-0 = <&uart9m0_rtsn>, <&bt_reset_gpio>, <&bt_wake_gpio>, <&bt_irq_gpio>;
  8. pinctrl-1 = <&uart9_gpios>;
  9. BT,reset_gpio = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>; //蓝牙的复位脚
  10. BT,wake_gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; //CPU唤醒蓝牙模块的GPIO
  11. BT,wake_host_irq = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>; //蓝牙模块唤醒CPU的GPIO
  12. status = "okay";
  13. };
  • 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配置:

  1. wireless_wlan: wireless-wlan {
  2. compatible = "wlan-platdata";
  3. wifi_chip_type = "ap6398s"; // 模块名称
  4. pinctrl-names = "default";
  5. pinctrl-0 = <&wifi_host_wake_irq>; ///<&wifi_poweren_gpio>;
  6. WIFI,host_wake_irq = <&gpio0 RK_PB2 GPIO_ACTIVE_HIGH>; // wifi模块唤醒CPU
  7. WIFI,poweren_gpio = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; // 控制wifi模块电源
  8. status = "okay";
  9. };
  • wifi唤醒CPU:脚:WL_HOST_WAKE

  • 控制wifi模块电源:脚WL_REG_ON

  • SDIO配置:

  1. &sdio {
  2. max-frequency = <150000000>;
  3. no-sd;
  4. no-mmc;
  5. bus-width = <4>;
  6. disable-wp;
  7. cap-sd-highspeed;
  8. cap-sdio-irq;
  9. keep-power-in-suspend;
  10. mmc-pwrseq = <&sdio_pwrseq>;
  11. non-removable;
  12. pinctrl-names = "default";
  13. pinctrl-0 = <&sdiom0_pins>;
  14. sd-uhs-sdr104;
  15. status = "okay";
  16. };

驱动软件配置:

  • 确认defconfig是将wifi驱动编译成ko modules的配置。

上面配置好后编译内核时会自动编译wifi ko文件。

  • 编译android的时候会自动把ko文件和wifi固件编译到vendor.img,存放在vendor/lib/modules目录下。

vendor/rockchip/common/wifi/wifi.mk

  1. WIFI_KO_FILES := $(shell find $(TOPDIR)$(PRODUCT_KERNEL_PATH)/drivers/net/wireless/rockchip_wlan -name "*.ko" -type f)
  2. BOARD_VENDOR_KERNEL_MODULES += \
  3. $(foreach file, $(WIFI_KO_FILES), $(file))
  4. WifiFirmwareFile := $(shell ls $(CUR_PATH)/wifi/firmware)
  5. PRODUCT_COPY_FILES += \
  6. $(foreach file, $(WifiFirmwareFile), $(CUR_PATH)/wifi/firmware/$(file):$(TARGET_COPY_OUT_VENDOR)/etc/firmware/$(file))
  7. ~

这个脚本有两个功能:

  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:

  1. rk3588_t:/sys/bus/sdio/devices/mmc0:0001:1 # cat uevent
  2. DRIVER=bcmsdh_sdmmc
  3. SDIO_CLASS=00
  4. SDIO_ID=02D0:AAE8 // pid(02d0), vid(aae8)
  5. SDIO_REVISION=0.0
  6. MODALIAS=sdio:c00v02D0dAAE8
  7. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/301664
推荐阅读
相关标签
  

闽ICP备14008679号