作者:付汉杰 hankf@amd.com
在调试模式下,可以通过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_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之间的开关。相关代码如下:
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之间的开关。
文章来源:博客园