开发者分享|使用 AMD MicroBlaze™ 的 Boot Loader 的注意事项

科技   2024-07-18 19:02   中国香港  


本文作者:AMD 工程师 Hank Fu


AMD MicroBlaze 提供 Boot Loader,比如 SREC Boot Loader。它能将代码从 QSPI Flash 搬移到目标存储器(多半是 DRAM)运行,使 MicroBlaze 运行大程序成为可能。


如果 MicroBlaze 的 Block Design 设计有问题,比如 Block Design 设计中把 DRAM 链接到了 DP(外设)端口,DRAM 不能正常运行程序,也会导致 Boot Loader 运行失败。建议在运行 Boot Loader 之前,先测试 DRAM 运行程序,是否正常。


Boot Loader 运行时,假设 MicroBlaze 刚退出复位,系统中所有设置处于复位之后的默认状态。如果 MicroBlaze 运行了其它程序,可能使 MicroBlaze 的状态改变,可能导致问题。比如有程序使能了定时器中断,会定时产生中断。如果 Boot Loader 在运行过程中,硬件产生了中断,而 Boot Loader 又不能处理,则可能导致系统进入异常状态。


因此,建议在 Boot Loader 中增加下列代码,关闭中断处理、关闭 Cache 等。

Xil_ExceptionDisable();

Xil_DCacheFlush( );

Xil_DCacheDisable();

Xil_ICacheDisable();


使用 Boot Loader 时,建议的调试步骤如下:

  1. MicroBlaze 读 QSPI Flash ID 正常,读 QSPI Flash 数据正确,数据是 SREC 文件里的数据。

  2. MicroBlaze 能正常执行 DRAM 里的程序。

  3. 烧写 SREC 文件到 QSPI Flash。

  4. MicroBlaze 读 QSPI Flash 里的 SREC 文件的数据正确。

  5. MicroBlaze 执行 load_exec()加载程序后,跳转前,Reset 地址、DRAM 里的程序数据正确。双击 Microblaze 的 ELF 文件,可以自动反汇编,可以看到机器码。对比内存中的机器码,和 ELF 文件中的机器码一致。

  6. 执行 laddr() 前,flush cache,关闭 Cache。

  7. 执行 laddr() 中的跳转指令((*laddr)();)时,可以机器码单步执行。



AMD 自适应 SOC 及 FPGA 中文技术支持社区

欢迎您访问本社区论坛:

[https://support.xilinx.com/s/?language=zh_CN]

我们希望能帮助您快速找到所需内容。本网站是AMD 自适应 SoC 及 FPGA 支持资源登录页面,其中包括我们的知识库、社区论坛以及指向更多内容的链接。搜索并探索您所选主题的内容,然后登录以查看更多支持选项。



XILINX开发者社区
Xilinx开发者社区源于社区,服务社区,是面向广大开发者与产学研合作的平台,以技术为驱动,创建共享知识社区。(注: Xilinx is now a part of AMD)
 最新文章