当前位置: 首页 > Linux

RK3308解决没有蓝牙设备的问题

时间:2023-04-06 18:41:54 Linux

1.问题描述在开发智能音箱的过程中,我们的项目分别采购了ROC-RK3308-CC和Amlogic420开发板。列出开发板中的蓝牙设备信息。问题现象截图ROC-RK3308-CC采用正极生产的AP6236芯片,集成了蓝牙和WIFI功能。Amlogic420采用了正极生产的AP6356S芯片,集成了蓝牙和WIFI功能。2.解决过程确认蓝牙设备是否被禁用查看无线设备型号文件#ls/sys/class/rfkillrfkill0rfkill1rfkill2查看无线设备电源状态#rfkilllist0:bt-dev:BluetoothSoftblocked:noHardblocked:no1:phy0:WirelessLANSoftblocked:noHardblocked:no2:brcmfmac-wifi:WirelessLANSoftblocked:noHardblocked:no请确保蓝牙设备已开启,判断蓝牙设备是否已被屏蔽#已经处于软屏蔽Softblocked:blocked#已经硬阻塞hardblocked:blockedBlock#开启软阻塞rfkillblock0#取消软阻塞rfkillunblock0查询串口名称和波特率,查看设备有哪些串口设备#ls-l/dev/ttyS*crw-rw----1rootroot244,0Jan100:00/dev/ttyS0crw-rw----1rootroot244,1Jan100:00/dev/ttyS1检查串口波特率rate#stty-F/dev/ttyS0speed2000000波特;行=0;内部=^C;退出=^\;擦除=^?;杀死=^U;eof=^D;eol=;eol2=;swtch=;开始=^Q;停止=^S;暂停=^Z;rprnt=^R;werase=^W;lnext=^V;冲水=^O;最小值=1;=0;-brkint-icrnl-imaxbel-opost-isig-icanon-iexten-echo查找蓝牙固件不确定蓝牙固件在哪里#查找后比较同名文件是否一致,缩小查找范围find/-name*.hcd/etc/bluetooth/BCM4354.hcd/etc/bluetooth/BCM4359C0SR2.hcd/rom/etc/bluetooth/BCM4354.hcd/rom/etc/bluetooth/BCM4359C0SR2.hcd确认开发板蓝牙固件路径#RockchipRK3308AP6236开发板蓝牙WIFI芯片/system/etc/firmware/BCM4343B0.hcd#Amlogic420开发板AP6356S蓝牙WIFI芯片/etc/bluetooth/BCM4354.hcd加载蓝牙固件,确保蓝牙固件bootloader存在开发板#如果不存在,下载brcm_patchram_plus.c源码编译find-namebrcm_patchram_plus确认蓝牙使用的串口号(ttyS4,如果在busybox中看不到类似信息,直接按照枚举法)加载蓝牙固件并设置波特率#ROC-RK3308-CC(默认存在brcm_patchram_plus1文件)brcm_patchram_plus1--bd_addr_rand--enable_hci--no2bytes--use_baudrate_for_download--tosleep200000--baudrate1500000--patchram/system/etc/firmware/BCM4343B0.hcd/dev/ttyS4&#Amlogic(brcm_patchram_plus默认不存在,需要手动编译)brcm_patchram_plus--enable_hci--no2bytes--tosleep200000--baudrate2000000--patchram/etc/bluetooth/BCM4354.hcd/dev/ttyS1&VerifyBluetoothstatushciconfig命令可以发现蓝牙设备/#hciconfighci0:类型:主总线:UARTBD地址:B0:F1:EC:3D:FD:31ACLMTU:1021:8SCOMTU:64:1DOWNRX字节:668acl:0sco:0事件:34错误:0TXbytes:423acl:0sco:0commands:34errors:0三、工具介绍1.rfkillrfkill是Linux内核中的一个子系统,它提供了一个接口,用于查询、锁定和解锁计算机系统中的无线电设备radioDevices包括耗电的Wi-Fi、蓝牙和3G设备,在不使用时可以将其停用以降低功耗。锁定状态分类软封锁(Softblocked):可以被软件重新激活的状态硬封锁(Hardblocked):软件无法重新激活的状态常用命令#查看所有无线设备状态rfkilllist#软锁定或解锁设备rfkillblock0rfkillunblock0#软锁一类设备rfkillblockwifi#软锁所有设备rfkillblockall2.sttystty命令的主要作用是更改和打印终端设置,这里使用word命令查看串口波特率速度。常用命令#查看ttyS0串口信息stty-F/dev/ttyS0-a3.hciconfighciconfig命令可以查看蓝牙适配器信息并进行简单的设置。常用命令#查看可用的蓝牙设备hciconfig#软件层打开/关闭设备hciconfighci0uphciconfig0down4.brcm_patchram_plusbrcm_patchram_plus用于加载蓝牙固件,实现与特定串口的绑定。常用命令#ROC-RK3308-CCAP6236brcm_patchram_plus1--bd_addr_rand--enable_hci--no2bytes--use_baudrate_for_download--tosleep200000--baudrate1500000--patchram/system/etc/firmware/BCM4343B0.hcd/dev/ttyS44AmlogicAP6356Sbrcm_patchram_plus--enable_hci--no2bytes--tosleep200000--baudrate2000000--patchram/etc/bluetooth/BCM4354.hcd/dev/ttyS1&4.解决ROC-RK3308-CC依赖环境BusyBox1,Targetpackages->rkwifibtSelect,Andwifichipsupport选择'AP6236'2,Systemtools->rfkill选择解决步骤Bluetoothchippoweron#查看蓝牙芯片的状态,此时是softblocked(closed)/#rfkilllist0:bt_default:BluetoothSoftblocked:yesHardblocked:no1:phy0:WirelessLANSoftblocked:noHardblocked:no2:brcmfmac-wifi:WirelessLANSoftblocked:noHardblocked:no#取消软阻塞/#rfkillunblock0#Checkcurrentstatusagain/#rfkilllist0:bt_default:BluetoothSoftblocked:noHardblocked:no1:phy0:WirelessLANSoftblocked:noHardblocked:no2:brcmfmac-wifi:无线局域网软阻塞:无硬阻塞:无加载蓝牙固件brcm_patchram_plus1--bd_addr_rand--enable_hci--no2bytes--use_baudrate_for_download--tosleep200000--baudrate1500000--patchram/system/etc/firmware/BCM4343B0.hcd/dev/ttyS4&验证蓝牙是否可用#此时可以找到蓝牙设备/#hciconfighci0:Type:PrimaryBus:UARTBDAddress:BC:71:BE:60:26:44ACLMTU:1021:7SCOMTU:64:1DOWNRXbytes:694acl:0sco:0events:36errors:0TXbytes:431acl:0sco:0commands:36errors:0#startbluetoothdevice/#hciconfig0up#蓝牙设备软件层工作正常/#hciconfighci0:类型:主总线:UARTBD地址:BC:71:BE:60:26:44ACLMTU:1021:7SCOMTU:64:1UPRUNNINGRX字节:1388acl:0sco:0事件:72errors:0TXbytes:862acl:0sco:0commands:72errors:05.解决Amlogic420依赖环境BusyBox1,Systemtools->rfkill选择brcm_patchram_plus1,gcc交叉编译brcm_patchram_plus.c源码并上传生成brcm_patchram_plus到/usr/bin目录2、使用chmod+x/usr/bin/brcm_patchram_plus命令添加可执行权限,解决结束bsa_server进程的步骤#查看是否有bsa_server进程/#ps|grepbsa_server2327root/usr/bin/bsa_server-r13-lpm-all=0-pp/etc/bluetooth-d/dev/ttyS1#存在该进程时,以下操作将无效/#kill2327加载蓝牙固件#为了保险起见执行下面的语句,有时在实测中检查ttyS0端口的波特率为115200,执行后可以保证是2000000echo1>/sys/class/rfkill/rfkill0/state#Loadfirmware(brcm_patchram_plusname取决于上传文件时的文件名)brcm_patchram_plus--enable_hci--no2bytes--tosleep200000--baudrate2000000--patchram/etc/bluetooth/BCM4354.hcd/dev/ttyS1&验证蓝牙是否可用#蓝牙设备此时可以查到/#hciconfighci0:Type:PrimaryBus:UARTBDAddress:BC:71:BE:60:26:44ACLMTU:1021:7SCOMTU:64:1DOWNRXbytes:694acl:0sco:0events:36errors:0TXbytes:431acl:0sco:0commands:36errors:0#启动蓝牙设备/#hciconfig0up#蓝牙设备软件层正常工作/#hciconfighci0:Type:PrimaryBus:UARTBD地址:BC:71:BE:60:26:44ACLMTU:1021:7SCOMTU:64:1UPRUNNINGRX字节:1388acl:0sco:0events:72errors:0TXbytes:862acl:0sco:0commands:72errors:0参考链接RK3308蓝牙使用hcitool和gattool使用