目前看到不少人遇到了NAND flash启动失败的问题,调试的时候也是出现了五花八门的情况。有的硬件设计有问题,有的image做的有问题,这里列出一些debug的方案供大家参考。
一般来说,第一步大家都会把SD卡启动先调通,至少能用SD卡启动到UBOOT阶段,可以进入命令行。(这样至少能保证你的相关软件移植是没问题的,减免了考虑EEPROM、DDR等软件配置方面的问题。)下面的调试方法都是基于这个基础上所进行的。
1.查硬件(boot 模式相关,NAND FLASH部分),确认重要信号都已经被妥善链接的,可以参考GPEVM板的daughter board原理图进行设计。
特别注意:根据TRM手册的26.1.7.4 NAND 启动章节描述“The data bus width is initially set to 16 bits; and changed to 8 bits if needed after device parameters determination.”,当使用8bit NAND的时候,需要特别注意高8位的AD管脚,即GPMC_AD8~AD15,不要做上拉,否则会影响到NAND的识别,从而导致NAND启动失败。所以对于会将这部分管脚配置成为其他用途的设计,需要特别小心。
2. 使用仿真器,通过JTAG口连接AM335x,通过memory browser 查看地址0x44e10040的值,确认boot模式的设置是正确的。有案例显示,部分客户设计的上下拉有时会出现问题。
PS: 如果没有引出JTAG口,无法使用仿真器连接,在可以使用SD卡启动的时候,建议把boot 模式设置成为NAND启动在先,SD卡启动在后。这样NAND启动失败了后,也可以通过SD启动成功。进入UBOOT后,通过命令行输入md 0x44e10040, 也可查询当前的boot模式设置。
3. 测试MLO:可以采用下列链接中的MLO,运行成功能通过UART0输出信息。
http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/53263.aspx
可以通过SD卡、NAND的方式,看是否能够启动成。
4. 此外,使用的NAND型号不同,可能会存在ECC的校验问题,BCH Issue.
SDK6.0中已经默认设置了BCH8,软件配置的地方在:uboot\drivers\mtd\nand\omap_gpmc.c
与NAND型号相关的BCH Issue可参考:
http://e2e.ti.com/support/arm/sitara_arm/f/791/t/386565
摘要:
Based on the number of spare bytes per page, the ROM boot loader will try to use the largest ECC algorithm that it can.
So for NAND flash memories with 64 bytes per page, the ROM boot loader will assume BCH8 as the ECC algorithm, which is what we have been using with all of our software, and why the ROM boot loader boots correctly from our NAND flash devices with 64 spare bytes per page.
However, when we have 112 spare bytes per page, the ROM boot loader assumes that the ECC algorithm should be BCH16. Since we are using BCH8 during the flashing process, the ECC data in the spare memory is thus incorrect, and this is why the ROM boot loader is failing to boot.
文档:AM335x NAND启动失败问题解决方案
zhen yang4:
“至少能用SD卡启动到UBOOT阶段,可以进入命令行。(这样至少能保证你的相关软件移植是没问题的,减免了考虑EEPROM、DDR等软件配置方面的问题。”
用SD卡启动到UBOOT阶段也需要用到ddr的,请核实