ZYNQ fsbl阶段的调试方法

如下是从安富利工程师的技术支持的邮件中摘抄的,在此再次对他们表示感谢。工具

在咱们面对客户单板的时候,fsbl阶段的调试多少会有些问题,在这个过程当中怎么快速定位客户的问题,并将有效的信息反馈给但愿能帮助到你的人是决定解决问题时间长短的一个重要因素,在这里我写下一些我我的的调试经验,但愿对大家有帮助,即便你不打算亲自去用这里面写的东西,也请将你转发给你的客户。我不但愿听到看到收到关于问题的描述是只是仅仅是一句:客户的单板上电后没有任何反应。在这种状况下你要像了解女\男友同样去了解咱们的芯片,咱们的代码、咱们的工具。若是你不能理解我这篇文章,那只能接受马伊琍式的悲剧,等待第三方的出现。spa

         首先在咱们的fsbl工程中是有调试开关的,在src/fsbl_debug.h中增长FSBL_DEBUG_INFO的宏定义,这样就将fsbl中全部的调试信息打开,启动过程当中会有各类打印信息。debug

 

 

         若是很不幸你的fsbl工程已经将这个调试宏配置了,系统启动后仍是没有任何打印,在进一步调试以前你先要肯定如下几个事情:设计

         1:BOOT.BIN是否正确烧入flash中或保存在SD卡中3d

         2:XPS硬件工程中的串口是否和硬件实际设计一致指针

         3:波特率的设置有没有问题、串口线是否正常调试

 

         当你经过一系列的交叉实验确认上述一切正常,那只能往更低层进行分析了,由于这个时候有多是在芯片的BootROM运行阶段就出错了。将你的JTAG线连上单板,确认它正常工做后,咱们能够继续。blog

 

         首先我会在xmd里面经过connect arm hw命令链接到芯片,若是一切正常,你会看到下面的信息:flash

         OK,这个时候已经链接到芯片上了,接下来应该干什么?要知道该作什么跟咱们想知道什么是息息相关的,这个时候咱们最想知道的是处理器到底运行得怎样的,处理器运行的怎么样经过什么东西能体现的最直接?固然是CPU的那些通用寄存器,那怎么查看这些通用寄存器?固然是用rrd的命令:配置

 

经过rrd,你能够看到当前的PC指针指向的位置,为何是0xfffffe1c这个位置?不为何,由于我尚未将fsbl经过JTAG下载。那咱们继续吧,经过dow命令来下载fsbl的elf文件。

 

经过dow加载fsbl成功后,你能够再经过rrd命令看如今CPU的寄存器的值:

 

你能够看到pc已经被设置到0地址了,随时准备运行,只等你的发令枪响起来,OK,那咱们继续,执行run命令:

 

OK,你的fsbl已经跑起来了,这个时候你的问题发生了,只要不发生人力不可抗的事故,基本上你仍是能够经过stop命令将运行的CPU打住的:

 

你看到没有,CPU稳稳的停在了0x0000cd30的位置。固然我这里是正常状况,也许你那边根本就不是这个地方,可是只要是在dow命令那张图中的其中一个段中的地址,你仍是有机会查看到CPU运行到什么位置的。好比我这里0x0000cd30会对应fsbl工程里面哪行代码呢?让咱们回到SDK中fsbl的工程目录,找到Binaries里面对应的elf文件,猛烈双击它,在右边的窗口你就能够看到反汇编的结果:

 

咱们在打开的反汇编结果里面查找cd30,这样很快就能够找到对应的C代码行了:

 

 

固然像上面这些正常状况下的调试都很顺利,也许你面对的状况是将BOOT.BIN文件烧入到外部存储器以后,系统上电什么反应都没有,即便你的fsbl里面也加了打印。这个时候咱们就要关注一下如下问题:

fsbl是否被BootROM正常加载到OCM里面了,若是正常加载到了OCM里面,那就是fsbl执行阶段的问题,若是没有正常加载到OCM里面,那就是BootROM执行阶段的问题。

OK,咱们先看看怎么判断fsbl是否被BootROM正确加载到OCM里面去了没?

很简单,若是fsbl正常加载了,那OCM里面的数据不会是空的,它里面会是BootROM读取进来的代码和数据,就像下面这样:

 

若是没有被BootROM正常加载,那上面的数据就是全0.

OK,接下来分析一下若是没有被BootROM加载到OCM里面的状况,此时通常都是BootROM访问外设出了问题。再OK一下,咱们须要有个方法来确认是什么问题。在咱们的芯片里面有一段slcr寄存器,这里面有个记录复位缘由的寄存器REBOOT_STATUS,别被这个名字忽悠到,这里面确实有跟复位相关的信息,但更重要的是咱们能够从它的低16位获取到本次启动失败的缘由:

 

经过mrd命令将该寄存器的值读出来:

 

是个2是否是,2就对了,由于在UG585里面的的Debug Status章节里面的BootROM Error Output Codes里面写着2就是成功的。不2就有问题,你只须要根据这里面值就能够大体判断出问题所在。

 

 

         若是你看到了这里说明你是位好同志,请给我发邮件,我会建议领导给你加薪。

相关文章
相关标签/搜索