3.4 KiB
3.4 KiB
PR17:DPD结束后恢复ORx FAGC实时跟踪
1. 背景
当前冷启动流程会调用 boot_cfg_fagc_update(),向 FPGA 的
FPGA_ADDR_DPD_CTRL3 写入 DPD_CTRL3_FAGC_UPDATE,因此在未执行
DPD Update 时,ORx FAGC保持实时跟踪。
执行DPD Update后,FAGC在训练阶段工作一段时间,然后被锁定。DPD完整结束后, 当前流程没有恢复冷启动时的FAGC工作状态,导致后续ORx反馈射频电平发生较大变化时, FAGC不能再次收敛。
2. 需求
DPD Update完整结束后,恢复与设备冷启动后相同的ORx FAGC实时跟踪状态。
要求:
- 只修改i.MX6应用代码。
- 不修改FPGA RTL。
- 不修改ORx DAGC逻辑。
- 不改变DPD训练期间现有的FAGC启停和锁定时序。
- 不触发新的DPD训练,不清除已经生成的DPD系数。
3. 修改方案
目标文件:
imx6/src/atsc_app/bsp/dpd_proc.c
复用现有函数:
boot_cfg_fagc_update();
该函数定义于:
imx6/src/atsc_app/bsp/fpga.c
如果 dpd_proc.c 中没有函数声明,则增加:
extern void boot_cfg_fagc_update(void);
在DPD Update完整成功结束、即将退出更新状态机的位置,调用:
/* 恢复冷启动后的ORx FAGC实时跟踪状态。 */
boot_cfg_fagc_update();
log_printf(LOG_INFO, I_USER_CFG,
"[DPD] update complete, ORx FAGC tracking restored\n");
如果该完整结束出口当前执行以下最终清零:
fpga_byte_write(0x05, FPGA_ADDR_DPD_CTRL3, 0);
则将这一次最终清零替换为 boot_cfg_fagc_update()。
必须保留phase 1、phase 7以及其他DPD训练阶段内部用于锁定FAGC的
FPGA_ADDR_DPD_CTRL3 = 0 操作。这些操作属于现有DPD收敛流程,不能替换。
如果工程中存在多套DPD Update状态机,应分别检查它们的完整成功结束出口,确保最终都恢复FAGC。
4. 修改后的工作状态
- 冷启动、不执行DPD Update:行为不变,FAGC持续实时跟踪。
- DPD训练期间:行为不变,FAGC先收敛,再按现有流程锁定。
- DPD Update完整结束:重新置位
DPD_CTRL3_FAGC_UPDATE。 - 后续ORx反馈电平超出RTL现有死区时,FAGC再次调整ADRV9009 ORx增益。
- DAGC控制方式和已完成的DPD系数保持不变。
5. 注意事项
boot_cfg_fagc_update()只有在ADRV9009 SPI控制权属于FPGA时才会写入;DPD结束时应确认SPI控制权已经交还FPGA。- 不增加
DPD_CTRL3_FAGC_SLOWDN,确保恢复状态与当前冷启动后的状态完全一致。 - 不触发
DPD_START。 - 只修改整个DPD Update的最终出口,不修改phase之间的临时控制操作。
6. 验证步骤
-
冷启动设备,不执行DPD Update,记录FAGC控制字或ORx
gain_index的工作状态。 -
执行一次完整DPD Update。
-
确认DPD结束后日志出现:
[DPD] update complete, ORx FAGC tracking restored -
DPD结束后改变反馈链路衰减,使ORx输入电平变化超过现有约±1 dB死区。
-
确认FAGC控制字及ADRV9009 ORx
gain_index重新变化并最终稳定。 -
确认DPD系数没有被清除或重新训练,发射输出保持正常。
7. 验收标准
- DPD Update结束后,FAGC工作状态与冷启动且未执行DPD时一致。
- 反馈射频电平明显变化后,FAGC能够重新收敛。
- DPD训练阶段原有的FAGC锁定逻辑不变。
- 不涉及RTL和DAGC修改。