RK3308 解決無藍牙設備的問題

1、問題描述

咱們項目在開發智能音箱的過程當中分別採購了 ROC-RK3308-CC 和 Amlogic 420 開發板,這兩塊開發板默認狀況下執行 hciconfig 均沒法枚舉出開發板中的藍牙設備信息。
  • 問題現象截圖
    clipboard.png
  • ROC-RK3308-CC 使用正基生產的 AP6236 芯片,該芯片集成了藍牙和WIFI功能
  • Amlogic 420 使用正基生產的 AP6356S 芯片,該芯片集成了藍牙和WIFI功能

2、解決流程

  1. 確認藍牙設備是否被禁用html

    • 查看無線設備模型文件less

      # ls /sys/class/rfkill
      rfkill0  rfkill1  rfkill2
    • 查看無線設備電源狀態工具

      # rfkill list
      0: bt-dev: Bluetooth
          Soft blocked: no
          Hard blocked: no
      1: phy0: Wireless LAN
          Soft blocked: no
          Hard blocked: no
      2: brcmfmac-wifi: Wireless LAN
          Soft blocked: no
          Hard blocked: no
  2. 確保藍牙設備已打開post

    • 判斷藍牙設備是否已阻斷ui

      # 已處於軟阻斷
      Soft blocked: blocked
      
      # 已處於硬阻斷
      Hard blocked: blocked
    • 啓禁用軟阻斷spa

      # 啓用軟阻斷
      rfkill block 0
      
      # 取消軟阻斷
      rfkill unblock 0
  3. 查詢串口名稱及波特率.net

    • 查看設備有哪些串口設備code

      # ls -l /dev/ttyS*
      crw-rw----    1 root     root      244,   0 Jan  1 00:00 /dev/ttyS0
      crw-rw----    1 root     root      244,   1 Jan  1 00:00 /dev/ttyS1
    • 查看串口波特率server

      # stty -F /dev/ttyS0
      speed 2000000 baud; line = 0;
      intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
      eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
      werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
      -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo
  4. 查找藍牙固件htm

    • 不肯定藍牙固件位於何處

      # 搜索後比較同名文件是否一致縮小試探範圍
      find / -name *.hcd
      /etc/bluetooth/BCM4354.hcd
      /etc/bluetooth/BCM4359C0SR2.hcd
      /rom/etc/bluetooth/BCM4354.hcd
      /rom/etc/bluetooth/BCM4359C0SR2.hcd
    • 已確認開發板藍牙固件路徑

      # Rockchip RK3308 開發板的 AP6236 藍牙WIFI芯片
      /system/etc/firmware/BCM4343B0.hcd
      
      # Amlogic 420 開發板的 AP6356S 藍牙WIFI芯片
      /etc/bluetooth/BCM4354.hcd
  5. 加載藍牙固件

    • 確保開發板中存在藍牙固件引導程序

      # 若是不存在需下載 brcm_patchram_plus.c 源碼編譯
      find -name brcm_patchram_plus
    • 確認藍牙使用的串口號(ttyS4,若是busybox中沒法看到相似信息則直接按枚舉法嘗試)
      clipboard.png
    • 加載藍牙固件並設置波特率

      # ROC-RK3308-CC(默認存在 brcm_patchram_plus1 文件)
      brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download  --tosleep  200000 --baudrate 1500000 --patchram  /system/etc/firmware/BCM4343B0.hcd /dev/ttyS4 &
      
      # Amlogic(默認不存在 brcm_patchram_plus,需手動編譯)
      brcm_patchram_plus --enable_hci --no2bytes --tosleep 200000 --baudrate 2000000 --patchram /etc/bluetooth/BCM4354.hcd /dev/ttyS1 &
  6. 驗證藍牙狀態

    • hciconfig 命令可發現藍牙設備

      / # hciconfig
      hci0:   Type: Primary  Bus: UART
      BD Address: B0:F1:EC:3D:FD:31  ACL MTU: 1021:8  SCO MTU: 64:1
      DOWN
      RX bytes:668 acl:0 sco:0 events:34 errors:0
      TX bytes:423 acl:0 sco:0 commands:34 errors:0

3、工具介紹

1. rfkill

rfkill 是 Linux 內核中的一個子系統,提供一個接口用於查詢、鎖定並取消鎖定計算機系統中的無線電設備。無線電設備包括Wi-Fi、藍牙和3G設備,這些設備消耗電源,在不使用時可經過取消激活的方式下降功耗。
  • 鎖定狀態分類

    • 軟鎖定(Soft blocked):可被軟件從新激活的狀態
    • 硬鎖定(Hard blocked):軟件沒法從新激活的狀態
  • 經常使用命令

    # 查看全部無線設備狀態
    rfkill list
    
    # 軟鎖定或取消鎖定設備
    rfkill block 0
    rfkill unblock 0
    
    # 軟鎖定一類設備
    rfkill block wifi
    
    # 軟鎖定全部設備
    rfkill block all

2. stty

stty 命令主要功能是改變和打印終端設置,此處用詞命令查看串口波特率。
  • 經常使用命令

    # 查看 ttyS0 串口信息
    stty -F /dev/ttyS0 -a

3. hciconfig

