Files
AMI/docs/SDC_BMS协议.md
T

5.9 KiB
Raw Blame History

AMI 接入 SDC / BMS 协议

版本 2.0,2026-10-03。CAN1 / CAN2 配置相同:500 kbit/s、Classic CAN、87.5% 采样点。当前固件不再接收旧 0x180 / 0x181 / 0x280 数据接口。

来源:SDC_ACQ_DAC/SDC_ACQ_DAC.dbc VERSION 1.1;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 / 8 四个小端 uint16 Hz,PA0 / PA2 / PA6 / PB14 保存原始频率;没有周长和每圈脉冲数,不直接当 km/h
0x6A4 / 4 结果、DAC 选择、小端 uint16 mV 接收应答,不作为仪表电压
0x6A6 / 8 小端 uint16 PD0..PD14 电平 + uint16 变化掩码 + uint32 ms 保存原始电平、变化和时间

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 帧仅在启动和电平变化时发送,持续心跳表示源仍在线。DBC 没有 PD0..PD14 对应 d0..d15 安全信号的名称及正常极性;当前具名 debug 保持未知,不把高/低电平直接判为正常/故障。

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 没有电机或逆变器温度协议;dash.djwd / dash.mcuwd 保持无效。扭矩和车速也缺少可直接使用的单位映射,保持无效。

有效性与刷新

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

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

  • SDC ADC 独立超时 1500 ms。
  • BMS 电压/电流独立超时 2000 ms。
  • 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 数字接口沿用 通讯交接文档。

任务回传

屏幕确认后发送 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 状态活动超时提示,默认高电平有效;尚未观察验证灯的物理极性和行为,活动灯不能替代每个数值的有效性判断。

验证范围

已完成 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 快照见 发布的发送记录。

CAN2 配置及过滤寄存器与 CAN1 相同,但本次未接线实测 CAN2。未测试物理串口屏,未接真实 SDC/BMS 节点,未验证 VCU 实际执行或安全动作。现有画面的 EBS 文案不能作为安全状态证明。