Files
repo-smod-atsc/doc/modify_guide_260825/PR17_DPD结束后恢复ORx_FAGC实时跟踪方案.md

3.4 KiB
Raw Permalink Blame History

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. 修改后的工作状态

  1. 冷启动、不执行DPD Update:行为不变,FAGC持续实时跟踪。
  2. DPD训练期间:行为不变,FAGC先收敛,再按现有流程锁定。
  3. DPD Update完整结束:重新置位 DPD_CTRL3_FAGC_UPDATE。
  4. 后续ORx反馈电平超出RTL现有死区时,FAGC再次调整ADRV9009 ORx增益。
  5. DAGC控制方式和已完成的DPD系数保持不变。

5. 注意事项

  • boot_cfg_fagc_update() 只有在ADRV9009 SPI控制权属于FPGA时才会写入;DPD结束时应确认SPI控制权已经交还FPGA。
  • 不增加 DPD_CTRL3_FAGC_SLOWDN,确保恢复状态与当前冷启动后的状态完全一致。
  • 不触发 DPD_START。
  • 只修改整个DPD Update的最终出口,不修改phase之间的临时控制操作。

6. 验证步骤

  1. 冷启动设备,不执行DPD Update,记录FAGC控制字或ORx gain_index的工作状态。

  2. 执行一次完整DPD Update。

  3. 确认DPD结束后日志出现:

    [DPD] update complete, ORx FAGC tracking restored
    
  4. DPD结束后改变反馈链路衰减,使ORx输入电平变化超过现有约±1 dB死区。

  5. 确认FAGC控制字及ADRV9009 ORx gain_index重新变化并最终稳定。

  6. 确认DPD系数没有被清除或重新训练,发射输出保持正常。

7. 验收标准

  • DPD Update结束后,FAGC工作状态与冷启动且未执行DPD时一致。
  • 反馈射频电平明显变化后,FAGC能够重新收敛。
  • DPD训练阶段原有的FAGC锁定逻辑不变。
  • 不涉及RTL和DAGC修改。