hciconfig 命令可查看藍牙適配器信息,並及進行簡單的設置。
  • 經常使用命令

    # 查看可用的藍牙設備
    hciconfig
    
    # 軟件層打開/關閉設備
    hciconfig hci0 up
    hciconfig 0 down

4. brcm_patchram_plus

brcm_patchram_plus 用於加載藍牙固件並實現與特定串口的綁定。
  • 經常使用命令

    # ROC-RK3308-CC AP6236
    brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download  --tosleep  200000 --baudrate 1500000 --patchram  /system/etc/firmware/BCM4343B0.hcd /dev/ttyS4 &
    
    # Amlogic 420 AP6356S
    brcm_patchram_plus --enable_hci --no2bytes --tosleep 200000 --baudrate 2000000 --patchram /etc/bluetooth/BCM4354.hcd /dev/ttyS1 &

4、解決 ROC-RK3308-CC

  • 依賴環境

    • BusyBox

      一、Target packages->rkwifibt 選中,且 wifi chip support 選中 'AP6236'
      二、System tools->rfkill 選中
  • 解決步驟

    1. 藍牙芯片上電

      # 查看藍牙芯片狀態,此時爲軟阻斷(關閉)狀態
      / # rfkill list
      0: bt_default: Bluetooth
          Soft blocked: yes
          Hard blocked: no
      1: phy0: Wireless LAN
          Soft blocked: no
          Hard blocked: no
      2: brcmfmac-wifi: Wireless LAN
          Soft blocked: no
          Hard blocked: no
      
      # 取消軟阻斷
      / # rfkill unblock 0
      
      # 再次查看當前狀態
      / # rfkill list
      0: bt_default: Bluetooth
              Soft blocked: no
              Hard blocked: no
      1: phy0: Wireless LAN
              Soft blocked: no
              Hard blocked: no
      2: brcmfmac-wifi: Wireless LAN
              Soft blocked: no
              Hard blocked: no
    2. 加載藍牙固件

      brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download  --tosleep  200000 --baudrate 1500000 --patchram  /system/etc/firmware/BCM4343B0.hcd /dev/ttyS4 &
    3. 驗證藍牙已可用

      # 此時可發現藍牙設備
      / # hciconfig
      hci0:   Type: Primary  Bus: UART
              BD Address: BC:71:BE:60:26:44  ACL MTU: 1021:7  SCO MTU: 64:1
              DOWN
              RX bytes:694 acl:0 sco:0 events:36 errors:0
              TX bytes:431 acl:0 sco:0 commands:36 errors:0
              
      # 啓動藍牙設備
      / # hciconfig 0 up
      
      # 藍牙設備軟件層已可正常工做
      / # hciconfig
      hci0:   Type: Primary  Bus: UART
              BD Address: BC:71:BE:60:26:44  ACL MTU: 1021:7  SCO MTU: 64:1
              UP RUNNING
              RX bytes:1388 acl:0 sco:0 events:72 errors:0
              TX bytes:862 acl:0 sco:0 commands:72 errors:0

5、解決 Amlogic 420

  • 依賴環境

    • BusyBox

      一、System tools->rfkill 選中
    • brcm_patchram_plus

      一、gcc 交叉編譯 brcm_patchram_plus.c 源碼並將生成的 brcm_patchram_plus 上傳至 /usr/bin 目錄。
      二、經過 chmod +x /usr/bin/brcm_patchram_plus 命令添加可執行權限
  • 解決步驟

    1. 結束 bsa_server 進程

      # 查看是否存在 bsa_server 進程
      / # ps | grep bsa_server
      2327 root     /usr/bin/bsa_server -r 13 -lpm -all=0 -pp /etc/bluetooth -d /dev/ ttyS1
      
      # 該進程存在時下面的操做會無效
      / # kill 2327
    2. 加載藍牙固件

      # 保險起見執行下列語句,實測有時查看 ttyS0 端口波特率爲 115200,執行後可保證爲 2000000
      echo 1 > /sys/class/rfkill/rfkill0/state
      
      # 加載固件(brcm_patchram_plus 名稱取決於你上傳文件時的文件名)
      brcm_patchram_plus --enable_hci --no2bytes --tosleep 200000 --baudrate 2000000 --patchram /etc/bluetooth/BCM4354.hcd /dev/ttyS1 &
    3. 驗證藍牙已可用

      # 此時可發現藍牙設備
      / # hciconfig
      hci0:   Type: Primary  Bus: UART
              BD Address: BC:71:BE:60:26:44  ACL MTU: 1021:7  SCO MTU: 64:1
              DOWN
              RX bytes:694 acl:0 sco:0 events:36 errors:0
              TX bytes:431 acl:0 sco:0 commands:36 errors:0
              
      # 啓動藍牙設備
      / # hciconfig 0 up
      
      # 藍牙設備軟件層已可正常工做
      / # hciconfig
      hci0:   Type: Primary  Bus: UART
              BD Address: BC:71:BE:60:26:44  ACL MTU: 1021:7  SCO MTU: 64:1
              UP RUNNING
              RX bytes:1388 acl:0 sco:0 events:72 errors:0
              TX bytes:862 acl:0 sco:0 commands:72 errors:0

參考連接

相關文章
相關標籤/搜索