Fedora-ARM
全部博文(241)
分类: LINUX
2009-11-03 10:23:52
一、启动识别nand boot or Nor boot(此办法已废止,更好的方法如下) 找到识别 nand boot 和 nor boot 的方法,其实也是在自己犯的一个错误中找到的。 当我在使用nand boot的时候,想使用操作Nor flash的命令,但是一用就死机,我一开始以为是操作flash的程序错了. 但我找了半天都没有找到错误,最后终于发现:原来这是S3C2440芯片的机制的问题,在硬件上设为Nand boot的时候,作为Nor boot的那个分区没有被映射到相应的地址. 也就是说,将mini2440的启动选择开关打在Nand boot的时候,Nor flash硬件上是不可用的。但是在Nand boot启动后,你再把开关拨到Nor boot,又可以操作Nor flash了。 在将mini2440的启动开关打在nand boot的时候,读取nor flash,得到的都是0。 利用这一点,我在启动的时候,只需读取nor flash中4K(和nand boot原理有关)之后的一段数据,如果都是0,证明是Nand boot,否则为Nor boot。 4K之后多少和uboot有关,太后面了可能出现连续的0,所以我用16进制查看器看了下uboot的bin文件,确定在8K左右不可能出现连续16个字的0。 所以我在一启动的时候读取地址为0x2000处的数据,如果检测到非零数,就启动Nor boot的自拷贝程序,否则跳到Nand boot程序。 |
|
0xdeadbeef;
0xdeadbeef
,不是的话就说明有未知错误,死循环!
)。但是最后有一点很重要:如果是Nand boot,必须要复原清零的数据。原因是:在nand boot过后,会核对内部SRAM中的4K程序,和从Nand中拷贝到SDRAM的前4K程序是否一致,如果不一致会进入死循环。读取NFCONF寄存器的0~3bit的数 据,以检查硬件上Nand flash的配置,然后根据配置跳转到相应的自拷贝程序。 具体的实现请看u-boot-2009.08 for mini2440 patch release和S3C2440的数据手册。 |
nicholasldf2009-11-05 10:34:39
这个方法不好,不保险: “利用这一点,我在启动的时候,只需读取nor flash中4K(和nand boot原理有关)之后的一段数据,如果都是0,证明是Nand boot,否则为Nor boot。 4K之后多少和uboot有关,太后面了可能出现连续的0,所以我用16进制查看器看了下uboot的bin文件,确定在8K左右不可能出现连续16个字的0。” 从norflash的0地址开始读取几个数据,看看是不是arm的跳转指令就可以了 0地址处都是异常向量嘛,看看atmel arm数据手册的启动流程部分,就是用这种方法的。