Files

82 lines
7.7 KiB
Markdown
Raw Permalink 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.
# AMI 主控固件
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 说明](../docs/AMI_CAN_DBC说明.md)。
这是 `AMI.HMI` 配套的 STM32 HAL 固件。目标器件按 **STM32G0B1CBT6(LQFP48,128 KB Flash)** 生成;ST 的 G0B1 产品线没有 `STM32G0B1C8T6`,如果实物丝印为 `STM32G0B1CCT6` 或 `STM32G0B1CET6`,引脚及应用代码兼容,只需在 CubeMX 中切换具体料号后重新生成。
## 引脚与外设
| 封装脚 | GPIO | 功能 |
| --- | --- | --- |
| 11 | PA0 | STATUS_LED1,500 ms 翻转一次(运行心跳) |
| 12 | PA1 | STATUS_LED2,仪表/SDC 状态活动超时提示;两路择有效输入 |
| 13 | PA2 | USART2_TX → 屏幕 RX,9600 8N1 |
| 14 | PA3 | USART2_RX ← 屏幕 TX,9600 8N1 |
| 19 | PB0 | FDCAN2_RX,250 kbit/s,与 CAN1 解码功能相同 |
| 20 | PB1 | FDCAN2_TX,250 kbit/s,与 CAN1 任务发送功能相同 |
| 33 | PA11 | FDCAN1_RX,默认 500 kbit/s |
| 34 | PA12 | FDCAN1_TX,默认 500 kbit/s |
LED 默认按高电平点亮。如果硬件是低电平点亮,将 `Core/Inc/ami_app.h` 中 `AMI_LED_ACTIVE_LEVEL` 改为 `GPIO_PIN_RESET`。
CAN1 为 500 kbit/s、CAN2 为 250 kbit/s。FDCAN 时钟为 64 MHz,两路 ClockDivider=1,NominalPrescaler 分别为 8 / 16;TimeSeg1=13、TimeSeg2=2、SJW=1,采样点均为 87.5%。CAN1 使用根目录 `AMI.dbc`,CAN2 使用 `AMI_CAN2_250k.dbc`。MCU 不在两路之间转发原始 CAN 报文。
当前版本 v2.7(2026-10-07)在 v2.6 双前轮轮速基础上增加独立无人状态反馈。v2.6(2026-10-05)接入 SDC 最新双前轮轮速 `0x6A2 / DLC 4`;本次 v2.7 已于 2026-10-07 烧录,CAN1/COM6 验收见文末记录,历史轮速记录仍不证明本次已连接真实 SDC 节点。
2026-10-06:v2.6 已写入 `0x08000000`,CubeProgrammer 校验成功,16632 字节 Flash 全量回读与发布 BIN 一致,MCU 已复位。烧录前保存完整 128 KB Flash 备份;真实 SDC/物理屏幕轮速联调尚未完成,见 [轮速验证报告](../docs/SDC轮速接入验证报告.md#2026-10-06-烧录与回读)。
## 数据路径
- FDCAN1、FDCAN2 使用相同的四条标准过滤器和一条扩展过滤器,接收自定义显示 0x182、SDC 0x6A0..0x6A6 与 BMS 0x140 / 0x156 / 0x186040F3 / 0x186140F3。
- 标准 0x182 / DLC 8:小端 int16 扭矩千分、0.1℃ 电机温度、0.1℃ MCU 温度;有效标志及版本校验见 [DBC 说明](../docs/AMI_CAN_DBC说明.md)。设置 dash.mct / djwd / mcuwd,独立超时 2000 ms。
- v2.4 标准 0x183 / DLC 8:VCU 实际任务、锁定、EBS 显示反馈,各有有效标志,独立超时 500 ms;错误帧不刷新超时。过滤器 3 使用双 ID 接收 0x182/0x183,两路共用解码。UART 更新 current_task/lock_state/ebs_state,任务请求不改写实际状态;屏幕接口需配套 1.4。
- 标准 0x6A6 的 PD0~PD14 按用户表顺序映射为 d0,d5,d2,d6,d7,d1,d3,d4,d8..d14;全部低电平正常、高电平故障,d15 保持未知。有效心跳维持已有状态;SDC 心跳/GPIO 均超过 500 ms 未接收后置未知,恢复需新 GPIO 采样。
- SDC `0x6A2 / DLC 4`:左前 PA0、右前 PA6 小端 uint16 mm/s,20 ms;平均轮速换算整数 km/h,`((left+right)*9+2500)/5000`。独立超时 500 ms 保留值变灰,旧 DLC 8 拒绝。
- SDC GPIO 当前每 1000 ms 周期上报,心跳仍维持已有状态。
- SDC ADC 为低压电池电压;BMS 总压、偏置电流和最高有效实际温度按源协议解码。旧 0x180 / 0x181 / 0x280 不再接收。
- 主循环通过 USART2 TX DMA 一次发送一条完整 TJC 指令,末尾为三个真实字节 `FF FF FF`。
- 仅变化后的数值排队,字段轮转和 DMA 合并最新值,避免刷新饥饿;白色为有效数值,灰色为未知/失效,ADC 和 BMS 各自计时。
- 每 5 秒重新同步全套显示状态,恢复晚启动或重连的屏幕;仍使用非阻塞 DMA 和最新值合并。
- USART2 使用 Receive-to-Idle DMA;屏幕发来的 6 字节任务帧可拆包、粘包解析。
- 合法任务帧进入 3 项有效容量的无锁小队列,再由主循环发到近期有通信的 CAN 口;两路都活跃时同时发送。
完整字节定义见 [SDC_BMS协议.md](../docs/SDC_BMS协议.md)。
## 构建
使用本机 STM32CubeCLT 1.19.0:
```powershell
$env:PATH = 'D:\STM32CubeCLT_1.19.0\CMake\bin;D:\STM32CubeCLT_1.19.0\Ninja\bin;D:\STM32CubeCLT_1.19.0\GNU-tools-for-STM32\bin;' + $env:PATH
cmake --preset Release
cmake --build --preset Release --parallel
```
ELF 输出为 `build/Release/AMI_Controller.elf`。需要 BIN 时:
```powershell
arm-none-eabi-objcopy -O binary build/Release/AMI_Controller.elf build/Release/AMI_Controller.bin
```
CubeMX 配置源为 `AMI_Controller.ioc`。重新生成时保留 USER CODE 区;`ami_app.c/.h`、`ami_protocol.h` 和根 `CMakeLists.txt` 为应用层文件,不要从工程中移除。
## 实物联调前确认
1. 核对芯片完整丝印,确认是 CB/CC/CE 中的哪一个。
2. 确认 CAN1/CAN2 收发器、终端电阻;CAN1 总线 500 kbit/s、CAN2 总线 250 kbit/s。
3. 确认屏幕是 TTL 电平并与主控共地,主控 TX 接屏 RX、主控 RX 接屏 TX。
4. 下载 `AMI.HMI` 后逐条验证仪表数值、16 路 debug 状态及 6 个任务按钮。
5. 2026-10-03 已完成 v2.1 CAN1 500K 与 CAN2 250K 分别到 MCU / USART2 / COM4 / 官方 HMI 调试器的联调;物理屏幕、真实节点、两路同时接入和 LED 极性尚未实测。见 [双 CAN 测试报告](../docs/CAN1_CAN2_v2.1测试报告.md)。
历史 v2.4 BIN 已烧录并完整回读 16428 字节一致,RAM 2640 字节,详见 [VCU 状态反馈报告](../docs/VCU状态反馈测试报告.md)。此前 v2.3 BIN 已归档,十五路映射历史实测见 [映射报告](../docs/DEBUG十五路CAN映射测试报告.md)。v2.2 的 0x182 CAN2 250K 历史实测见 [显示 CAN 测试报告](../docs/AMI自定义显示CAN测试报告.md)。v2.1 双 CAN 分别联调及 v2.0 历史证据保留;SDC 仍为 500K。
## 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` 为准,历史烧录和联调记录不代表本次版本已下载到实物。
2026-10-07:v2.7 已烧录并完整回读程序区 16,672 字节一致,保留 128 KB 烧录前备份;CAN1 500K→MCU RAM→COM6 实际链路 37 项通过,实际串口驱动官方 HMI 调试器新增状态 16 项通过,含触摸请求→UART→MCU→CAN 0x300。实物串口屏、CAN2、真实 VCU 和车辆动作未测试。详见 [无人状态验收报告](../docs/无人状态显示验证报告.md)。