RK3588 & Android13 调试RTL8852BS(WIFI&BT)

打印 上一主题 下一主题

主题 962|帖子 962|积分 2886

前言

迩来在搞广告机项目,用到RTL8852BS的模块,发现这个模块的相关文章比较少(大多都是AP的),虽然wifi-bt的调试都差不多,但是还是想记录一下调试的过程,做一下总结,如有错误之处,还望各位大佬指教!
平台:RK3588 & Android13 & kernel-5.10
模块芯片:RTL8852BS
接口:SDIO & UART
内容:调试RTL8852BS模块的WiFi以及BT功能

一、WIFI

1. dst配置

调试的第一步,先根据原理图配置dts,让sdio可以扫描到模块,部分原理图如下:



sdio及wifi节点的相关配置
  1. /* SDIO接口Wi-Fi专用配置: WIFI_REG_ON: Wi-Fi的电源使能PIN脚 */
  2.         sdio_pwrseq: sdio-pwrseq {
  3.                 compatible = "mmc-pwrseq-simple";
  4.                 clocks = <&hym8563>; // 外部时钟,蓝牙需要
  5.                 clock-names = "ext_clock";
  6.                 pinctrl-names = "default";
  7.                 pinctrl-0 = <&wifi_enable_h>;
  8.                 reset-gpios = <&gpio2 RK_PB5 GPIO_ACTIVE_LOW>;  /*跟电源使能状态恰好相反:高有效为LOW,低有效则为HIGH。切记:这个配置跟下面的WIFI,poweren_gpio是互斥的,不能同时配置!!!*/
  9.                
  10.                  /*特别注意:reset-gpios的GPIO_ACTIVE 配置跟poweren_gpio配置的电源使能状态恰好是相反的*/
  11.         };
  12.     /* Wi-Fi节点 */
  13.         wireless_wlan: wireless-wlan {
  14.                 compatible = "wlan-platdata";
  15.                 wifi_chip_type = "rtl8852bs";
  16.                 pinctrl-names = "default";
  17.                 pinctrl-0 = <&wifi_host_wake_irq>;
  18.                 WIFI,host_wake_irq = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;
  19.                 //WIFI,poweren_gpio = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>;
  20.                 status = "okay";
  21.         };
  22. &sdio {
  23.         max-frequency = <100000000>;/* sdio接口的最大频率,可调整 */
  24.         supports-sdio;
  25.         bus-width = <4>;/* 4线模式 */
  26.         disable-wp;
  27.         cap-sd-highspeed;
  28.         cap-sdio-irq;
  29.         keep-power-in-suspend;
  30.         mmc-pwrseq = <&sdio_pwrseq>;
  31.         non-removable;
  32.         num-slots = <1>;
  33.         rockchip,default-sample-phase = <90>;
  34.           pinctrl-names = "default";
  35.         pinctrl-0 = <&sdiom0_pins>;
  36.         sd-uhs-sdr50;
  37.     sd-uhs-sdr104;/* 支持SDIO3.0 */
  38.         status = "okay";
  39. };
  40. /* SDIO接口Wi-Fi专用配置:WIFI_REG_ON脚的pinctrl的配置 */
  41. /* WIFI_WAKE_HOST脚的pinctrl的配置 */
  42. &pinctrl {
  43.         sdio-pwrseq {
  44.                 wifi_enable_h: wifi-enable-h {
  45.                         rockchip,pins =
  46.                         /* 对应上面的WIFI_REG_ON,关掉上下拉,防止不能拉高或拉低 */
  47.                         <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
  48.                 };
  49.         };
  50.     wireless-wlan {
  51.                 wifi_host_wake_irq: wifi-host-wake-irq {
  52.                         rockchip,pins = <2 RK_PB4 RK_FUNC_GPIO &pcfg_pull_down>;
  53.                 };
  54.         };
  55. };
复制代码
理论上配好这些以后sdio就能扫到模块了,可以这样查看
  1. console:/ # ls /sys/bus/sdio/devices/                                          
  2. mmc0:0001:1
