refactor(protocol): 新增 comm_protocol 协议收发解析层,ble_transport 退化为纯传输

- 删除 protocol.h,帧定义和标定命令码统一迁入 comm_protocol.h
- 新增 comm_protocol.c:上行组包(CoP/标定响应)、下行解析+msgq 分发
- ble_transport 剥离所有协议解析和参数 getter,仅保留字节收发+rx 回调注册
- main.c 初始化顺序:ble_transport → comm_protocol → adv_start → cal_init
- 更新 README 架构图和项目结构表,补充标定流程章节
- 更新 BALANCE_BOARD_PROTOCOL.md 增加标定命令/响应帧格式文档
This commit is contained in:
2026-05-15 18:06:33 +08:00
parent 1a65bf0f22
commit 0979866a7c
8 changed files with 627 additions and 329 deletions
+77 -8
View File
@@ -73,16 +73,23 @@
src/ads1256.c
|
v
src/sensor.c
src/sensor.c (业务层)
|
+--> 去皮 / 17 次均值 / 死区抑制 / 重量换算 / CoP 解算
|
+--> CoP 二进制帧 --> src/ble_transport.c --> BLE NUS Notify
v
src/comm_protocol.c (协议层)
|
+<-- Resistance / Spotter / Heartbeat <-- BLE NUS Write
+--> 上行:组包 CoP/标定响应帧,调用 ble_transport_send()
+--> 下行:解析收到的帧,推入 msgq 供业务层消费
|
v
src/ble_transport.c (传输层)
|
+--> BLE NUS Notify / Write,纯字节收发
```
`src/main.c` 本身不承载采样逻辑,它只按顺序调用 `ble_transport_init()``ble_transport_adv_start()``sensor_init()`
`src/main.c` 本身不承载采样逻辑,它只按顺序调用 `ble_transport_init()``comm_protocol_init()``ble_transport_adv_start()``sensor_init()`
## 4. 功能需求与当前状态
@@ -121,6 +128,67 @@
| 阻力闭环控制 | 参数已接入协议层,控制逻辑未落地 | 🔲 |
| Spotter 保护动作 | 参数已接入协议层,保护动作未落地 | 🔲 |
### 4.4 传感器标定
标定分两级,通过 BLE 下行标定命令帧触发,平衡板执行后回复标定响应帧。帧格式详见 [BALANCE_BOARD_PROTOCOL.md](./doc/BALANCE_BOARD_PROTOCOL.md)。
#### L1 标定(单通道零点 + 增益)
```text
基站 平衡板
│ │
│── START_L1 ─────────────────>│ 进入 L1 模式
│<──────────────── OK ─────────│
│ │
│── TARE_CH (ch=0) ──────────>│ 空载,记录零点
│<──────────────── OK ─────────│
│ ...对 ch=1,2,3 重复... │
│ │
│── GAIN_CH (ch=0, 10kg) ────>│ 加载砝码,计算增益
│<──────────────── OK ─────────│
│ ...对 ch=1,2,3 重复... │
│ │
│── COMMIT_L1 ────────────────>│ 写入 NVS
│<──────────────── OK ─────────│
```
#### L2 标定(9 点网格空间修正)
L2 需要 L1 已完成。在 9 个已知位置分别放置标定负载,记录 CoP 误差用于空间修正。
```text
基站 平衡板
│ │
│── START_L2 ─────────────────>│ 进入 L2 模式
│<──────────────── OK ─────────│
│ │
│── RECORD_GRID (pt=0) ──────>│ 在网格点 0 放置已知负载
│<──────────────── OK ─────────│
│ ...对 pt=1..8 重复... │
│ │
│── COMMIT_L2 ────────────────>│ 写入 NVS
│<──────────────── OK ─────────│
```
网格点编号(3×3,俯视):
```text
6 ── 7 ── 8
│ │
3 ── 4 ── 5
│ │
0 ── 1 ── 2
```
点 4 为板面中心。
#### 状态与持久化
- 标定数据通过 NVS 持久化,上电后自动加载
- `ERASE` 命令可清除全部标定数据,回退到出厂默认
- `QUERY` 命令返回当前各级标定的有效性标志
- `ABORT` 可在任意阶段中止标定流程,已测量数据不写入 NVS
## 5. BLE 协议规格
平衡板工作在 BLE `Peripheral` 角色,通过 Nordic UART Service 与基站交换二进制帧。
@@ -258,11 +326,12 @@ CoP 帧固定 17 字节,结构如下:
| 路径 | 说明 |
|------|------|
| `src/main.c` | 启动入口,负责初始化 BLE 和传感器子系统 |
| `src/main.c` | 启动入口,负责初始化 BLE、协议层和传感器子系统 |
| `src/ads1256.c` | ADS1256 SPI 读写、复位、寄存器配置和校验 |
| `src/sensor.c` | 采样线程、tare、均值滤波、重量换算和 CoP 打包 |
| `src/ble_transport.c` | BLE 广播、NUS 收发、断线重广播和下行参数缓存 |
| `inc/protocol.h` | 二进制协议结构、重量换算系数、几何参数和阈值 |
| `src/sensor.c` | 采样线程、tare、均值滤波、重量换算和 CoP 计算 |
| `src/comm_protocol.c` | 协议收发解析层:上行组包、下行解析、msgq 分发 |
| `src/ble_transport.c` | BLE 广播、NUS 字节收发、断线重广播 |
| `inc/comm_protocol.h` | 帧格式定义、标定子命令码、下行消息队列类型和协议 API |
| `app.overlay` | SPI1、CS、DRDY、RESET 的板级连线 |
| `prj.conf` | BLE、日志和控制台相关配置 |
| `BALANCE_BOARD_PROTOCOL.md` | 协议专项说明、字段表和示例帧 |