zynq soc无外部存储器在QSPI Flash下XIP模式加载运行

2016-11-09 23:10 阅读 1,113 次 评论 4 条

前面测试zynq无ddr在ocm中加载运行,就是为了zynq xip模式加载运行做准备。虽然也是通过xilinx官网的Zynq7000AP_SoC_BootingWithoutExternalMemory改变修改而来,但实际操作时还是遇到了不少问题。

首先就是编译后会有“.data' can't be allocated in segment 0”的错误提示

clip_image002

我还专门查了一下,segment与section的区别,然并卵。

这时开始整理我的折腾过程中与demo的改变部分

1、硬件平台变化,由例程中的ZC702换到了MicroZed平台;

2、开发环境变化,由例程中的vivado2016.2版本换到了vivado2015.1版本;

硬件平台的变化,对于这个工程来说基本没有影响,因为使用PL资源很少,7Z010也够用了,只是hw工程不能直接使用,后面有修改ZC702到7Z010工程的方法说明。

主要问题就集中在开发环境的变化带来的区别,其实就是上面的link错误,通过比较在vivado2016.2版本下使用的toolchain为ARM v7 GNU,而在vivado 2015.1版本下不存在该版本。

clip_image004

所以也不知道是toolchain的版本变化带来的link错误,还是这种xip模式,将data放到QSPI Flash中,运行时加载到OCM RAM中的,本身就会存在这种问题。折腾好多天没搞定,最后还是决定使用vivado 2016.2版本。

在vivado2016.2下通过tcl文件导入工程(方法可以参考:运行vivado project tcl文件建立工程)。由于demo工程为zc702版本,需要修改为7Z010的工程,在下图中“project settings”中修改器件型号为7z010。

clip_image006

这时对zynq block design进行修改,还是被lock的,不能修改。

clip_image008

需要在IP Status下对已经生成ip进行升级,然后才能够编辑block desgin

clip_image010

编辑完成后生成bit文件,导出启动SDK,然后再导入software_projects中的工程,这时编译还是会出现上面的link错误,但.elf文件已经生成,所以可以生成.bin文件。

生成.bin文件才是最坑的,在Bootgen目录下的.bif文件中包含xip_mode

clip_image012

但是SDK的ui"create boot image"生成.bin文件后的.bif中就没有了xip_mode,此时生成的.bin文件也不能正常加载。

还好使用以前的Vivado SDK通过批处理一键生成mcs文件的方法,通过批处理生成.bin,然后program Flash加载运行正常。下面为fsbl的调试信息输出。

clip_image014

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:zynq soc无外部存储器在QSPI Flash下XIP模式加载运行 | 起点博客
分类:应用笔记 标签:, , , ,

发表评论


表情

  1. 木头人
    木头人 【农民】

    感觉不是很实用

  2. will
    will【站长】

    研究一些加载过程,还有很有帮助的。特殊情况下或许有用,毕竟现在基本都是基于ddr的设计

  3. xiaoche18
    xiaoche18 【农民】

    不用批处理,手动改写bif文件也是可以的。另外,楼主有公众号吗?

  4. will
    will【站长】

    批处理只是生成方便,主要还是在bif文件中。
    没有公众号,邮件联系吧