Files
AMI/docs/SDC_BMS协议.md
T

11 KiB
Raw Blame History

AMI 接入 SDC / BMS 协议

2026-10-04:新增 AMI 0x301 标准心跳帧(DLC 8),仅 CAN1(500 kbit/s)100 ms 一次,CAN2 不发送心跳,包含版本、uint16 序号和 uint32 运行毫秒值,小端。源码和 DBC 已更新,已烧录并全量回读一致;CAN1 实测 121 帧,间隔 99.952~100.180 ms。完整定义见 DBC 说明。

版本 2.6,2026-10-05。CAN1 为 500 kbit/s,CAN2 为 250 kbit/s;两路均为 Classic CAN、87.5% 采样点,接收 ID、解码和任务发送功能相同,不转发原始帧。CAN1 使用 AMI.dbc,CAN2 使用 AMI_CAN2_250k.dbc。当前固件不再接收旧 0x180 / 0x181 / 0x280 数据接口。

VCU 实际当前任务、锁定和 EBS 汇总显示由新增标准 0x183 / DLC 8 输入,独立超时 500 ms。任务按钮仅发送 0x300 请求,不更新实际任务;完整布局和颜色见 VCU 反馈协议,验证边界见 反馈报告。本页 SDC / BMS 采样与该 VCU 反馈独立。

v2.1 已通过源码 / CubeMX 位时序一致性检查及 Release 编译,已烧录并完整回读比对;CAN1 500K(SDC)与 CAN2 250K(BMS)分别通过数据更新、失效恢复和六个任务确认/取消测试,见 双 CAN 测试报告。本文后面旧的实物联调引用属于两路均为 500K 的 v2.0。

来源:SDC_ACQ_DAC/SDC_ACQ_DAC.dbc VERSION 1.1,核对远端 master 提交 7bc2d9f1eaaf19814957037bd097cd879cbf4cbf(2026-10-05);BmsMonitor-CANTest 的 BmsMonitor.App/Protocol/BmsProtocolParser.cs,核对提交 e65c95203d1689df05343775982d7e85bd782646,本机核对副本保存在 tmp/BmsMonitor-CANTest(不提交);远端来源使用上述仓库及提交号定位。

SDC 输入

标准 ID / DLC 字节布局 AMI 行为
0x6A0 / 8 A1 01 + 小端 uint16 序号 + 小端 uint32 上电 ms 校验标识和版本,刷新 SDC 心跳
0x6A1 / 2 小端 uint16 mV 低压电池电压,dash.lvbat.val=(mV+5)/10,虚拟浮点显示两位小数
0x6A2 / 4 两个小端 uint16 mm/s,左前 PA0 / 右前 PA6 双前轮平均值换算整数 km/h,更新 dash.speed.val;独立超时 500 ms
0x6A4 / 4 结果、DAC 选择、小端 uint16 mV 接收应答,不作为仪表电压
0x6A6 / 8 小端 uint16 PD0..PD14 电平 + uint16 变化掩码 + uint32 ms 保存原始电平、变化和时间,并按下表更新 DEBUG

0x6A3 DAC 设置和 0x6A5 ASSI 设置是发给 SDC 的控制,不属于本次显示输入。ADC 已由 SDC 校准为分压前物理输入电压,AMI 不再乘分压倍数。08 20 = 8200 mV = 8.20 V;0C 30 = 12300 mV = 12.30 V。DLC 必须为 2。

GPIO 帧每 1000 ms 发送,变化掩码累积上个周期内的变化;持续心跳维持已有采样。用户已确认按接线表从上到下对应 PD0~PD14,且全部低电平正常、高电平故障。映射如下(这是输入位序,屏幕变量编号保持原定义):

输入 信号 屏幕变量
PD0 Safe_DBBox_OUT d0
PD1 Safe_S(用户纠正为左电机互锁) d5
PD2 Safe_Ba_BOX d2
PD3 Safe_RES1 d6
PD4 Safe_Control d7
PD5 Safe_L&BOTS&IW d1(两个位置同步)
PD6 Safe_RSTOP d3
PD7 Safe_LAST d4
PD8 EBS_BE d8
PD9 EBS_12V d9
PD10 EBS_AIR d10
PD11 EBS_Oil d11
PD12 Driverless_INS d12
PD13 Driverless_WSS d13
PD14 Driverless_Camera d14

