在调试模式下,可以通过JTAG下载MPSoC PL的bit文件,再下载MPSoC PS的软件。这时候,PL已经下载,PS软件应该能够访问PL实现的AXI寄存器。但是PS的软件会卡住。如果使用同样的软件和bit文件,做成boot.bin,在QSPI/SD启动模式下,又一切正常。
或者boot.bin里只有PS的软件,启动过程中通过Vivado加载PL bit文件;然后在使用PS软件去访问PL的AXI寄存器,也会有问题。
这是因为在MPSoC PS和PL之间,有一个开关。如果不使能开关,PS软件就不能访问PL的AXI寄存器。
如果boot.bin里有PL的bit文件,FSBL在启动过程中就会加载PL bit文件;然后打开PS和PL之间的开关。相关代码如下:
#ifdef XFSBL_BSif (DestinationDevice == XIH_PH_ATTRB_DEST_DEVICE_PL) {Status = XFsbl_PLWaitForDone();if (Status != XFSBL_SUCCESS) {goto END;}/*** PL is powered-up before its configuration, but will be in isolation.* Now since PL configuration is done, just remove the isolation*/psu_ps_pl_isolation_removal_data();/* Reset PL, if configured for */(void)psu_ps_pl_reset_config_data();......}
#endif
如果运行在PS-Only-Restart模式,也会自动打开PS和PL之间的开关。相关代码如下:
if (FsblInstancePtr->ResetReason == XFSBL_PS_ONLY_RESET){/**Remove PS-PL isolation to allow u-boot and linux to access PL*/(void)psu_ps_pl_isolation_removal_data();(void)psu_ps_pl_reset_config_data();}
如果应用或者调试需要分别下载 PL bit文件、PS软件,请参考上述代码,主动打开PS和PL之间的开关。