复制代码
还可以查看模块的pid 以及 vid,后续加载对应驱动需要用
  1. console:/ # cat /sys/bus/sdio/devices/mmc0\:0001\:1/uevent                     
  2. DRIVER=rtl8852bs
  3. SDIO_CLASS=07
  4. SDIO_ID=024C:B852
  5. SDIO_REVISION=0.0
  6. MODALIAS=sdio:c07v024CdB852
复制代码
2. 驱动移植

sdio扫到设备以后下一步就是移植驱动,这个很简单,把驱动添加到源码根目录下的
  1. external/wifi_driver
复制代码
然后修改Makefile编译驱动即可,仿照已适配的模块去改;需要留意的是,驱动内里的Makefile文件也需要修改,改到RK平台,详细可以参考这篇博客驱动编译报错相关章节
RK3588 & Android12 调试 RTL8852BE(wifi篇)_rk3588 android12调试rtl8852bs-CSDN博客
3. framework层修改

驱动移植成功以后,下一步就需要让系统去加载对应的驱动,主要修改framework的一些文件,详细参考下面这篇博客
RK3588 & Android12 调试 RTL8852BE(wifi篇)_rk3588 android12调试rtl8852bs-CSDN博客
到这里WiFi功能理论上就可以使用了

二、蓝牙


1. dts配置

  1. /* 蓝牙节点 */
  2. /* 注意下面关于UART的配置:uart9_xfer/uart9_rts/uart9_ctsn
  3. * 每个平台的名字可能不一样,要在对应芯片平台的dts/dtsi里面找下对
  4. * 应的uart写法,比如uart9_ctsn有些平台的名字为uart9_cts.
  5. */
  6. wireless_bluetooth: wireless-bluetooth {
  7.                 compatible = "bluetooth-platdata";
  8.                 //clocks = <&hym8563>;    //时钟在sdio_pwrseq里面配置了这里就不要重复配置
  9.                 clock-names = "ext_clock";
  10.         /* 这里要配置对应主控UART的RTS脚 */
  11.                 uart_rts_gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_LOW>;
  12.                 pinctrl-names = "default", "rts_gpio";
  13.                 pinctrl-0 = <&uart9m0_rtsn>, <&bt_reset_gpio>, <&bt_irq_gpio>;
  14.                 pinctrl-1 = <&uart9_gpios>;
  15.         /* BT_REG_ON 蓝牙电源的开关 */
  16.                 BT,reset_gpio    = <&gpio2 RK_PB6 GPIO_ACTIVE_HIGH>;
  17.                 //BT,wake_gpio     = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
  18.                 BT,wake_host_irq = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>;
  19.                 status = "okay";
  20.         };
  21. /* 打开对应的UART配置 */
  22. &uart9 {
  23.         status = "okay";
  24.         pinctrl-names = "default";
  25.     /* 这里配置对应主控UART的TX/RX/CTS PIN ,不要配置RTS PIN*/
  26.         pinctrl-0 = <&uart9m0_xfer &uart9m0_ctsn>;
  27. };
  28. /* uart9_rts_gpio */
  29. wireless-bluetooth {
  30.                 uart9_gpios: uart9-gpios {
  31.                         rockchip,pins = <4 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>;
  32.                 };
  33.                 bt_reset_gpio: bt-reset-gpio {
  34.                         rockchip,pins = <2 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
  35.                 };
  36.                 bt_irq_gpio: bt-irq-gpio {
  37.                         rockchip,pins = <2 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
  38.                 };
  39.         };
复制代码
配置完这些,dts部分就完成了,理论上dev下面会生成对应的uart设备文件
  1. console:/ # ls /dev/ttyS*                                                      
  2. /dev/ttyS7  /dev/ttyS9
复制代码

 2. hardware配置

