基本信息
| 项目 | 信息 |
|---|---|
| 开发板型号 | BearPi-Pico H2821E |
| 芯片型号 | BS21E |
| SDK 版本 | CFBB 0.9.0.5 (Git: 89ae830, 2025-09-19) |
| SDK 仓库 | https://gitee.com/bearpi/bearpi-pico_h2821e.git |
| 编译目标 | standard-bs21e-1100e |
| 测试示例 | sle_measure_dis (Server + Client) |
| 编译环境 | Ubuntu 22.04, Python 3.10, scons |
问题描述
问题一:系统崩溃 (严重)
现象:运行官方 sle_measure_dis 示例,Server 端在测距过程中随机崩溃,崩溃间隔不固定(几秒到几十秒)。
崩溃日志:
APP|exception:8000000c,0xf08000,mepc:0x219aea,mtval:0x0,mcause:0xf08000,ccause:0x0
APP|NMI exception entry!
APP|panic id:0!
复现步骤:
- 编译官方 sle_measure_dis Server 固件(未做任何修改)
- 编译官方 sle_measure_dis Client 固件(未做任何修改)
- 分别烧录到两块 H2821E 开发板
- 上电运行,Client 自动扫描连接 Server
- 连接成功后开始测距,运行一段时间后 Server 崩溃
关键日志片段:
Connected. conn_id:0
SLEM SET PARAM. status:0.
SLEM SET ENABLE conn_id:0.
SLEM STATE CHANGED. status:0.
RECEIVE LOCAL IQ. timestamp_sn:xxx
store local iq data commplete .
RECEIVE REMOTE IQ. timestamp_sn:xxx
SLEM get distance done. distance:0.950, time = 12 ms.
...
MSG ADD FAIL. msg_num:10 ret:1. <-- 消息队列满
...
APP|exception:8000000c <-- 系统崩溃
补充说明:
- 崩溃前经常出现
MSG ADD FAIL. msg_num:10提示,说明消息队列已满 - 官方代码
MEASURE_DIS_MSG_QUEUE_SIZE定义为 10,可能不够用 - 我们尝试增大队列到 30,但仍会崩溃
问题二:测距精度偏差
现象:实际距离 30cm,测量结果约 0.95-1.16m,误差约 +0.6-0.8m
测试环境:
- 室内环境,无明显遮挡
- 两块开发板相距约 30cm
- 开发板平放在桌面上
测距输出示例:
SLEM get distance done. distance:0.950, time = 12 ms.
SLEM get distance done. distance:1.048, time = 11 ms.
SLEM get distance done. distance:1.163, time = 12 ms.
尝试过的调整:
- 修改
TOF_DEFAULT从 2070 改为 4000 → 结果更差 (2.6m) - 修改
TOF_DEFAULT从 2070 改为 1000 → 无明显改善
已排查项
| 排查项 | 结果 |
|---|---|
| SDK 版本 | 已是最新 (2025-09-19) |
| 编译配置 | 使用默认配置,未做修改 |
| 官方代码 | 未修改官方代码,直接编译测试 |
| 多块板子 | 使用 4 块板子交叉测试,问题相同 |
| 烧录工具 | BurnTool_H2821E,波特率 750000 |
期望获得的帮助
-
崩溃问题:是否有已知的修复方案?是否有更稳定的测距示例版本?
-
预编译固件:是否有官方预编译的 sle_measure_dis 固件,用于验证我们的编译环境是否正确?
-
校准指导:测距精度偏差较大,是否需要进行硬件校准?校准方法是什么?
-
消息队列:
MEASURE_DIS_MSG_QUEUE_SIZE=10是否需要增大?增大到多少合适?