咱們項目在開發智能音箱的過程當中分別採購了 ROC-RK3308-CC 和 Amlogic 420 開發板,這兩塊開發板默認狀況下執行 hciconfig 均沒法枚舉出開發板中的藍牙設備信息。
確認藍牙設備是否被禁用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
確保藍牙設備已打開post
判斷藍牙設備是否已阻斷ui
# 已處於軟阻斷 Soft blocked: blocked # 已處於硬阻斷 Hard blocked: blocked
啓禁用軟阻斷spa
# 啓用軟阻斷 rfkill block 0 # 取消軟阻斷 rfkill unblock 0
查詢串口名稱及波特率.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
查找藍牙固件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
加載藍牙固件
確保開發板中存在藍牙固件引導程序
# 若是不存在需下載 brcm_patchram_plus.c 源碼編譯 find -name brcm_patchram_plus
加載藍牙固件並設置波特率
# 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 &
驗證藍牙狀態
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
rfkill 是 Linux 內核中的一個子系統,提供一個接口用於查詢、鎖定並取消鎖定計算機系統中的無線電設備。無線電設備包括Wi-Fi、藍牙和3G設備,這些設備消耗電源,在不使用時可經過取消激活的方式下降功耗。
鎖定狀態分類
經常使用命令
# 查看全部無線設備狀態 rfkill list # 軟鎖定或取消鎖定設備 rfkill block 0 rfkill unblock 0 # 軟鎖定一類設備 rfkill block wifi # 軟鎖定全部設備 rfkill block all
stty 命令主要功能是改變和打印終端設置,此處用詞命令查看串口波特率。
經常使用命令
# 查看 ttyS0 串口信息 stty -F /dev/ttyS0 -a
hciconfig 命令可查看藍牙適配器信息,並及進行簡單的設置。
經常使用命令
# 查看可用的藍牙設備 hciconfig # 軟件層打開/關閉設備 hciconfig hci0 up hciconfig 0 down
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 &
依賴環境
BusyBox
一、Target packages->rkwifibt 選中,且 wifi chip support 選中 'AP6236' 二、System tools->rfkill 選中
解決步驟
藍牙芯片上電
# 查看藍牙芯片狀態,此時爲軟阻斷(關閉)狀態 / # 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
加載藍牙固件
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 &
驗證藍牙已可用
# 此時可發現藍牙設備 / # 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
依賴環境
BusyBox
一、System tools->rfkill 選中
brcm_patchram_plus
一、gcc 交叉編譯 brcm_patchram_plus.c 源碼並將生成的 brcm_patchram_plus 上傳至 /usr/bin 目錄。 二、經過 chmod +x /usr/bin/brcm_patchram_plus 命令添加可執行權限
解決步驟
結束 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
加載藍牙固件
# 保險起見執行下列語句,實測有時查看 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 &
驗證藍牙已可用
# 此時可發現藍牙設備 / # 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