取消
显示结果 
搜索替代 
您的意思是: 
Highlighted
Visitor
Visitor
803 次查看
注册日期: ‎02-04-2020

zynq xip固化问题

转到解答

zynq无DDR, 带了QSPI FLASH,vivado版本2018.3.

移植了XILINX提供的工程:

Zynq-7000 AP SoC Boot - Booting and Running Without External Memory

 

BOOT加载之后,串口收到的打印信息,如图所示,一直都在重复输出以下信息:

XILINX First Stage Boot Loader

Realease 2017.3  Feb 12 

_dataLMA =0xFC00CFF8

_dataLMA _start=0x0

_dataLMA _end=0xF40

_dataXVtableLMA=0xFC014000

_dataXVtableLMA_Start=

 

请问,这是啥原因?

webwxgetmsgimg.jpg
0 项奖励
1 个已接受解答

已接受的解答
Highlighted
Xilinx Employee
Xilinx Employee
277 次查看
注册日期: ‎06-19-2019

回复: zynq xip固化问题

转到解答

我感觉有一个地方存在了误解。XIP只是一个程序运行方式,对于QSPI控制器来说还是该怎么驱动还是怎么驱动。所以XIP方式并不会对FLASH正确的读写产生影响,关键是避开你FLASH中程序所使用的部分。

另外,Xilinx官方只支持FSBL部分进行XIP方式运行,wiki上的demo也只是FSBL采用了XIP方式,而用户程序是加载到了L2 cache中去运行的。

所以理论上如果你应用程序的代码也想运行在FLASH中也是可以的,但是需要你自己去做尝试,特别是linkscript部分要正确配置。

linkscript需要用text edit的方式打开才能开到全部内容。

如果你想改回到OCM中去运行的话,你可以把linkscript中相关的配置都改回OCM就可以了,但是注意用户程序大小,可能会超出导致无法生成ELF。

 

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------

在原帖中查看解决方案

0 项奖励
14 条回复14
Highlighted
Xilinx Employee
Xilinx Employee
746 次查看
注册日期: ‎06-19-2019

回复: zynq xip固化问题

转到解答

从你的log信息来看,是启动失败后,不停的再反复重启。

你可以尝试在FSBL中添加FSBL_DEBUG_INFO来输出更多的打印信息,或者自己在FSBL代码中插入打印信息来查看具体是执行到哪一步出错后,引起的不断重启。

另外,可以确认一下,你FLASH是否支持XIP模式,qspi读取方式是否采用的是Legacy Mode, 具体可以参考ug1085的chapter 24

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------
0 项奖励
Highlighted
Visitor
Visitor
737 次查看
注册日期: ‎02-04-2020

回复: zynq xip固化问题

转到解答
我添加了FSBL_DEBUG_INFO的宏定义,图片中就是打印信息,重复在输出。 我用的是micro, N25Q128A Flash,是支持LINE的XIP模式的。 如你所说,它应该在重复启动,但我的源文件都是COPY XILINX官网提供的,按道理不会导致出错。 从现象来看,似乎是FLASH里的FSBL代码,只执行了一部分,就一直在重启了。 有建议的入手方向吗?
0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
730 次查看
注册日期: ‎06-19-2019

回复: zynq xip固化问题

转到解答

入手的话,就是在FSBL中去添加打印信息,逐步查看是哪一步出错了。

着重看看qspi的驱动是否正常,linkscript是否配置正确。如果你application是要运行在 L2-cache中的话,还要检查translation_table是否配置正确。

另外,每次修改后,都需要重新生成BOOT.bin文件,并重新烧写进FLASH中,然后板子采用QSPI模式启动。如果用SDK去运行的话,会启动失败。

 

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------
0 项奖励
Highlighted
Visitor
Visitor
631 次查看
注册日期: ‎02-04-2020

回复: zynq xip固化问题

转到解答

串口的打印调试信息显示, fsbl没有输出完 _dataXVtableLMA_Start=。。。。

这条语句,就发生了重启。

也就是说,重启发生再串口输出的语句上。但很明显串口语句不会造成fsbl的重启。

请帮分析。

0 项奖励
Highlighted
Visitor
Visitor
618 次查看
注册日期: ‎02-04-2020

