Files
esp-idf/tools/bt/ble_log_console/User-Guide-CN.md
T
Zhou Xiao da207b1706 fix(ble_log_console): exclude from idf-ci pytest collection to fix CI
idf-ci discovers pyproject.toml pytest config and runs a separate
collection pass with --target all, which finds 0 target tests and
raises RuntimeError. Add to .idf_ci.toml exclude_dirs instead of
deleting tests. Restore all 227 unit tests with lint/mypy fixes.
2026-04-07 11:52:43 +08:00

8.7 KiB
Raw Blame History

BLE Log Console 用户指南

简介

BLE Log Console 是一个基于终端的实时 BLE 日志捕获与解析工具。它通过 UART DMA 接收 ESP 芯片固件发出的 BLE Log 帧,实时解析并展示在终端界面中,同时将原始二进制数据保存到文件供离线分析。

准备工作

1. 固件配置

idf.py menuconfig 中启用 BLE Log 模块:

最简配置(推荐):

Component config → Bluetooth → BT Logs → Enable critical-log-only mode  [y]

勾选即可一键启用 BLE Log 模块 + UART DMA 输出 + 仅关键日志模式。

手动配置:

Component config → Bluetooth → BT Logs → Enable BT Log Async Output (Dev Only)  [y]

UART DMA 传输、3 Mbps 波特率、PORT 0 均为默认值,大多数情况下无需额外配置。

关于 UART PORT 0:当配置为 PORT 0 时,固件会自动将 ESP_LOG 输出包装为 BLE Log 帧(REDIR source),Console 会自动解码并显示为普通日志行。

2. 硬件连接

PORT 0(推荐): 直接通过 USB 线连接开发板的 UART 口即可,无需额外接线。

其他 PORT 需要将指定的 TX GPIO 连接到外部 USB 串口适配器:

ESP32 TX GPIO ──────── USB 串口适配器 RX
ESP32 GND     ──────── USB 串口适配器 GND

确保 USB 串口适配器支持所配置的波特率(默认 3 Mbps)。推荐使用 CP2102N、CH343 或 FT232H 芯片的适配器。

启动

快速启动(推荐)

使用自带的启动脚本 -- 自动激活 ESP-IDF 环境并安装依赖,可在任意目录下运行:

# Linux / macOS
<esp-idf 根目录>/tools/bt/ble_log_console/run.sh

# Windows
<esp-idf 根目录>\tools\bt\ble_log_console\run.bat