2.1添加蓝牙固件文件

  1. rk3588_an13/hardware/realtek/rtkbt/vendor/firmware$ git status .
  2. On branch
  3. Your branch is up to date with
  4. Changes to be committed:
  5.   (use "git reset HEAD <file>..." to unstage)
  6.         modified:   BT_Firmware.mk
  7. Untracked files:
  8.   (use "git add <file>..." to include in what will be committed)
  9.         rtl8852bs_config
  10.         rtl8852bs_fw
复制代码
对应mk文件修改如下,其实就是为了编译的时候copy蓝牙固件文件到系统对应位置
  1. diff --git a/rk3588_an13/hardware/realtek/rtkbt/vendor/firmware/BT_Firmware.mk b/rk3588_an13/hardware/realtek/rtkbt/vendor/firmware/BT_Firmware.mk
  2. index 5d4f87b135d..cc515fb6e2a 100755
  3. --- a/rk3588_an13/hardware/realtek/rtkbt/vendor/firmware/BT_Firmware.mk
  4. +++ b/rk3588_an13/hardware/realtek/rtkbt/vendor/firmware/BT_Firmware.mk
  5. @@ -65,3 +65,5 @@ PRODUCT_COPY_FILES += \
  6.         $(LOCAL_PATH)/Firmware/BT/rtl8852as_fw:$(TARGET_COPY_OUT_VENDOR)/firmware/rtl8852as_fw \
  7.         $(LOCAL_PATH)/Firmware/BT/rtl8852au_config:$(TARGET_COPY_OUT_VENDOR)/firmware/rtl8852au_config \
  8.         $(LOCAL_PATH)/Firmware/BT/rtl8852au_fw:$(TARGET_COPY_OUT_VENDOR)/firmware/rtl8852au_fw \
  9. +       $(LOCAL_PATH)/Firmware/BT/rtl8852bs_config:$(TARGET_COPY_OUT_VENDOR)/firmware/rtl8852bs_config \
  10. +       $(LOCAL_PATH)/Firmware/BT/rtl8852bs_fw:$(TARGET_COPY_OUT_VENDOR)/firmware/rtl8852bs_fw \
复制代码
 注:如果嫌麻烦,直接把蓝牙固件文件丢到vendor/rockchip/common/wifi/firmware/也行

2.2 指定UART

蓝牙固件文件加入以后,还要指定蓝牙使用的UART,patch如下: 
hardware:
  1. rk3588_an13/hardware$ git diff .
  2. diff --git a/rk3588_an13/hardware/broadcom/libbt/include/vnd_rksdk.txt b/rk3588_an13/hardware/broadcom/libbt/include/vnd_rksdk.txt
  3. old mode 100644
  4. new mode 100755
  5. index 7d3f8104d0c..bf0c98b69ce
  6. --- a/rk3588_an13/hardware/broadcom/libbt/include/vnd_rksdk.txt
  7. +++ b/rk3588_an13/hardware/broadcom/libbt/include/vnd_rksdk.txt
  8. @@ -1,4 +1,4 @@
  9. -BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyS0"
  10. +BLUETOOTH_UART_DEVICE_PORT = "/dev/ttyS9"
  11. FW_PATCHFILE_LOCATION = "/vendor/etc/firmware/"
  12. VENDOR_LIB_CONF_FILE = "/vendor/etc/bluetooth/bt_vendor.conf"
  13. UART_TARGET_BAUD_RATE = 1500000
  14. diff --git a/rk3588_an13/hardware/broadcom/libbt/src/hardware.c b/rk3588_an13/hardware/broadcom/libbt/src/hardware.c
  15. old mode 100644
  16. new mode 100755
  17. diff --git a/rk3588_an13/hardware/realtek/rtkbt/vendor/etc/bluetooth/rtkbt.conf b/rk3588_an13/hardware/realtek/rtkbt/vendor/etc/bluetooth/rtkbt.conf
  18. index a1e9b393613..3f2bbffd259 100755
  19. --- a/rk3588_an13/hardware/realtek/rtkbt/vendor/etc/bluetooth/rtkbt.conf
  20. +++ b/rk3588_an13/hardware/realtek/rtkbt/vendor/etc/bluetooth/rtkbt.conf
  21. @@ -9,7 +9,7 @@ DevClassMinorClass=0x1C
  22. #Indicate USB or UART driver bluetooth
  23. #BtDeviceNode=/dev/rtkbt_dev
  24. -BtDeviceNode=?/dev/ttyS1:H5
  25. +BtDeviceNode=?/dev/ttyS9:H5
  26. # BtSnoop log output file
  27. BtSnoopFileName=/data/misc/bluedroid/btsnoop_hci.cfa
  28. diff --git a/rk3588_an13/hardware/realtek/rtkbt/vendor/etc/bluetooth/rtkbt_S0.conf b/rk3588_an13/hardware/realtek/rtkbt/vendor/etc/bluetooth/rtkbt_S0.conf
  29. index 87a8241f179..bb13aea7240 100755
  30. --- a/rk3588_an13/hardware/realtek/rtkbt/vendor/etc/bluetooth/rtkbt_S0.conf
  31. +++ b/rk3588_an13/hardware/realtek/rtkbt/vendor/etc/bluetooth/rtkbt_S0.conf
  32. @@ -9,7 +9,7 @@ DevClassMinorClass=0x1C
  33. #Indicate USB or UART driver bluetooth
  34. #BtDeviceNode=/dev/rtk_btusb
  35. -BtDeviceNode=?/dev/ttyS0:H5
  36. +BtDeviceNode=?/dev/ttyS9:H5
  37. # Enable BtSnoop logging function
  38. # valid value : true, false
