Files
AMI/docs/SDC轮速接入验证报告.md
T

97 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/物理屏幕的轮速功能联调。