Files
chrg/docs/power_board_upgrade_issues_and_plan.md
wrh fe15dd48fe feat: 新增PD充电带模式设置流程,完善调试开关与升级文档
1. apps/boot/application/main.c: 注释掉跳转APP代码,启用APP_Running循环
2. apps/chrg/applications/thread/chrg_roll_nor.h: 新增5个带模式设置的状态索引
3. apps/chrg/applications/thread/chrg_north.h: 开启Sink协议调试,关闭南向命令调试
4. docs\power_board_upgrade_issues_and_plan.md: 新增功率板升级问题与修改计划文档
5. apps/chrg/applications/thread/chrg_roll_nor.c: 新增模式设置相关状态处理逻辑,适配新增状态索引
6. apps/chrg/applications/thread/chrg_comm.c: 新增YModem超时机制、调试日志与升级控制帧发送逻辑,完善升级流程
2026-09-08 20:24:04 +08:00

167 lines
5.2 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.
# 功率板升级问题与修改计划
## 1. 升级链路
```text
上位机
↓
协议板 App
↓ 进入升级指令
协议板南向 UART
↓
功率板 Boot
↓ 0x06、0x43
协议板 App
↓
上位机
进入升级控制帧:
03 06 00 0F 00 FF F8 6B
跳转 App 控制帧:
03 06 00 0F 00 0F F8 2F
功率板 Boot 使用裸 BIN + YModem 接收升级数据。
2. 已确认的问题
2.1 协议板发送日志含义不准确
协议板日志:
[UPG] CTRL ENTER try=1 tx=0
tx=0 只表示发送请求已经提交到南向升级发送流程,不能证明 UART 已经在物理线上发送成功。
需要通过串口逻辑分析仪确认实际线路是否出现完整控制帧。
2.2 功率板 Boot 控制帧接收依赖一次完整 DMA 回调
当前 Boot 主要在以下条件同时满足时识别进入升级帧:
received_len == 8
usart1_dma_rx_buf[0] == 0x03
UPDATE_FRAME_MATCH
如果控制帧被 DMA 空闲中断拆成多次接收,当前逻辑可能无法在拼接完成后重新判断控制帧。
2.3 功率板 Boot 只有擦除成功后才发送应答
处理流程:
收到完整控制帧
↓
Flash_Erase_App_Region()
↓
擦除成功:发送 0x06、0x43
擦除失败:发送 0x15
因此:
- 完全没有响应:优先检查 UART 接收、帧匹配、通道切换和线路;
- 返回 0x15:重点检查 Flash 擦除;
- 返回 0x06 但协议板没有收到:检查南向返回线路和协议板接收线程。
2.4 Flash 分区注释与实际大小不一致
当前配置:
APP_FLASH_BASE_ADDR = 0x08003800
APP_FLASH_SIZE = 0x0000B000
0xB000 实际为 44 KB,而代码注释写成了 40 KB。
同时擦除配置为:
NbPages = 22
PAGE_SIZE = 0x800
22 页也是 44 KB。需要确认这是否符合实际功率板 Flash 分区规划。
2.5 南向通道和收发方向需要单独确认
协议板升级前会执行:
chrg_south_switch(ch)
串口发送前后还会切换 RS485 收发方向。通道选择错误、方向控制延迟不足或线路未接通,都可能导致功率板无法收到控制帧或协议板收不到 0x06。
3. 修改计划
3.1 完善功率板 Boot 控制帧接收
在 DMA 接收回调中:
1. 累积多次接收到的数据;
2. 达到 8 字节后统一匹配进入升级帧和跳转帧;
3. 匹配成功后设置对应 pending 标志;
4. 匹配失败时清理缓存并等待下一帧;
5. 增加接收长度和帧内容调试输出,或使用 GPIO 翻转辅助定位。
3.2 完善协议板发送状态
协议板需要区分:
- 发送请求提交成功;
- UART 实际发送完成;
- 功率板返回 0x06;
- 功率板返回 0x15;
- 等待超时。
日志中应明确打印实际发送长度和发送帧内容。
3.3 完善应答重发机制
控制帧和 YModem 数据帧均应保留最近一次发送内容:
- 等待 ACK 超时后重发;
- 收到 NAK 后重发;
- 超过最大重试次数后退出升级;
- 收到 CAN 后立即中止;
- 半帧超时后清理接收缓存并等待下一帧。
3.4 核对 Flash 配置
需要确认:
- 功率板 MCU 型号;
- Flash 页面大小;
- Boot 起始地址;
- App 起始地址;
- App 最大容量;
- Boot 工程链接地址;
- App 工程链接地址;
- YModem 文件最大长度。
确认后统一修正宏定义、擦除页数和注释。
3.5 保持升级状态期间停止普通南向轮询
进入升级模式后:
- 停止普通 Modbus 轮询;
- 锁定目标功率板通道;
- 只转发控制帧、YModem 数据帧和单字节应答;
- 升级结束或失败后恢复普通轮询。
4. 待验证项目
4.1 控制帧发送
使用逻辑分析仪确认协议板实际发送:
03 06 00 0F 00 FF F8 6B
确认:
- 波特率为 115200;
- 数据格式为 8-N-1;
- 通道选择正确;
- RS485 发送方向正确;
- 帧没有被截断。
4.2 功率板接收
在功率板 Boot 的:
HAL_UARTEx_RxEventCallback()
检查:
Size
usart1_dma_rx_buf[0..7]
期望:
Size = 8
03 06 00 0F 00 FF F8 6B
4.3 功率板帧处理
确认以下变量和流程:
g_update_prepare_pending = 1
Check_Updata()
Ymodem_HandleControlFrame()
Flash_Erase_App_Region()
记录 Flash 擦除返回值。
4.4 功率板应答
确认功率板 UART 线上依次发送:
06 43
其中:
- 0x06 表示控制帧处理成功;
- 0x43 表示进入 YModem 接收等待。
4.5 协议板接收
确认协议板南向接收线程能识别:
0x06
0x15
0x43
0x18
并将应答正确放入 YModem 应答队列。
4.6 YModem 数据传输
确认:
- 上位机发送的是裸 BIN;
- 首包为 YModem 元数据包;
- 数据包号连续;
- 功率板每包返回 0x06;
- 丢包或 CRC 错误时返回 0x15;
- 重发后包号状态正确;
- EOT 流程能够正常结束。
4.7 异常场景
需要测试:
- 控制帧拆包;
- 控制帧丢失;
- 0x06 丢失;
- YModem 数据包丢失;
- YModem 数据包 CRC 错误;
- 升级中途断电;
- 升级中途复位;
- BIN 文件超过 App 分区;
- Flash 擦除失败;
- 跳转帧发送失败。
5. 暂停调试时的结论
当前暂不进行硬件调试。后续恢复调试时,优先使用逻辑分析仪确认以下最小链路:
协议板发送控制帧
→ 功率板 DMA 收到 8 字节
→ 功率板识别控制帧
→ Flash 擦除成功
→ 功率板发送 0x06
→ 协议板接收到 0x06
只有这条链路确认成功后,再继续验证 YModem 数据包传输。