复制代码
device: 
  1. /rk3588_an13/device/rockchip/rk3588/rk3588_t$ git diff .
  2. diff --git a/rk3588_an13/device/rockchip/rk3588/rk3588_t/bt_vendor.conf b/rk3588_an13/device/rockchip/rk3588/rk3588_t/bt_vendor.conf
  3. old mode 100644
  4. new mode 100755
  5. index d98c62e94fe..793e90a39f7
  6. --- a/rk3588_an13/device/rockchip/rk3588/rk3588_t/bt_vendor.conf
  7. +++ b/rk3588_an13/device/rockchip/rk3588/rk3588_t/bt_vendor.conf
  8. @@ -1,5 +1,5 @@
  9. # UART device port where Bluetooth controller is attached
  10. -UartPort = /dev/ttyS8
  11. +UartPort = /dev/ttyS9
  12. # Firmware patch file location
  13. FwPatchFilePath = /vendor/etc/firmware/
复制代码
 到这里,蓝牙功能的配置就完成了,理论上蓝牙就能用了!

三、遇到的问题

3.1 sdio扫不到模块

在根据如上步调配置完成以后,sdio居然没有扫描到模块!后检查发现缘故原由是硬件将clk和cmd搞反了!

末了交叉飞线就可以了,以是一定要细致对每一个引脚,确认硬件无误!

3.2. 蓝牙打不开

点击开启蓝牙以后logcat会有如下信息
  1. 04-18 09:08:43.572  5657  5657 I bt_userial_vendor: userial vendor open: opening /dev/ttyS1
  2. 04-18 09:08:43.572  5657  5657 E bt_userial_vendor: userial vendor open: unable to open /dev/ttyS1
复制代码
缘故原由就是蓝牙使用的uart没有指定对!按照上面第二节的2.2修改就好了

四、小结 

wifi配置主要就是:sdio -> WIFI_REG_ON -> 驱动移植 -> 加载驱动
bt配置主要就是:clock -> BT_REG_ON -> uart ->  固件文件移植 -> 加载固件文件
都是一些简单的东西。

五、参考文章

【RK3588 开发笔记——wifi蓝牙调试】_rk3588 wifi-CSDN博客
 Rockchip Android13 x3588蓝牙wifi/bt调试心得_android13 wifi叫醒-CSDN博客

六、资料包

  1. 链接:https://pan.baidu.com/s/1uOC6MVjQibJwHvq9R_1hXQ
  2. 提取码:wh8s
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表