Files
AMI/firmware/README.md
T

62 lines
4.1 KiB
Markdown
Raw 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 主控固件
这是 `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 报文。
## 数据路径
- 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。
- 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.2 BIN 已烧录并完整回读比对;新 0x182 在 CAN2 250K 实测,见 [显示 CAN 测试报告](../docs/AMI自定义显示CAN测试报告.md)。v2.1 的双 CAN 分别联调和两路均为 500K 的 v2.0 历史证据及 BIN 保留;SDC 仍为 500K。