在调试模式下,可以通过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之间的开关。相关代码如下:
代码语言:javascript复制#ifdef XFSBL_BS
if (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之间的开关。相关代码如下:
代码语言:javascript复制 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之间的开关。