码迷,mamicode.com
首页 > 其他好文 > 详细

flashloader的问题解决过程

时间:2020-04-03 20:00:27      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:状态   出现   最大   需要   问题   工作   bsp   无法   bootrom   

1.问题:flashloader无法烧写qspi flash(自行生成的FSBL.out不能烧写,golden FSBL.out可以烧写)

解决过程:

最开始是比对ps_init.c,替换后发现问题并未解决;

然后通过proxxxx_jtag-debug.exe烧写qspi flash 判断fsbl load到了0xe8002800 而不是ocm (Proxxxx Console信息也有此信息)

进而定位到0326 proxxxx 导出的FSBL link文件有误,需要手动修改(新版已修复)

2.问题:解决了问题1后,可以烧写qspi flash但是无法启动

板上qspi flash

最大单口快速读速度:50MHz

最大双口读速度:33MHz

最大四口读速度:33MHz

结论是qspi降低频率

实际频率=设置的频率/BD系数 (默认BD系数为4)

如果设置频率为200MHz,那么实际频率为50MHz(默认就是200MHz,很显然50MHz处于临界状态,会出现一定概率不能正常启动的状态)

所以需要修改默认导出的频率到130MHz

但是还有几个疑点没有想明白

  • 还有在没有修改频率的情况下(200MHz)为什么可以烧写成功呢
  • 为什么烧写BOOT.bin(FSBL.out和helloworld)无法启动;烧写golden的BOOT.bin(FSBL.out和u-boot)可以启动

 

烧写过程是bootrom-->fsbl-->u-boot

全程bootmode在jtag方式,所以fsbl并不会初始化qspi,只会初始化ddr,qspi的初始化在u-boot中进行,

u-boot在devicetree中设置了spi-max-frequency,目前为50MHz,BD系数为2-32,实际工作频率最高为50/2=25MHz,

实际启动后用md显示的BD系数仍为4,所以频率为50/4=12.5MHz。

所以可以烧写成功

 

BOOT.bin中打包的是fsbl和裸机程序/u-boot

启动过程为bootrom引导fsbl,fsbl引导裸机程序/u-boot。在fsbl执行阶段会初始化qspi flash,然后从qspi flash中读取裸机程序/u-boot到ddr中执行。

 

经过反复试验,BOOT.bin(FSBL.out 50MHz和helloworld)可以烧写成功,但是有一定概率无法启动成功 (bootrom-->fsbl 50MHz-->helloworld  这时候bootmode在qspi方式,fsbl以50MHz初始化qspi flash,以这个频率从qspi flash中读取helloworld到ddr中执行)

golden的BOOT.bin 不确定是什么版本的 proxxxx 导出的,默认的qspi频率是多少并不明确(FSBL.out ??MHz和u-boot),于是重新做了一个BOOT.bin(FSBL.out 50MHz和u-boot)(bootrom-->fsbl 50MHz-->u-boot  这时候bootmode在qspi方式,fsbl以50MHz初始化qspi flash,以这个频率从qspi flash中读取u-boot到ddr中执行)

也出现了u-boot有时候可以正常启动,有时候只启动到一半就挂了的现象,板子断电久了,qspi flash温度低了,可以正常启动,如果一直开着板子,大概率启动不了(qspi flash温度高)

 

 所以,可以烧写qspi flash但是无法启动的问题定位于频率问题,需要降低qpsi的频率。

 

flashloader的问题解决过程

标签:状态   出现   最大   需要   问题   工作   bsp   无法   bootrom   

原文地址:https://www.cnblogs.com/idyllcheung/p/12628367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!