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

6.6 KiB
Raw Blame History

SDC 轮速接入验证报告

日期:2026-10-05。AMI CAN 接口 v2.6,屏幕接口保持 1.4。

协议来源

本次从 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,来源与构建哈希见 记录。

项目 最新 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:

平均轮速(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 的 SHA-256:

ac5cff0bd3a9e06499f2ebf4186863625ba8c664dcab67309f14acb7d83acabd

修改前的发布 BIN 已保存在 v2.5 归档。

两份 DBC 严格解析通过,CAN1 为 13 条报文/51 个信号、CAN2 为 12 条报文/47 个信号;87 组已知报文检查通过,五条 SDC 输入的长度、位布局、单位、缩放和范围与最新来源 DBC 一致。源码/CubeMX 位时序一致性、CAN2 生成文件及 Markdown 文档一致性检查通过,见 DBC 结果。

使用 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 结束字节。

原始结果见 固件仿真记录。这验证了实际固件指令的逻辑,不证明物理 CAN、UART 或屏幕行为。

CAN 说明 PDF 已按 v2.6 更新,17 页使用 Poppler 渲染并检查,轮速布局、换算和样例已核对。

复现

先按 固件 README 构建 Debug 和 Release,然后在仓库根目录运行:

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 到 备份。Under Reset 写入,CubeProgrammer 返回 Download verified successfully。随后 Hot Plug 读取全部 16632 字节并逐字节比较,结果与发布 BIN 完全一致,SHA-256 为本报告列出的 ac5cff0b...d83acabd。最后执行软件复位,日志确认 Software reset is performed。

烧录校验、Flash 回读和复位已完成;这不替代真实 SDC/CAN/UART/物理屏幕的轮速功能联调。