最近在调试nxp的ap6256蓝牙模块驱动,写个笔记记录下心得。
文章目录
一、设备树配置
设备树配置的东西就三点,节点配置。还有就是驱动要编译。
1)把驱动匹配进去
bt_rfkill: bt_rfkill {
compatible = "fsl,mxc_bt_rfkill";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_bt>;
bt-power-gpios = <&gpio4 24 GPIO_ACTIVE_HIGH>;
status ="okay";
};
驱动文件就大家自己去弄了
2)bt_rst的拉高
pinctrl_bt: wlangrp {
fsl,pins = <
MX8MP_IOMUXC_SAI2_TXFS__GPIO4_IO24 0x41 /* BT_RST */
MX8MP_IOMUXC_NAND_DATA00__GPIO3_IO06 0x16 /* BT_WAKE_HOST */
>;
};
3)对应的串口配置
蓝牙一般用串口通讯。
&uart3 {
/* BT */
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart3>;
fsl,uart-has-rtscts;
status = "okay";
};
pinctrl_uart3: uart3grp {
fsl,pins = <
MX8MP_IOMUXC_SD1_DATA6__UART3_DCE_TX 0x140
MX8MP_IOMUXC_SD1_DATA7__UART3_DCE_RX 0x140
MX8MP_IOMUXC_SD1_RESET_B__UART3_DCE_RTS 0x140
MX8MP_IOMUXC_SD1_STROBE__UART3_DCE_CTS 0x140
>;
};
同时需要去看有没有管角复用这些。
这样的话就可以在串口里面看到相关打印信息。
$> dmesg | grep -i Bluetooth
Bluetooth: Core ver 2.18
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
Bluetooth: HCI UART driver ver 2.2
Bluetooth: HCI H4 protocol initialized
Bluetooth: HCI BCSP protocol initialized
Bluetooth: HCIATH3K protocol initialized
Bluetooth: RFCOMM TTY layer initialized
Bluetooth: RFCOMM socket layer initialized
Bluetooth: RFCOMM ver 1.11
Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Bluetooth: BNEP filters: protocol multicast
Bluetooth: BNEP socket layer initialized
Bluetooth: HIDP (Human Interface Emulation) ver 1.2
Bluetooth: HIDP socket layer initialized
如果是底层驱动,那么就可以用底层工具hci相关工具查看
$> hciconfig hci0 up
$> hciconfig
hci0: Type: BR/EDR Bus: UART
BD Address: 64:A3:CB:5B:69:F0 ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING PSCAN
RX bytes:1772 acl:0 sco:0 events:69 errors:0
TX bytes:1152 acl:0 sco:0 commands:65 errors:0
如果这里面没有设备出来
$> hciconfig hci0 up
no device ***
这个就是关于蓝牙的固件没有加载进板子里面(我的这个是这样的,不敢说全部)。
二、固件加载
BCM4345C5.hcd
固件名字是这个
底层可以直接通过网口或者adb弄到板子上去,然后执行对应的命令就可以
安卓驱动需要指定对应的路径。
1)device/nxp/imx8m/evk_8mp/BoardConfig.mk
/*通过FILES把pc端文件传到板子上的指定目录*/
PRODUCT_COPY_FILES += \
device/nxp/imx8m/evk_8mp/firmware/bcm_ap6256/BT/BCM4345C5.hcd:vendor/etc/firmware/bcm/BCM4345C5.hcd
# -------@block_bluetooth-------
# AP6256 BT
2)可以在板子上查看是否有对应的固件,如果没有则不行,先把这个固件弄到板子上。如果有,那么可以先尝试去打开连接蓝牙。
查看对应的log,如果没问题,那么就ok。如果有问题则查看log寻找对应的问题。
12-24 02:32:48.128 2210 2211 I bt_vendor: init
12-24 02:32:48.128 2210 2211 I bt_vnd_conf: Attempt to load conf from /etc/bluetooth/bt_vendor.conf
12-24 02:32:48.128 2210 2211 I bt_vnd_conf: vnd_load_conf file >/etc/bluetooth/bt_vendor.conf< not found
12-24 02:32:48.129 2210 2211 E bt_upio : init_rfkill : open(/sys/class/rfkill/rfkill0/type) failed: No such file or directory (2)
12-24 02:32

本文详细记录了调试NXP AP6256蓝牙模块驱动的过程,包括设备树配置、固件加载以及解决蓝牙串口打开失败的问题。主要步骤涉及配置蓝牙节点、设置固件路径、指定串口路径,并针对rfkill节点缺失导致的BUG进行了分析和修复。
最低0.47元/天 解锁文章
5621






