跳转到主要内容

开发者分享 | 遵循 XAPP1247 进行操作时引发回退(含屏障镜像)

judy 提交于

本文转载自: <span id="profileBt"><a href="https://mp.weixin.qq.com/s?__biz=Mzg3NDAxNzU1MA==&amp;mid=2247486313&am…技术社区</a></span><a href="https://mp.weixin.qq.com/s?__biz=Mzg3NDAxNzU1MA==&amp;mid=2247486313&am…;微信公众号</a>

XAPP1247 是对应使用屏障镜像时的多重启动 (Multiboot) 和回退 (Fallback) 的示例应用。

本篇博文提供了一种屏障定时器流程测试方法以及使用此方法时可能出现问题。

屏障定时器流程测试方法多种多样,包括以下 2 种方法:

1. 移除镜像末尾部分
2. 尝试破坏同步 (Sync) 字

对于选项 1(删除镜像末尾部分),可观察到由于超时错误导致的回退。

但使用选项 2(破坏同步字)时则可能出现问题。

例如,您已编辑同步字,将其从 AA995566 更改为 ABCDABCD,导致其损坏。

如果使用十六进制编辑器编辑同步字,那么它会加载更新镜像,而不是执行回退。

为何即使已破坏更新镜像的同步字,仍会加载更新镜像?

在定时器镜像 1/屏障镜像 1 中已检测到同步字。

由于在定时器镜像 1/屏障镜像 1 中不含去同步 (DESYNC) 字,因此它不会在更新镜像中查找同步字。

如何解决此问题:

在此情况下,仅破坏同步字并不会导致发生回退。

但如果在定时器镜像后添加 DESYNC 字,就会引发回退至黄金镜像的操作。

如何在定时器镜像 1/屏障镜像 1 末尾添加 DESYNC:

在编辑器中打开 MCS 文件。包括:黄金镜像、屏障镜像 1、多重启动镜像和屏障镜像 2。

在屏障镜像 1 末尾添加 30008001(写 CMD 寄存器),后接 0000000D(DESYNC 字)。以下截屏显示如何添加 30008001(写 CMD 寄存器),后接 0000000D(DESYNC 字)。
<center><img src="http://xilinx.eetrend.com/files/2020-06/wen_zhang_/100049786-99362-daim…; alt=""></center>

然后保存此 MCS 文件。

现在,您即可使用此 MCS 文件来从闪存启动,并测试是否能正常引发回退。

注释:
<li>上述方法将包含在 XAPP1247 文档后续版本中。</li>
<li>在 XAPP1247 中描述的是对应 7 系列器件的屏障镜像流程,此流程同样适用于 UltraScale 和 UltraScale+ 器件。</li>