# AMI 接入 SDC / BMS 协议 版本 2.4,2026-10-03。CAN1 为 500 kbit/s,CAN2 为 250 kbit/s;两路均为 Classic CAN、87.5% 采样点,接收 ID、解码和任务发送功能相同,不转发原始帧。CAN1 使用 [AMI.dbc](../AMI.dbc),CAN2 使用 [AMI_CAN2_250k.dbc](../AMI_CAN2_250k.dbc)。当前固件不再接收旧 `0x180 / 0x181 / 0x280` 数据接口。 VCU 实际当前任务、锁定和 EBS 汇总显示由新增标准 `0x183 / DLC 8` 输入,独立超时 500 ms。任务按钮仅发送 0x300 请求,不更新实际任务;完整布局和颜色见 [VCU 反馈协议](AMI_CAN_DBC说明.md#vcu-状态反馈-0x183),验证边界见 [反馈报告](VCU状态反馈测试报告.md)。本页 SDC / BMS 采样与该 VCU 反馈独立。 v2.1 已通过源码 / CubeMX 位时序一致性检查及 Release 编译,已烧录并完整回读比对;CAN1 500K(SDC)与 CAN2 250K(BMS)分别通过数据更新、失效恢复和六个任务确认/取消测试,见 [双 CAN 测试报告](CAN1_CAN2_v2.1测试报告.md)。本文后面旧的实物联调引用属于两路均为 500K 的 v2.0。 来源:`SDC_ACQ_DAC/SDC_ACQ_DAC.dbc` VERSION 1.1;[BmsMonitor-CANTest](https://git.acetaffy.ltd/acetaffy/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 | 保存原始电平、变化和时间,并按下表更新 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 帧仅在启动和电平变化时发送,持续心跳维持已有采样。用户已确认按接线表从上到下对应 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 共用映射;实测范围见 [映射测试报告](DEBUG十五路CAN映射测试报告.md)。 ## 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`;参见 [淘晶驰虚拟浮点数文档](http://wiki.tjc1688.com/widgets/Xfloat.html)。其余 UART 数字接口沿用 [通讯交接文档](通讯交接文档.md)。 ## 任务回传 另有 v2.2 新增的标准 `0x182` 仪表显示输入,设置扭矩千分、电机温度和 MCU 温度,三个值独立于 BMS / SDC 计时。该自定义接口不改变本文的源协议字段,详见 [DBC 说明](AMI_CAN_DBC说明.md)。 屏幕确认后发送 `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 快照见 [发布的发送记录](evidence/2026-10-03/sdc-bms/sdc_bms_visual_results.json)。 上述 v2.0 测试未接线实测 CAN2。后续 v2.1 已按 CAN1 500K / CAN2 250K 分别测试,见 [双 CAN 报告](CAN1_CAN2_v2.1测试报告.md);当前 v2.2 见 [显示 CAN 报告](AMI自定义显示CAN测试报告.md)。未测试物理串口屏,未接真实 SDC/BMS 节点,未验证 VCU 实际执行或安全动作。现有画面的 EBS 文案不能作为安全状态证明。