问题描述:DM6467T +NAND FLASH,做了30套板子,使用几个月时间后,发现有几块板子,无法正常启动系统,
表现为:上电后,调试串口没有任何输出;
正常板子输出为:
DM646x initialization passed!
TI UBL Version: 1.50
Booting Catalog Boot Loader
BootMode = NAND
Starting NAND Copy…
Valid magicnum, 0xA1ACED66, found in block 0x00000006.
DONE
Jumping to entry point at 0x81080000.
U-Boot 2009.08 ( 3鏈08 2019 – 14:51:26)
gxl Cores: ARM 500 MHz
gxl DSP: 1000 MHz
gxl DDR: 400 MHz
I2C: ready
DRAM: 256 MB
NAND: [nand_flash_init, 490]: gxl emif_regs->AB1CR=3ffffffc
1024 MiB
In: serial
Out: serial
Err: serial
ARM Clock :- 500MHz
DDR Clock :- 400MHz
EEPROM @ 0x50 read FAILED!!!
Net: Ethernet PHY: GENERIC @ 0x00
DaVinci EMAC
Hit any key to stop autoboot: 0
所以个人认为:是DM6467T 内部RBL没有成功启动UBL,如果正常启动UBL,应该会打印:DM646x initialization passed!
TI UBL Version: 1.50
Booting Catalog Boot Loader等信息。
至于RBL为什么没有成功启动UBL现在不清楚!!!!!.
对这块板子重新烧写UBL和UBOOT后,启动可以正常启动,并且uboot的环境变量,kernel、fs、app等分区和固件都存在,并且不用烧写,可以正常启动,所以怀疑存储在NAND FLASH中UBL固件丢失或损坏。
请大家帮忙分析定位以下问题
(1)DM6467T 小概率UBL和UBoot不启动,重新烧写可以启动的原因是是什么,我应该如何定位,谢谢大家
Chris Meng:
你好, nand flash的内容是有可能发生变化,这是和nand flash本身特性相关。DM6467T支持1bit nand ECC,所以如果nand上的数据只发生1bit的翻转,是可以纠正回来的。但是如果翻转的bit过多,硬件ECC就不能正确纠错,启动就可能失败。 如过你手上还有不能启动的板子,建议你把flash上的ubl读出来,和正确值对比一下,看是否有bit翻转的情况。 由于这个问题,你可以尝试在nand上面烧写多个ubl的备份,因为rom code在block1的page0如果没有发现ubl的话,会继续在接下来的4个block的page 0里搜索ubl。具体请参考bootloader相关章节。 www.ti.com/…/spraas0d.pdf 同样的原理,你也可以在flash上放多个uboot/uimge的备份,那ubl/uboot的跳转/搬移需要做修改。
Chris Meng:
回复 Chris Meng:
更正一下,RBL会在block1~5的page0里面搜索ubl。
user3906396:
回复 Chris Meng:
请问,如果我要往NAND FLASH上烧写两份UBL和uboot,我用串口烧写的,那么烧写地址如何确定和修改,
user3906396:
回复 Chris Meng:
如何烧写多个ubl和uboot
Chris Meng:
回复 user3906396:
你好,
默认的ubl是不支持多个uboot加载的,需要你修改ubl代码来实现,所以第二个uboot的烧写地址由你修改的ubl来决定。
第二个ubl的地址是nand flash block2的page0。请确保你的uboot/uImage/filesystem没有烧写这个区域,以免覆盖。
user3906396:
回复 Chris Meng:
那我先实现最简单的,在NAND FLASH的block2,3,4,5中都烧写一个ubl,uboot还是只烧写一个,那么烧写的4个ubl程序是不是都一样,具体的烧写过程能用sfh_DM646x.exe烧写吗,谢谢您
Chris Meng:
回复 user3906396:
user3906396那么烧写的4个ubl程序是不是都一样
ubl功能是初始化芯片的时钟和加载uboot到相应DDR并执行。只要这些功能/地址没有变化,那ubl就不需要变化。
user3906396具体的烧写过程能用sfh_DM646x.exe烧写吗
sfh_DM646x.exe默认只烧写一个ubl,所以需要你修改代码来支持多个ubl的烧写。
user3906396:
回复 Chris Meng:
首先,非常感谢您的帮助,请问有没有能烧写多个ubl的sfh_DM646x.exe工具啊,我不会改sfh_DM646x.exe软件,sfh_DM646x的源码在哪里可以找到,
Chris Meng:
回复 user3906396:
你好,
抱歉,没有现成的烧多个ubl的工具。
串口烧写工具源码请到下面网址下载:
sourceforge.net/…/编译方法,请参考:
processors.wiki.ti.com/…/Serial_Boot_and_Flash_Loading_Utility