青春无悔
分类: C/C++
2015-04-06 16:14:24
在运行SDRAM中的代码的时候发现不能正确运行,当初下载的方法是通过mini2440自带的supervivi的d命令烧写程序。现在想想真是犯了很多错误。在韦东山的书上不止一次强调这些裸机程序要下载到nandflash上运行,但我都是通过supervivi的d命令来下载到SDRAM中运行,呵呵,能正常运行才怪。现在稍微总结下:
1.这些裸机程序是需要下载到nandflash中运行的。当从nandflash启动CPU时,CPU会通过内部的硬件将nandflash开始的4KB的数据复制到称为"Steppingston"的4KB的内部RAM中(起始地址为0),然后跳到RAM的地址0开始执行。
2.通过supervivi的d命令是把程序下载到SDRAM就是内存的起始地址0x3000000中的。这时候其实是从nor flash启动的。本例中如果先从nor flash启动,把程序直接下载到SDRAM中运行,就开始运行SDRAM中的代码,把steppingston中4KB的代码复制SDRAM中,这个时候由于steepingston中的东西是未知的,所以会把SDRAM中的代码覆盖掉,导致程序错乱。
3.正确的操作方法是先从nor flash启动,然后用v命令(把程序下载到nandflash的vivi分区,而vivi分区的地址是0x0-0x50000)下载程序到nandflash , 其实v命令的过程是通过DNW先把程序下载到SDRAM中,然后执行了nand写操作,把0x30000000开始的那段代码复制到了nandflash的0地址处(这段是听网上一个朋友说的)。这样就把代码下载到了nandflash中。然后再从nandflash重新启动,这样stepingston中就是nandflash中的代码了,本试验就能正常运行了。