NXP MCU 技术论坛
直播中

吴凡

11年用户 1013经验值
擅长:48674
私信 关注
[问答]

无法在imx8mm-c2板上启动蓝牙,为什么?

我无法在 imx8mm-c2 板上启动蓝牙、我正在使用 AMPAK 固件 BCM4362A2_001.003.006.1132.1255.hcd、这是我的 dts 文件更改
uart3 { /* BT */
pinctrl-names = “默认”;
pinctrl-0 = < pinctrl_uart3>;
assigned-clocks = < clk IMX8MMN(CLK_UART3)>;
assigned-clock-parents = < clk IMX8MMN(SYS_PLL1_80M)>;
uart-has-rtscts 的 Rtscts;
status = “好的”;
蓝牙 {
compatible = “BRCM,BCM43438-BT”;
启用-gpios = GP_BT_ENABLE;
max-speed = <3000000>;
};
};
[ 186.437564] 蓝牙:HCI UART 驱动程序版本 2.3
[ 186.442064] 蓝牙:HCI UART 协议已注册 H4
[ 186.447244] 蓝牙:HCI UART 协议 BCSP 已注册
[ 186.452582] 蓝牙:HCI UART 协议 ATH3K 已注册
[ 186.458350] 蓝牙:HCI UART 协议 Broadcom 已注册
[ 186.458475] hci_uart_bcm serial0-0:使用虚拟稳压器时未找到电源 VBAT
[ 186.464121] 蓝牙:HCI UART 协议 QCA 已注册
[ 186.471653] hci_uart_bcm serial0-0:使用虚拟稳压器时未找到电源 VDDIO
[ 186.484319] hci_uart_bcm serial0-0:无重置资源,使用默认波特率
[ 188.734730] 蓝牙:hci0:命令0x0c03 tx 超时
[ 196.830734] 蓝牙:hci0:BCM:重置失败 (-110)
root@nitrogen8mm:~
hci0: 类型: 主总线: UART
BD 地址:00:00:00:00:00:00 ACL MTU:0:0 SCO MTU:0:0
DOWN
RX 字节数:0 acl:0 sco:0 事件:0 错误:0
TX 字节数:4 acl:0 sco:0 命令数:1 错误数:0

回帖(1)

王辉

2025-4-1 18:05:29

根据您的配置和日志信息,以下是可能导致蓝牙无法启动的原因及相应的解决方案:




1. 兼容性字符串不匹配



  • 问题:设备树中compatible = "BRCM,BCM43438-BT"可能不适用于您的 BCM4362A2 芯片。不同型号可能需要不同的驱动匹配。

  • 解决

    • 查阅 Broadcom 文档或 Linux 内核源码,确认 BCM4362A2 的正确兼容性字符串。例如:
      compatible = "brcm,bcm43438-bt";  // 尝试小写或特定型号

    • 或使用通用匹配:
      compatible = "brcm,bcm43xx-bt";





2. 固件路径/名称错误



  • 问题:内核可能未找到正确的固件文件(BCM4362A2_001.003.006.1132.1255.hcd)。

  • 解决

    • 将固件文件复制到 /lib/firmware/brcm/ 目录。

    • 重命名固件文件以匹配驱动期望的名称(通常基于芯片型号):
      cp BCM4362A2_001.003.006.1132.1255.hcd /lib/firmware/brcm/BCM4362A2.hcd

    • 运行 sudo reboot 或重新加载蓝牙模块。





3. UART 波特率设置



  • 问题max-speed = <3000000> 可能过高,超出模块或UART控制器的支持范围。

  • 解决

    • 尝试降低波特率(如 1152002000000):
      max-speed = <2000000>;

    • 检查芯片手册确认支持的波特率。





4. GPIO 配置问题



  • 问题enable-gpios = GP_BT_ENABLE 可能未正确指向物理引脚。

  • 解决

    • 确认 GP_BT_ENABLE 在设备树中的定义是否正确,例如:
      gpio_bten: bt-enable-gpio {
      gpio-hog;
      gpios = ; // 根据实际引脚调整
      output-high;
      };

    • 使用万用表测量 GPIO 引脚电压,确保在启动时拉高。





5. 内核驱动配置



  • 问题:缺少必要的内核模块支持。

  • 解决

    • 检查内核配置是否启用:
      CONFIG_BT=y
      CONFIG_BT_HCIUART=y
      CONFIG_BT_HCIUART_BCM=y
      CONFIG_BT_BRCM=y

    • 加载相关模块:
      sudo modprobe hci_uart
      sudo modprobe btqca
      sudo modprobe btbcm





6. 检查硬件连接



  • 问题:UART3 或 RTS/CTS 引脚未正确连接。

  • 解决

    • 确认 UART3 的 TX、RX、RTS、CTS 引脚与模块连接无误。

    • 检查串口是否被其他设备占用(如 dmesg | grep ttyAML*)。





调试步骤




  1. 查看完整日志


    dmesg | grep -i bluetooth
    journalctl -u bluetooth.service

    重点关注固件加载错误、权限问题或 UART 初始化失败信息。




  2. 手动加载固件


    hciattach /dev/ttyAML2 bcm43xx 3000000

    替换 ttyAML2 为实际 UART 设备节点。




  3. 验证 GPIO 状态


    sudo gpiodetect  # 查找GPIO控制器
    sudo gpioinfo    # 查看引脚状态



如果问题仍未解决,请提供完整的 dmesg 日志以进一步分析。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分