Files
chrg/docs/修改日志.md
T
yhf c8bfef090a chore: 发布V1.1.26版本,修复Sink角色切换初始化残留问题
1. 更新所有文件版本号至V1.1.26,同步固件版本寄存器值
2. 修复Sink角色往返时初始化上下文残留问题,切换回Sink时重新执行完整初始化
3. 优化Sink配置生效逻辑,同角色仅复制PC可写配置,保留运行状态
4. 增加初始化阶段入队标记,避免沿用旧成功结果跳过未执行命令
5. 停止入队失败时由北向轮询重试,不依赖On_work或通道使能
6. 新增Sink初始化回归测试套件,覆盖14种场景验证流程正确性
2026-09-17 12:01:50 +08:00

388 lines
18 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.
# 修改日志
## V1.1.26 - 2026-09-17
### 修复Sink角色往返时初始化上下文残留
- Source切回Sink时清除旧Sink初始化阶段、提交标记和延时计时;重新执行清短路及继电器等完整初始化,避免角色切换回码被误判为旧初始化成功。
- 应用版本更新为 `V1.1.26`,对外固件版本寄存器 `0x0300` 为 `0x012A`;Bootloader不变。
## V1.1.25 - 2026-09-17
### 修复Sink重复启动及退出Short时初始化卡住
- 同角色Sink参数生效只复制PC可写配置,不再覆盖实时work_mode、sub、On_work、test_mode_old及量测数据。
- 初始化/退出Short期间,相同运行请求继续原事务,不重复取消批次;不同配置返回Modbus忙(异常码0x06),PC需等待后重新发送参数生效。停止流程未完成时也拒绝新运行请求。
- 已开始的初始化收到重复INIT时恢复到INIT_AUX_WAIT,避免被last_state去重卡住;停止和掉电保护允许抢占初始化。
- 按阶段记录初始化命令是否入队,入队失败或批次失败时重试当前阶段,禁止用上一阶段的成功结果跳过未发送的命令。
- 重复/拒绝的Sink配置不再无条件递增北向配置版本,避免连续参数生效导致有效回码被反复丢弃。
- STOP入队失败后由北向轮询继续重试,不依赖On_work或通道使能。
- 应用版本V1.1.25,对外寄存器0x0300返回0x0129;Bootloader不变。不修改Von门槛、串口超时和南向队列容量。
- 增加主机回归测试tests/sink_init(运行真实状态机及COM生效函数,模拟南向批次和时钟)。硬件仍需验证单/四通道循环启停、反复Short进入退出、通信超时恢复及停止安全性。
## V1.1.24 - 2026-09-15
### 统一应用版本定义
- CHRG应用版本统一为 `V1.1.24`,版本信息集中定义在 `chrg_def.h`。
- 上位机读取寄存器 `0x0300` 返回 `0x0128`。
- `apps/chrg` 各C源文件和头文件的文件头版本统一为 `V1.1.24`。
- Bootloader版本保持 `V1.0.0` 不变。
- 后续每次修改应用代码时,必须同步更新应用版本号、对外版本编码和本修改日志。
## V1.1.23 - 2026-09-11
### 负载初始化继电器时序调整
- 负载初始化先单独下发辅助继电器 `FU_REL_ON (0x01 0x02)`。
- 只有收到匹配回码后,等待 `30ms` 才打开北向负载继电器。
- 北向继电器打开后,再继续下发电流、模式、V_On等初始化参数。
- 辅助继电器回码失败时只重发当前初始化阶段,不提前打开北向继电器。
- 协议板版本号更新为 `V1.1.23`,固件版本寄存器更新为 `0x0127`。
### 待验证
- 上电初始化日志中确认先收到 `01 02`,约30ms后才出现北向继电器打开。
- 辅助继电器无回码时确认北向继电器保持关闭。
## V1.1.22 - 2026-09-11
### 增加纹波滤波调试打印
- 记录每个通道主继电器闭合的 tick 和忽略帧配置。
- 打印忽略帧的序号、原始纹波值及继电器闭合后的经过时间。
- 打印实际进入滤波的帧序号、原始值、滤波值及经过时间。
- 协议板版本号更新为 `V1.1.22`,固件版本寄存器更新为 `0x0126`。
- 待验证:确认宏调整后忽略帧数量和实际进入滤波的时间同步变化。
## V1.1.21 - 2026-09-11
### 继电器切换纹波滤波
- 主继电器闭合回码成功后,忽略 `RIPPLE_RELAY_IGNORE_P1_COUNT` 个新P1采样帧;当前值为 `2U`,可在 `chrg_north.h` 中调整。
- 后续纹波持续使用三点中值滤波,滤除单帧尖峰;连续异常纹波仍会正常显示。
- LCD和上位机纹波寄存器统一使用滤波后的纹波值。
- 协议板版本号更新为 `V1.1.21`,固件版本寄存器更新为 `0x0125`。
### 验证记录
- 待硬件验证:继电器闭合瞬间出现约500mV尖峰时,LCD和上位机不显示该尖峰;忽略2帧后再累计3帧并更新为稳定纹波。
- 待硬件验证:持续三帧以上的高纹波仍能在LCD和上位机显示。
## V1.1.20 - 2026-09-10
### D+/D-上位机显示单位修正
- 上位机读取各通道 `D+`、`D-` 保持寄存器时,返回值由内部原始值放大 `10` 倍,适配上位机按 `0.001V` 解析。
- LCD显示、北向回码解析及内部控制值保持原有 `0.01V` 单位,不受影响。
- 增加16位寄存器上限保护,放大结果超过 `65535` 时返回 `65535`。
- 协议板版本号更新为 `V1.1.20`,固件版本寄存器更新为 `0x0124`。
### 验证记录
- 待硬件验证:D+或D-内部值为 `260` 时,LCD继续显示 `2.60V`,上位机读取值为 `2600` 并显示 `2.600V`。
## V1.1.19 - 2026-09-10
### 短路测试绕过 V_ON 门槛
- 短路测试启动批次增加 `Eload_Start_V_ON=500mV`,保证5V输入时不因用户设置的6V V_ON而拒绝短路启动。
- 短路测试期间忽略普通 V_ON 更新,保持功率板使用500mV短路启动门槛。
- 退出短路测试时由初始化流程恢复用户设定的 V_ON。
- 协议板版本号更新为 `V1.1.19`,固件版本寄存器更新为 `0x0123`。
### 验证记录
- 待硬件验证:V_ON=6V、输入PD5V时,短路模式仍能启动并按周期发送 `WORK_START`。
- 待硬件验证:退出短路模式后,功率板恢复用户设定的 V_ON。
## V1.1.18 - 2026-09-10
### 修复 CC 切换时 V_ON 丢失
- 修复 V_ON 与 CC 线同时修改时,V_ON 命令先入队后被完整握手清队列取消的问题。
- 协议软卸载和完整握手统一按 `WORK_STOP -> Eload_Start_V_ON` 顺序下发。
- 握手或命令重试时会重新携带当前 V_ON,避免功率板继续使用旧阈值。
- 协议板版本号更新为 `V1.1.18`,固件版本寄存器更新为 `0x0122`。
### 验证记录
- 待硬件验证:同时修改 V_ON 与 CC 线,确认功率板收到 `Eload_Start_V_ON`。
- 待硬件验证:确认 CC 切换失败重试、协议电压切换和其他通道调度正常。
## V1.1.17 - 2026-09-10
### 协议切换期间禁止误启动
- 将 V_On 稳定确认计数提升为通道级状态,并在协议软卸载、完整握手和自动停止时清零。
- `UNLOAD_WAIT`、`HANDSHAKE_WAIT` 以及协议配置未完成前,电压采样只推进安全流程,不允许进入 `RUNING` 或发送 `WORK_START`。
- 协议/模式配置完成并回到 `IDX_GET_SINK_VC` 后,才重新累计 V_On 稳定确认帧,避免停止后约40ms因旧电压再次启动。
- 协议板版本号更新为 `V1.1.17`,固件版本寄存器更新为 `0x0121`。
### 验证记录
- 待硬件验证:协议电压切换时确认 `WORK_STOP` 后、协议配置完成前不再出现 `WORK_START`。
- 待硬件验证:确认协议切换、自动停止恢复和三个通道并行调度不受影响。
## V1.1.16 - 2026-09-09
### Sink 自动停止后的恢复保护
- 新增 `SINK_LOAD_RESTART_CONFIRM_COUNT`,位于 `chrg_north.h`,当前设为 `2U`。
- 功率板电压作为 V_On 判定源时,仅消费新的 P1 采样帧,旧采样不再重复累计稳定次数。
- 自动停止带载时取消本通道残留南向批次,再单独下发 `WORK_STOP`,避免残留 `WORK_START` 在停止后执行。
- 自动恢复带载前必须收到连续 `2` 帧新的、满足 `V_On` 的电压采样。
### 验证记录
- 待硬件验证:触发 CH1 自动停止后,确认停止后 2 帧新P1到达前不再出现 `WORK_START`;同时确认其它通道南向命令正常调度。
## V1.1.15 - 2026-09-09
### 运行中 V_On 更新
- Sink 通道处于运行状态时,参数生效检测到 `V_On` 改变,会向对应功率板下发 `Eload_Start_V_ON`。
- 下发值保持既有下限:小于或等于 `500mV` 时按 `500mV` 发送。
- 南向队列提交失败时,本次参数生效返回忙,协议板运行参数保持原 `V_On`。
### 验证记录
- 待硬件验证:运行中修改 `SINK_REG_VON_VOLT (0x0B)` 并执行参数生效,确认功率板收到 `Eload_Start_V_ON` 新值。
## V1.1.9 - 2026-08-25
### Source 复位后的初始化流程
- 从其他协议切换到 PD 时复位加入断开CC,D+D-,GND逻辑,等断开后再复位,再初始化
- 增加 PD 切换到非 PD 协议时的完整复位;PD/非PD跨类别切换统一执行复位。
- PD切PD、非PD切非PD以及仅切换CC线时不复位。
- 新增 `SOURCE_WORK_INIT_WAIT`,复位回码后重新执行 Source 初始化,并等待南向初始化批次完成。
- 加入了读取版本号
## V1.1.8 - 2026-08-24
### 修改主题
修复了source部分的PD协议长时间运行后会出不来的问题
对应芯海3221/source版本V_1.07
### Source协议复位切换
- 新增`SOURCE_RESET`命令:发送`06 00 02 18 00 0E`,校验回码`05 00 02 18 16`。
- 首次发送协议不复位;PD与非PD跨类别切换时先复位。
- PD切PD、非PD切非PD以及仅切换CC线时不复位。
- 删除`CC_CLOSE`状态及其共享等待屏障。
- 协议设置回码有效后更新`last_pd_pro`,避免协议尚未生效时错误判断。
### 验证记录
- 使用1-2,3-4测试自举例程测试俩百次正常
- git diff --check`:通过。
- 旧`CC_CLOSE`状态、宏和调用引用:已检查清理。
- Keil编译:按当前要求未执行,待现场烧录后验证复位回码和协议切换时序。
## V1.1.7 - 2026-08-08
### 修改主题
并行执行Sink完整握手中的南向低电流确认与北向协议/CC设置。
### 主要修改
- 南向安全批次完成并收到辅助继电器回码、建立量测基线后,立即允许北向设置协议和CC线。
- 南向实际电流连续两次不大于 `100mA` 的确认过程与北向协议/CC设置并行执行。
- 北向进入 `GET_SINK_VC` 后,只有低电流确认完成且CC后的 `200ms` 查询保护时间到期,才发送第一条 `0x20`。
- 电压稳定后再发送 `ALL_REL_ON -> 目标电流 -> WORK_START`,防止协议协商期间提前带载。
### 涉及文件
- `apps/chrg/applications/thread/chrg_roll_nor.c`
- `apps/chrg/applications/utils/chrg_sink.c`
- `apps/chrg/applications/utils/chrg_sink.h`
### 编译验证
- Keil MDK 编译结果:`0 Error(s), 0 Warning(s)`。
## V1.1.5 - 2026-08-08
### 修改主题
协议电压和协议电流变化统一采用软卸载重发协议流程。
### 主要修改
- 协议类型、CC线和协议组号变化仍进入完整握手并切换南向继电器。
- 协议电压、协议电流单独变化或同时变化时,只发送 `WORK_STOP`,不关闭南向继电器。
- 软卸载不再额外发送 `CURRENT=0`,仅通过实际电流连续两次不大于 `100mA`确认电子负载已停止。
- 协议重新生效且电压稳定后,由RUNNING先写入实际负载电流,再发送 `WORK_START`。
### 涉及文件
- `apps/chrg/applications/thread/chrg_comm.c`
- `apps/chrg/applications/utils/chrg_sink.c`
### 编译验证
- Keil MDK 编译结果:`0 Error(s), 0 Warning(s)`。
## V1.1.4 - 2026-08-07
### 修改主题
调整负载低电流启动时的继电器和工作命令顺序。
### 主要修改
- 设定电流为 `0A` 或低于 `100mA` 时,协议握手仍正常执行。
- 电压达到目标后发送 `ALL_REL_ON`,确保主继电器打开。
- 主继电器打开后继续发送 `WORK_STOP` 和 `CURRENT=0`,保持电子负载不带载。
- 已经处于运行状态切换到低电流时,沿用原有停止流程,不重复切换继电器。
### 涉及文件
- `apps/chrg/applications/utils/chrg_sink.c`
### 编译验证
- Keil MDK 编译结果:`0 Error(s), 0 Warning(s)`。
## V1.1.3 - 2026-08-07
### 修改主题
并行执行Sink南向初始化与北向握手,并优化握手查询和RUNING继电器时序。
### 主要修改
- `INIT`将 `FU_REL_ON -> CURRENT=0 -> MODE -> VON` 作为一个有序南向批次提交。
- 南向初始化批次成功入队后立即打开北向Sink继电器、设置 `enable=1` 并开始协议握手。
- `SINK_WORK_INIT_AUX_WAIT`改为后台监控南向初始化,不再阻塞北向协议、CC和电压查询。
- 南向初始化失败重试时保留当前北向 `sub`,不重复拉回协议设置起点。
- 协议或CC有效回码后,首条 `0x20` 等待 `200ms`;电压未稳定时后续每 `100ms` 查询一次。
- 一帧通过CRC、ID、命令和配置版本校验的电压达到目标后立即进入 `RUNING`,不再等待第二帧。
- 进入稳定运行后立即解除查询节流,恢复北向正常轮询速度。
- `RUNING`删除重复的 `FU_REL_ON`,调整为 `ALL_REL_ON -> 目标负载值 -> WORK_START`。
### 涉及文件
- `apps/chrg/applications/utils/chrg_sink.c`
- `apps/chrg/applications/thread/chrg_roll_nor.c`
- `apps/chrg/applications/thread/chrg_north.c`
### 编译验证
- Keil MDK 编译结果:`0 Error(s), 0 Warning(s)`。
### 硬件验证
- 待确认南向初始化命令与北向协议/CC设置并行执行且互不重置状态。
- 待确认首条和后续 `0x20` 间隔分别约为 `200ms` 和 `100ms`。
- 待确认进入 `RUNING` 时不再发送 `FU_REL_ON`,主继电器不会被重复断开。
## V1.1.2 - 2026-08-07
### 修改主题
降低Sink协议握手阶段的北向电压电流查询频率。
### 主要修改
- 新增 `SINK_HANDSHAKE_QUERY_INTERVAL_MS`,设置为 `200ms`。
- Sink协议或CC设置收到有效回码后,不立即发送或连续快速发送 `0x20` 查询。
- CC路径的 `200ms` 从有效 `0x17` 回码时刻开始计时,包含原有 `50ms` CC稳定保护。
- 协议握手、软恢复等待和掉电恢复监控阶段的 `0x20` 查询按每 `200ms` 一次执行。
- 北向量测连续两次达到稳定条件后解除节流,`RUNING` 和低电流待机恢复正常查询频率。
- 仅重发协议的 `IDX_SET_SINK_PD_ONLY` 路径同样启动 `200ms` 查询等待。
- 设置协议和CC命令仍然按有效回码、超时和原有重试机制处理。
### 涉及文件
- `apps/chrg/applications/thread/chrg_roll_nor.c`
### 编译验证
- Keil MDK 编译结果:`0 Error(s), 0 Warning(s)`。
### 硬件验证
- 待观察协议/CC设置后 `0x20` 的发送间隔是否稳定为不小于 `200ms`。
- 待验证电压连续两次稳定后是否恢复正常量测频率。
## V1.1.1 - 2026-08-07
### 修改主题
增加普通负载最低带载电流控制,低电流时保持协议在线但关闭电子负载。
### 主要修改
- 新增 `SINK_LOAD_ENABLE_MIN_MA`,恒流负载设定低于 `100mA` 时禁止发送 `WORK_START`。
- 最低带载门限只判断南向负载电流 `loadc`,不影响北向协议电流 `pro_loadc` 和协议握手。
- 首次启动或完整重握手后为低电流时,发送 `WORK_STOP -> CURRENT=0` 并保持主继电器关闭。
- 运行中由有效电流降至低电流时,发送 `WORK_STOP -> CURRENT=0`,保持协议、CC和继电器不变。
- 运行中低电流待机恢复有效电流时,只发送目标电流和 `WORK_START`,不重新握手或切换继电器。
- 主继电器未打开的低电流待机使用独立 `SINK_WORK_LOAD_START` 恢复入口,避免被 `RUNING` 状态去重。
- 低电流待机期间仅修改协议电压时不重复卸载,并保持原有主继电器状态语义。
- 将 COM 端运行电流跨门限判断封装为 `chrg_comm_handle_sink_load_current()`,避免生效分支继续膨胀。
- 北向解析将两种低电流待机状态作为稳定状态,不因实际电流为零反复进入 `RUNING`。
- 低电流待机恢复有效电流时,`SINK_WORK_LOAD_START`/`SINK_WORK_LOAD_RESUME` 只作为待启动标记,必须等北向实际电压稳定后才下发 `WORK_START`。
### 涉及文件
- `apps/chrg/applications/utils/chrg_sink.h`
- `apps/chrg/applications/utils/chrg_sink.c`
- `apps/chrg/applications/thread/chrg_comm.c`
- `apps/chrg/applications/thread/chrg_north.c`
### 编译验证
- Keil MDK 编译结果:`0 Error(s), 0 Warning(s)`。
### 硬件验证
- 待验证 `20V/3A -> 20V/0A -> 20V/3A` 的南向命令顺序和协议保持情况。
- 待验证首次以低于 `100mA` 的电流启动时,北向握手正常且南向不执行 `WORK_START`。
## V1.1.0 - 2026-08-07
### 修改主题
负载启动、掉电恢复、协议重握手和协议电压软切换时序调整。
### 主要修改
- 负载启动时先向南向发送 `FU_REL_ON`,收到有效回码后才打开北向 Sink 继电器。
- 剩余的负载初始化命令在副继电器确认后入队,北向协议握手与南向初始化并行执行。
- `RUNING` 阶段的南向命令继续追加到同一队列,保持初始化配置、继电器、目标电流/电压和 `WORK_START` 的顺序。
- 掉电恢复时执行 `WORK_STOP -> CURRENT=0 -> ALL_REL_OFF -> FU_REL_ON`,副继电器恢复后等待输入电压重新出现。
- 掉电恢复检测到电压后重新设置协议和 CC,不能使用掉电前的电压样本直接进入 `RUNING`。
- 协议类型、CC、协议组号或协议电流变化进入完整重握手,关闭主副继电器后重新打开副继电器。
- 仅协议电压变化使用软卸载,只发送 `WORK_STOP` 和 `CURRENT=0`,不切换继电器。
- 软卸载恢复时只发送目标电流/电压和 `WORK_START`,不再发送继电器命令。
- 保留连续两次实际电流不大于 `100mA` 的安全确认,以及连续两次稳定电压确认。
- 暂时保持南向主副继电器之间的固定延时为屏蔽状态。
### 涉及文件
- `apps/chrg/applications/utils/chrg_sink.h`
- `apps/chrg/applications/utils/chrg_sink.c`
- `apps/chrg/applications/thread/chrg_comm.c`
- `apps/chrg/applications/thread/chrg_roll_nor.c`
- `apps/chrg/applications/thread/chrg_north.c`
### 编译验证
- Keil MDK 编译结果:`0 Error(s), 0 Warning(s)`。
- 尚未完成硬件验证,需重点观察南向命令顺序、北向协议握手时刻、掉电恢复和协议电压软切换。
### 后续记录格式
后续每次修改按以下格式追加:
```text
## Vx.y.z - YYYY-MM-DD
### 修改主题
### 主要修改
### 涉及文件
### 编译验证
### 硬件验证
```