zynq无DDR使用OCM加载程序运行

2016-11-01 09:48 阅读 1,968 次 评论 0 条

zynq的standalone BSP默认是有ddr的,所以加载的fsbl工程也是基于ddr的,无ddr则无法正常运行。如果在zynq block design阶段,不使能ddr,这样生成bit文件,导出sdk建立bsp工程,编译时出现以下错误,不能通过。

image

原因为错误处的DDR_REG变量由于DDR_SIZE无效而无效。

在以前的日志中,采用的方法是在zynq block design配置时保留ddr,而在程序编写时不使用ddr,这种方法是不彻底的,因为在fsbl中会使用到ddr,如果硬件板卡中包含ddr,则运行工程没有问题,如果硬件板卡中本身没有ddr,运行必然死机。

这次的做法是手动修改bsp文件,在xparameters.h中添加DDR的地址空间定义,如下图

image

然后再新建hello world工程,在Linker Script:lscript.ld目录下确实没有ddr的地址空间。

image

新建fsbl应用程序工程与fsbl_bsp,ddr的修改方式同上。

在fsbl应用程序工程中需要手动修改,每个段到ram_0空间,因为ram_1空间全部留给应用程序helloworld(不然空间不够)。

在fsbl的应用程序工程中main.c中增加XPAR_PS0_DDR_0条件编译,而这个宏是不定义,也就是这里DDR初始化是不进行的,因为zynq block design中没有配置DDR,如果这里初始化必然死机。

image

然后在fsbl.h中,重定义DDR_END_ADDR宏,将其指向OCM1地址空间的结尾,因为在搬移PS部分代码时会判定地址空间是否有效。

image

最后是helloworld工程,将其lscript.ld中的地址空间分配到OCM的RAM_1地址空间

image

然后和普通工程一样生成boot.bin文件,烧写flash即可正常加载。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:zynq无DDR使用OCM加载程序运行 | 起点博客
分类:应用笔记 标签:, , , ,

发表评论


表情