97 lines
6.6 KiB
Markdown
97 lines
6.6 KiB
Markdown
# SDC 轮速接入验证报告
|
||
|
||
日期:2026-10-05。AMI CAN 接口 v2.6,屏幕接口保持 1.4。
|
||
|
||
## 协议来源
|
||
|
||
本次从 [SDC_ACQ_DAC](https://git.acetaffy.ltd/acetaffy/SDC_ACQ_DAC) 的远端 `master` 取得提交 `7bc2d9f1eaaf19814957037bd097cd879cbf4cbf`,与本机 `D:\YMR\SDC_ACQ_DAC` 的 HEAD 一致。该仓库 `main` 是较早的初始提交,当前固件开发分支为 `master`。核对 `SDC_ACQ_DAC.dbc`、`Src/main.c` 及 README;源仓库工作树未修改。
|
||
|
||
SDC DBC 的 VERSION 仍为 1.1,但 `0x6A2` 布局已经改变,须通过提交号定位版本。核对副本保存在 [来源 DBC](evidence/2026-10-05/wheel-speed/SDC_ACQ_DAC.dbc),来源与构建哈希见 [记录](evidence/2026-10-05/wheel-speed/source-and-build.json)。
|
||
|
||
| 项目 | 最新 SDC 定义 |
|
||
| --- | --- |
|
||
| ID / 类型 / 长度 | 标准 `0x6A2`,Classic CAN 数据帧,DLC 4 |
|
||
| 字节 0..1 | 左前 PA0/TIM5_CH1,小端 uint16,原始 mm/s |
|
||
| 字节 2..3 | 右前 PA6/TIM3_CH1,小端 uint16,原始 mm/s |
|
||
| 发送周期 | 20 ms |
|
||
| 标定 | SDC 已按每圈 49 脉冲、轮周长 1414 mm 换算 |
|
||
| 无边沿 | SDC 超过 1 秒无边沿时将该轮轮速归零 |
|
||
| 有效标志 | 没有每轮有效标志或无效哨兵;65535 是饱和值 |
|
||
|
||
同时同步两份 AMI DBC 中 `0x6A6` 的 1000 ms 周期说明。其电平布局不变,原有心跳维持 GPIO 快照、超时清未知的处理仍适用。
|
||
|
||
## AMI 显示行为
|
||
|
||
AMI 取两前轮轮速的算术平均值作为仪表车速,换算后四舍五入至整数 km/h:
|
||
|
||
```text
|
||
平均轮速(m/s) = (左前_raw + 右前_raw) / 2000
|
||
车速(km/h) = 平均轮速(m/s) × 3.6
|
||
dash.speed.val = ((左前_raw + 右前_raw) × 9 + 2500) / 5000
|
||
```
|
||
|
||
实现采用 uint32 整数运算,先平均和换算,再取整;SDC 已完成轮速标定,AMI 不重复应用周长和脉冲数。
|
||
|
||
标准 `0x6A2 / DLC 4` 发送 `10 27 F8 2A`:左前 10.000 m/s、右前 11.000 m/s,平均 37.8 km/h,UART 输出 `dash.speed.val=38` 与有效白色 `dash.speed.pco=65535`。每条 ASCII 指令末尾为三个真实 `FF FF FF` 字节,使用原有 USART2 9600 8N1 TX DMA、变化排队及最新值合并。
|
||
|
||
超过 500 ms 无合规轮速帧时,数字保留并变灰(`pco=16904`);在 500 ms 边界仍有效,501 ms 时失效。SDC 心跳/GPIO、ADC、BMS 和 VCU 流量不能续期。新帧自动恢复白色,即使数值与历史值相同也会重新发送。初始为灰色 0;持续有效的零轮速帧显示白色 0。
|
||
|
||
旧 `0x6A2 / DLC 8` 四路 Hz 报文、其他错误长度、扩展帧、远程帧和 FD 帧均拒绝,不覆盖数值、不刷新轮速超时。需要与最新 SDC 固件配套。
|
||
|
||
## 已完成验证
|
||
|
||
Debug、Release 构建均通过,本次编译无警告。Release BIN 为 16632 字节,RAM 使用 2656 字节。当前 [发布 BIN](../output/firmware/AMI_Controller.bin) 的 SHA-256:
|
||
|
||
```text
|
||
ac5cff0bd3a9e06499f2ebf4186863625ba8c664dcab67309f14acb7d83acabd
|
||
```
|
||
|
||
修改前的发布 BIN 已保存在 [v2.5 归档](../output/firmware/AMI_Controller_v2.5_500k_250k.bin)。
|
||
|
||
两份 DBC 严格解析通过,CAN1 为 13 条报文/51 个信号、CAN2 为 12 条报文/47 个信号;87 组已知报文检查通过,五条 SDC 输入的长度、位布局、单位、缩放和范围与最新来源 DBC 一致。源码/CubeMX 位时序一致性、CAN2 生成文件及 Markdown 文档一致性检查通过,见 [DBC 结果](evidence/2026-10-05/wheel-speed/dbc-checks.json)。
|
||
|
||
使用 Unicorn 执行本次编译的 Debug 和 Release ELF 中实际 ARM 指令,模拟 CAN RX 回调和主循环;HAL 时钟、GPIO、CAN FIFO 与 UART DMA 由测试环境替代。验证覆盖:
|
||
|
||
- 两路 CAN 各 9 组停止、非对称轮速、取整边界和最大饱和值;原始两轮值保留。
|
||
- 8 类异常长度/格式/历史帧,不覆盖数值且不延长超时。
|
||
- 500/501 ms 失效边界、上电 tick=0 和 uint32 毫秒回绕。
|
||
- 无关 SDC/BMS/VCU 流量不能续期;同值恢复及有效零显示。
|
||
- 实际 UART 输出的数值、白/灰颜色以及三个 `0xFF` 结束字节。
|
||
|
||
原始结果见 [固件仿真记录](evidence/2026-10-05/wheel-speed/firmware-emulation.json)。这验证了实际固件指令的逻辑,不证明物理 CAN、UART 或屏幕行为。
|
||
|
||
CAN 说明 PDF 已按 v2.6 更新,17 页使用 Poppler 渲染并检查,轮速布局、换算和样例已核对。
|
||
|
||
## 复现
|
||
|
||
先按 [固件 README](../firmware/README.md#构建) 构建 Debug 和 Release,然后在仓库根目录运行:
|
||
|
||
```powershell
|
||
python -m pip install -r scripts/requirements.txt -r scripts/requirements-test.txt
|
||
python scripts/verify_dbc.py --sdc-dbc docs/evidence/2026-10-05/wheel-speed/SDC_ACQ_DAC.dbc
|
||
python scripts/export_dbc_docs.py --check
|
||
python scripts/verify_wheel_speed_firmware.py
|
||
```
|
||
|
||
## 验证边界
|
||
|
||
2026-10-05 的开发验证未烧录 MCU;2026-10-06 已完成下面记录的烧录和回读。本次仍未进行真实 SDC 到 AMI 的 CAN 联调或物理串口屏测试,未提交或推送 Git。历史 v2.5 及更早实测记录不等于本次轮速版本已通过实物验证。
|
||
|
||
此显示是平均前轮轮速,不是 VCU 融合车速;SDC 没有每轮有效性,单轮丢脉冲或打滑会影响显示。接收到零轮速只能说明源帧提供了零值,不能区分停车和传感器故障。
|
||
|
||
## 2026-10-06 烧录与回读
|
||
|
||
按用户指令将已验证的 v2.6 发布 BIN 烧录到 `0x08000000`。烧录前核对应用源码、协议头、两份 DBC 和 BIN 的 SHA-256,均与 2026-10-05 的验证记录一致,没有重新生成不同版本。
|
||
|
||
ST-LINK 序列号 `37FF71064E573436188C1543`;SWD 识别 Device ID `0x467`、STM32G0B0xx/B1xx/C1xx 系列、128 KB Flash、Cortex-M0+,目标电压 3.24 V。芯片系列和容量与 AMI 目标一致,SWD 不能单独确认封装完整丝印。
|
||
|
||
烧录前通过 SWD 读取并保存完整 128 KB Flash 到 [备份](evidence/2026-10-06/wheel-speed-flash/before-flash-128k.bin)。Under Reset 写入,CubeProgrammer 返回 `Download verified successfully`。随后 Hot Plug 读取全部 16632 字节并逐字节比较,结果与发布 BIN 完全一致,SHA-256 为本报告列出的 `ac5cff0b...d83acabd`。最后执行软件复位,日志确认 `Software reset is performed`。
|
||
|
||
- [烧录与回读结果](evidence/2026-10-06/wheel-speed-flash/flash-verified.json)
|
||
- [烧录日志](evidence/2026-10-06/wheel-speed-flash/flash.log)
|
||
- [Flash 回读](evidence/2026-10-06/wheel-speed-flash/flash-readback.bin)
|
||
- [回读日志](evidence/2026-10-06/wheel-speed-flash/flash-readback.log)
|
||
- [最终复位日志](evidence/2026-10-06/wheel-speed-flash/reset.log)
|
||
|
||
烧录校验、Flash 回读和复位已完成;这不替代真实 SDC/CAN/UART/物理屏幕的轮速功能联调。
|