Boot 程序无法从NandFlash 启动
问题描述:
1、ARM芯片使用的是Atmel at91sam9g45 ,片内RAM 64K。
2、BMS为1,芯片将会从内置的 ROM 启动,里面的程序会被执行。
启动程序包含了几个步骤。第一,进行设备的初始化,然后尝试从外部的存储器(NVM)进行启动最后,如果在NVM找不到有效的程序,则会执行一段叫做 SAM-BAR Monitor 的监控程序。
3、NandFlash 连接在EBI0 CS3上。
4、Boot程序内存分布如下,链接地址为0x300000(片内RAM起始地址)
中断向量表存放在 [from 0x300000 to 0x3000FF]
.cstartup代码段存放在[from 0x300100 to 0x3004FF]
.text段存放在[from 0x300500 to 0x3020FF]
.data段,.bass段,以及栈,堆存放在 [from 0x302100 to 0x307FFF]
5、在.cstartup段的开始处,我用汇编写了一个点灯的代码,接着就是设置CPU模式,关闭IRQ,FIQ中断,关闭看门狗,设置CPU时间等操作。
6、通过IAR工具把Boot程序直接下载到片RAM里面,是可以正确被执行的,一上电灯就亮了。
7、通过烧写工具把Boot.bin文件写到了NandFlash开始处,已经验证Boot.bin文件是完全正确地写在NandFlash的开始处的,因为我从NandFlash开始处读Boot.bin文件长度,和Boot.bin对比是一样的。
问题是一上电,板子上的LED灯没有亮。怀疑NandFlash的Boot程序没有被拷贝到片内RAM里面。
这个问题折磨我一周了,一直没有解决,希望大侠指点一下,不胜感激。