不带参数启动时,工具会打开 启动界面(Launch Screen -- 一个交互式配置界面,可以:

  • 从下拉列表中 选择串口(自动检测可用设备,支持 Refresh 按钮重新扫描)
  • 从预设选项中 选择波特率115200 至 3000000,默认 3000000
  • 通过文本输入或 Browse 文件选择器 设置日志保存目录
  • 点击 Connect 开始捕获

传入 --port 可跳过启动界面,直接开始捕获:

# Linux / macOS
./run.sh -p /dev/ttyUSB0
./run.sh -p /dev/ttyUSB0 -b 3000000 -d /tmp/my_captures

# Windows
run.bat -p COM3

所有 CLI 选项均会转发给 console.py

手动启动

如果你希望自行管理 ESP-IDF 环境:

cd <esp-idf 根目录>
. ./export.sh
python -m pip install textual textual-fspicker      # 安装额外依赖
cd tools/bt/ble_log_console
python console.py                                  # 启动界面
python console.py -p /dev/ttyUSB0                  # 直连捕获
python console.py -p /dev/ttyUSB0 -b 3000000       # 指定波特率
python console.py -p /dev/ttyUSB0 -d /tmp/captures  # 指定日志目录

CLI 选项

参数 缩写 默认值 说明
--port -p (可选) 串口设备路径,如 /dev/ttyUSB0COM3。省略时打开启动界面。
--baudrate -b 3000000 波特率,须与固件 CONFIG_BLE_LOG_PRPH_UART_DMA_BAUD_RATE 一致
--log-dir -d 当前工作目录 捕获文件保存目录

捕获文件保存到当前工作目录(或 --log-dir 指定的目录),文件名按时间戳自动生成:

ble_log_YYYYMMDD_HHMMSS.bin

界面说明

启动后,界面分为两个区域:

日志区域(上方)

滚动显示实时日志,包括:

  • [INFO](绿色):系统信息,如固件版本
  • [WARN](黄色):丢帧警告,格式为 Frame loss [LL_TASK]: 5 frames, 200 bytes,表示该 source 新增了丢帧
  • [SYNC](青色):同步状态变化
  • 普通文本:UART redirect 输出的 ESP_LOG 日志(仅 PORT 0 时出现)

状态栏(下方)

固定显示在底部,实时更新:

Sync: SYNCED | Checksum: XOR / Header+Payload | Press h for help
RX: 1.2 MB  Speed: 293.0 KB/s  Max: 300.0 KB/s  Rate: 3421 fps  Lost: 12 frames, 480 B
  • Sync: 同步状态(SEARCHING -> CONFIRMING -> SYNCED -> CONFIRMING_LOSS
  • Checksum: 自动检测到的校验模式(算法 / 范围)
  • RX: 累计接收字节数
  • Speed / Max: 当前/峰值传输速度(单位 KB/s 或 MB/s)
  • Rate: 当前帧率
  • Lost: 自 Console 启动以来的累计丢帧数和丢失字节数

快捷键

按键 功能
q 退出
Ctrl+C 退出
c 清屏(清除日志区域)
s 切换自动滚动(默认开启)
d 打开每个 Source 的帧统计详情(按 Escaped 关闭)
m 查看缓冲区利用率(按 Escapem 关闭)
h 显示快捷键帮助(按 Escape 关闭)
r 通过 DTR/RTS 复位芯片

帧统计详情(d 键)

d 键会弹出一个覆盖层,包含两个表格,每秒自动刷新:

固件计数器(自芯片启动以来) -- 固件上报的每个 Source 的写入和缓冲区丢帧统计:

Source Written Frames Written Bytes Buffer Loss Frames Buffer Loss Bytes
LL_TASK 12345 56.7 KB 5 200 B
LL_HCI 890 34.2 KB - -
HOST 456 12.1 KB - -
HCI 234 8.5 KB 2 80 B

Console 测量(自 Console 启动以来) -- Console 端测量的每个 Source 的接收速率和峰值突发:

Source Received Frames Received Bytes Avg Frames/s Avg Bytes/s Peak Frames/10ms Peak Bytes/s
LL_TASK 12340 56.5 KB 412 18.8 KB/s 8 24.0 KB/s
LL_HCI 890 34.2 KB 30 1.1 KB/s 3 3.6 KB/s

有缓冲区丢帧的 Source 会在固件计数器表格中以红色高亮显示。

缓冲区利用率(m 键)

m 键会弹出一个覆盖层,展示固件上报的每个 LBMLog Buffer Manager)缓冲区利用率:

Pool Idx Name Peak Total Util%
COMMON_TASK 0 spin 3 4 75%
COMMON_TASK 1 atomic[0] 4 4 100%
COMMON_ISR 0 spin 2 4 50%
LL 0 ll_task 4 4 100%
LL 1 ll_hci 2 4 50%
  • Pool: 缓冲池类别(COMMON_TASK、COMMON_ISR、LL、REDIR
  • Idx: 池内 LBM 索引
  • Name: LBM 可读名称(spin、atomic[N]、ll_task、ll_hci、redir
  • Peak: 同时在途的传输缓冲区峰值数量
  • Total: 该 LBM 可用的传输缓冲区总数
  • Util%: Peak / Total 的百分比;100%(红色高亮)表示所有缓冲区曾同时被占用,可能导致丢帧

此功能有助于诊断丢帧时哪个缓冲池资源不足。

打包为独立可执行文件

使用自带的构建脚本可将 BLE Log Console 打包为单文件可执行程序,目标机器无需安装 Python 或 ESP-IDF 环境:

# Linux / macOS
<esp-idf 根目录>/tools/bt/ble_log_console/build.sh

# Windows
<esp-idf 根目录>\tools\bt\ble_log_console\build.bat

脚本会自动激活 ESP-IDF 环境、安装 PyInstaller、构建可执行文件、将其放置在当前工作目录下,并清理中间产物。

输出:./ble_log_consoleLinux/macOS)或 .\ble_log_console.exeWindows)。

注意:请在与目标机器相同的操作系统和架构上构建。PyInstaller 不支持交叉编译。

常见问题

状态一直停在 SEARCHING

  • 波特率不匹配:确认 --baudrate 与固件 CONFIG_BLE_LOG_PRPH_UART_DMA_BAUD_RATE 一致
  • 串口错误:确认连接的是正确的 UART TX 引脚
  • 固件未运行:确认设备已启动且 BLE Log 已初始化
  • 信号质量:3 Mbps 下请使用短线缆,确保 GND 连接可靠

出现 Buffer overflow warning

表示解析器内部缓冲区累积超过 8 KB 未能解析出有效帧。通常发生在:

  • 设备启动初期,UART 上还没有有效的 BLE Log 帧数据
  • 波特率不匹配导致接收到的全是乱码

如果只在启动时出现一次,属于正常现象;如果持续出现,请检查波特率和硬件连接。

丢帧严重

  • d 查看各 Source 的丢帧详情
  • m 查看缓冲区利用率 -- 100% 的池需要增加缓冲区
  • 增大固件 bufferCONFIG_BLE_LOG_LBM_TRANS_BUF_SIZECONFIG_BLE_LOG_LBM_LL_TRANS_BUF_SIZE
  • 增加 LBM 数量:CONFIG_BLE_LOG_LBM_ATOMIC_LOCK_TASK_CNT
  • 提高波特率(需适配器支持)

看不到 ESP_LOG 输出

  • 确认固件配置了 CONFIG_BLE_LOG_PRPH_UART_DMA_PORT=0
  • Console 会自动解码 REDIR 帧,无需额外配置
  • 日志由 1 秒周期定时器刷新,可能有短暂延迟