没有 GPIO 采样时保持未知;d15(12V_Control)无来源,始终未知。心跳和 GPIO 都超过 500 ms 未接收后全部状态清为未知;仅恢复心跳不会恢复旧状态,需新 GPIO 采样。变化掩码仅记录,不限制整帧电平的更新,bit15 屏蔽。CAN1/CAN2 共用映射;实测范围见 映射测试报告。

BMS 输入

ID / DLC 字段及换算 屏幕目标
标准 0x140 / 8 或扩展 0x186040F3 / 8 大端 uint16 字节 0..1 × 0.1 V dash.ts.val,现有整数控件四舍五入至 1 V
同上 大端 uint16 字节 2..3 × 0.1 − 500 A dash.dl.val,四舍五入至 1 A;不是 int16 直接解码
标准 0x156 / 8 八个字节分别为温度 + 40,FF 无效 dash.dtwd.val = 有效实际通道的最高温度,单位 ℃
扩展 0x186140F3 / 8 字节 4 − 40 为最高温度,FF 无效 更新 dash.dtwd.val;BMS 低压字段不覆盖 SDC ADC

MCU 内保存 0.1 V / 0.1 A 原始精度,仅显示层四舍五入。例 0F A0 14 03 00 00 00 05 = 400.0 V / +12.3 A,显示 400 / 12;10 73 10 D1 00 00 00 05 = 421.1 V / −69.5 A,显示 421 / −70。

最高温度只取前八个实际通道,不能把 BmsMonitor 补出的第 9/10 路纳入最大值。42 FF 43 47 37 0A 50 41 的最大温度为 40 ℃。全为 FF 时立即失效。

BmsMonitor 没有电机或逆变器温度协议;扭矩、电机及 MCU 温度由自定义 0x182 输入。车速由最新 SDC 0x6A2 / DLC 4 输入,详见下节。

车速显示

SDC 已按每圈 49 脉冲、轮周长 1414 mm 将输入换算为 mm/s;AMI 不再做轮径标定。仪表采用双前轮平均轮速:dash.speed.val=((左前_mm_s+右前_mm_s)*9+2500)/5000,对应平均 m/s × 3.6,四舍五入到整数 km/h。

例如标准 0x6A2、DLC 4、数据 10 27 F8 2A 表示左前 10.000 m/s、右前 11.000 m/s;平均 37.8 km/h,显示白色 38。超过 500 ms 无合规轮速帧,保留数字变灰;新帧恢复。旧四路 Hz 的 DLC 8 帧拒绝且不续期。

SDC 未提供每轮有效标志或无效哨兵:0 是有效停止值,65535 是有效饱和值。SDC 超过 1 秒没有边沿会把对应轮速归零,AMI 无法区分停车和传感器断线;该显示是平均轮速,不是 VCU 融合车速。

有效性与刷新

白色数值表示收到有效数据;深灰色表示未知或失效,保留的历史值仅作参考。初始灰色 0 不能作为测量结果。

刚重新打开或连接屏幕时,需等待首轮同步(最长约 5.6 秒);屏幕自身的初始 0 不表示有效测量。

  • SDC ADC 独立超时 1500 ms。
  • BMS 电压/电流独立超时 2000 ms。
  • 车速独立超时 500 ms;SDC 心跳/GPIO、BMS、VCU 流量不能续期。
  • BMS 最高温度独立超时 2000 ms;全通道无效时立即失效。
  • 其他源的流量不会延长上述计时;有效报文恢复后自动转白。
  • 只对数值或有效性变化排队,字段轮转和 UART DMA 发送最新值,避免高频字段阻塞其他字段。
  • 每 5 秒额外重新同步整套数值、有效颜色和 debug 状态,支持屏幕晚于 MCU 启动或编辑器重新连接;一轮刷新还需约 0.6 秒串口发送时间。
  • 校验标准/扩展格式、Classic CAN、数据帧及 DLC;未知或长度不匹配的报文不更新数据。