回复: zynq xip固化问题

转到解答

问题找到了,我将  SlcrUnlock();

这条语句注释掉就不会重启了。

关于SlcrUnlock相关资料哪里能找到?

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
605 次查看
注册日期: ‎06-19-2019

回复: zynq xip固化问题

转到解答

SlcrUnlock是对slrc进行设置,具体信息的话,你可以参考UG585中System Level Control Registers (slcr)的内容

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------
0 项奖励
Highlighted
Visitor
Visitor
593 次查看
注册日期: ‎02-04-2020

回复: zynq xip固化问题

转到解答

XIP加载正常了。

我还用FLASH存储了用户使用数据,现在的有了新的问题。

我在用户程序中对FLASH进行操作,就会死机。我只执行了一句FlashReadID,读取FLASH ID的语句。

 

XIP模式下,我在用户程序中还能读写FLASH剩余的部分(非BOOT存储部分)吗?

如果可以,有哪些需要注意的地方或者可以提供参考资料

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
589 次查看
注册日期: ‎06-19-2019

回复: zynq xip固化问题

转到解答

用户程序上需要注意读取FLASH的驱动模式,以及linkscript中各个section的映射关系,以及数据处理的大小是否超出了分配或者使用的空间。因为无DDR的情况下,空间资源会很小。

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------
0 项奖励
Visitor
Visitor
583 次查看
注册日期: ‎02-04-2020

回复: zynq xip固化问题

转到解答

我的FLASH有128M, 空间问题不存在。

读取驱动模式,你指的是?

我现在啥都没操作,只执行读取ID的指令,也死机。

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
526 次查看
注册日期: ‎06-19-2019

回复: zynq xip固化问题

转到解答

XIP模式下,一般是将固定不会变化的部分(比如代码)存储在FLASH中,然后直接执行省去了拷贝环节。

但是动态变量,堆栈还是会使用的是OCM或者cache资源。

FLASH ID读不出来,你需要确认下你代码中,读取方式是否采用的是legancy或linear addressing方式。

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------
0 项奖励
Highlighted
Visitor
Visitor
504 次查看
注册日期: ‎02-04-2020

回复: zynq xip固化问题

转到解答

意思是读FLASH ID,需要LINE ADDRESS方式?

另外,XIP模式下是否支持FLASH的写命令。

 

我的理解是XIP模式写只支持 LINE ADDRESS的读,其他的erase, write 指令是不支持的。

因位XIP模式下是不使用命令的。

那么我如果要写FLASH,就需要在应用程序中将FLASH先退出XIP模式,再写FLASH,写操作完成后。

然后再将FLASH设置为XIP模式?

0 项奖励
Highlighted
Visitor
Visitor
439 次查看
注册日期: ‎02-04-2020

回复: zynq xip固化问题

转到解答
如果我将这个已经实现QSPI XIP的工程改成: 将应用程序与FSBL程序都加载到内部的OCM中,FLSH不再存储。 针对这个工程,应该作哪些修改? 应用程序的linker script应该如何改?
0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
278 次查看
注册日期: ‎06-19-2019

回复: zynq xip固化问题

转到解答

我感觉有一个地方存在了误解。XIP只是一个程序运行方式,对于QSPI控制器来说还是该怎么驱动还是怎么驱动。所以XIP方式并不会对FLASH正确的读写产生影响,关键是避开你FLASH中程序所使用的部分。

另外,Xilinx官方只支持FSBL部分进行XIP方式运行,wiki上的demo也只是FSBL采用了XIP方式,而用户程序是加载到了L2 cache中去运行的。

所以理论上如果你应用程序的代码也想运行在FLASH中也是可以的,但是需要你自己去做尝试,特别是linkscript部分要正确配置。

linkscript需要用text edit的方式打开才能开到全部内容。

如果你想改回到OCM中去运行的话,你可以把linkscript中相关的配置都改回OCM就可以了,但是注意用户程序大小,可能会超出导致无法生成ELF。

 

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------

在原帖中查看解决方案

0 项奖励
Highlighted
Visitor
Visitor
259 次查看
注册日期: ‎02-04-2020

回复: zynq xip固化问题

转到解答

好的,感谢解答,已解决。

0 项奖励