flashloader的问题解决过程

摘要:
在fsbl执行阶段会初始化qspiflash,然后从qspiflash中读取裸机程序/u-boot到ddr中执行。MHz和u-boot),于是重新做了一个BOOT.bin也出现了u-boot有时候可以正常启动,有时候只启动到一半就挂了的现象,板子断电久了,qspiflash温度低了,可以正常启动,如果一直开着板子,大概率启动不了所以,可以烧写qspiflash但是无法启动的问题定位于频率问题,需要降低qpsi的频率。

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

解决过程:

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

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

进而定位到0326proxxxx 导出的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的问题解决过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SqlServer大表2000w行左右查询语句优化和执行计划分析NetBeans 默认编码修改方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

QNX 实时操作系统(Quick Unix)

Gordon Bell和Dan Dodge在1980年成立了Quantum Software Systems公司,他们根据大学时代的一些设想写出了一个能在IBM PC上运行的名叫QUNIX(Quick UNIX)的系统,直到AT&T发律师函过来才把名字改成QNX。 中文名 QNX 实时操作系统 POSⅨ 规范 系统 嵌入式系统 目录...

【转】RO段、RW段和ZI段 Image$$??$$Limit 含义(zz)

作者评注:内容很多,不过解释讲解详细 http://www.cnblogs.com/heart-of-eagle/archive/2011/04/28/2032240.html 转载:          IMPORT |Image$$RO$$Limit|      IMPORT |Image$$RW$$Base|      IMPORT |Image$$Z...

NOR型flash与NAND型flash的区别

1) 闪存芯片读写的基本单位不同  应用程序对NOR芯片操作以“字”为基本单位。为了方便对大容量NOR闪存的管理,通常将NOR闪存分成大小为128KB或者64KB的逻辑块,有时候块内还分成扇区。读写时需要同时指定逻辑块号和块内偏移。应用程序对NAND芯片操作是以“块”为基本单位。NAND闪存的块比较小,一般是8KB,然后每块又分成页,页的大小一般是512字...

Linux等待队列原理与实现

当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。 waitqueue (等待队列) 就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用  add_wait_queue() 函数把进程添加到  waitqueue 中,然...

C#6.0语言规范(十二) 数组

数组是一种数据结构,包含许多通过计算索引访问的变量。包含在数组中的变量(也称为数组的元素)都是相同的类型,这种类型称为数组的元素类型。 数组具有确定与每个数组元素相关联的索引数的等级。数组的等级也称为数组的维度。秩为1的数组称为一维数组。秩大于1的数组称为多维数组。特定大小的多维阵列通常被称为二维阵列,三维阵列等。 数组的每个维度具有相关联的长度,该长度是...

【OC学习-12】什么是类的继承?为什么要继承?以及继承里面的注意事项

(1)怎样实现类的继承? //之前的继承根类,如类ASStudent继承自根类 @interface ASStudent:NSObject{ } @end //如今继承现有自己定义的类,如ASStudent继承自Student @interface ASStudent:Student{ } @end (2)为什么要学习继承?理由就是少些代码。某些东西能...