USART2 为 9600、8N1,PA2 TX / PA3 RX。命令为 ASCII,末尾三个真实 FF FF FF 字节。dash.lvbat.val=1230 显示 12.30 V,lvbat 全局作用域,vvs1=2;参见 淘晶驰虚拟浮点数文档。其余 UART 数字接口沿用 通讯交接文档。

任务回传

另有 v2.2 新增的标准 0x182 仪表显示输入,设置扭矩千分、电机温度和 MCU 温度,三个值独立于 BMS / SDC 计时。该自定义接口不改变本文的源协议字段,详见 DBC 说明。

屏幕确认后发送 AA 55 01 NN 0D 0A,NN=01..06;取消不发送。MCU 用 Receive-to-Idle DMA 按字节流解析拆包/粘包。

MCU 发出标准 0x300 / 8:版本 1、任务号、uint8 序号、来源 1、uint32 小端 MCU ms。任务依次为八字绕环、直线加速、高速循迹、车检测试、EBS 测试、手动驾驶。此接口是原有 AMI 请求,不是 SDC DBC 定义的 ASSI 控制;没有 VCU 映射前不把任务号直接写成 0x6A5 灯状态。

请求优先进入最近 500 ms 收到有效协议报文的 CAN 口;两路活跃则发两路,无接收历史则尝试两路。现有未连接 CAN 口自动重发可能填满 TX FIFO,并阻塞后续软件任务;本次保留原任务队列策略。回归覆盖 CAN1 持续有有效输入的情况。

PA0 LED 每 500 ms 翻转,PA1 为仪表/SDC 状态活动超时提示,默认高电平有效;尚未观察验证灯的物理极性和行为,活动灯不能替代每个数值的有效性判断。

v2.0 历史验证范围

已完成 Release 编译、SWD 烧录校验、HMI 编译(0 错误 / 0 警告),以及 CAN 盒 → 实物 AMI CAN1 → MCU USART2 → COM4 → 官方 HMI 调试器 数据更新测试。

同时发送 SDC 20 ms 频率、100 ms 心跳、500 ms ADC 和 BMS 报文,验证标准/扩展 BMS、负电流、无效温度、独立超时、恢复、错误 DLC 和旧 ID 拒绝。原始帧、截图和 SWD 快照见 发布的发送记录。

上述 v2.0 测试未接线实测 CAN2。后续 v2.1 已按 CAN1 500K / CAN2 250K 分别测试,见 双 CAN 报告;当前 v2.2 见 显示 CAN 报告。未测试物理串口屏,未接真实 SDC/BMS 节点,未验证 VCU 实际执行或安全动作。现有画面的 EBS 文案不能作为安全状态证明。

2026-10-07 无人状态显示 v2.7

按 ASF 补充独立无人状态,800×480 主页面在“已锁定/已解锁”右侧显示 AS OFF、AS Ready、AS Driving、AS Finished、AS Emergency 或 Manual Driving;无效或超过 500 ms 无反馈显示灰色“无人未知”。状态来自 VCU,不从任务、锁定、EBS 或灯色推断。

0x183 / DLC 8 版本 2:byte3 bit3 为 AS 有效标志,byte5 为状态 0..5(按上面顺序),byte6=0,byte7=2;其他字段位置不变。例 02 01 01 0F 00 01 00 02 表示直线加速、已锁定、AS Ready、EBS 正常。保留位和枚举错误整帧拒绝、不续期。旧版本 1 仍接收原三项,但 AS 立即未知。屏内新增 as_state=0..5(6 未知),串口命令仍使用真实 FF FF FF 结尾;全局变量在切页后保留,每 5 秒重同步。需配套包含 as_state 的新屏幕工程;480×272 AMI.HMI 与 800×480 工程均已加入 as_state;小屏 AS=5 显示“有人驾驶”。完整定义见 CAN DBC 说明的“VCU 状态反馈 0x183”。

本次源码、屏幕工程和构建产物的验证以 docs/无人状态显示验证报告.md 为准,历史烧录和联调记录不代表本次版本已下载到实物。