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:
@@ -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` | 协议专项说明、字段表和示例帧 |
|
||||
|
||||
Reference in New Issue
Block a user