关闭

试图搞懂MDK程序下载到flash(六)--DNW+supervivi+MDK下载到Nand Flash

300人阅读 评论(0) 收藏 举报
分类:

    不容易啊,终于把 将MDK程序下载到我的mini2440开发板上的nand flash的方法找到了,我是利用韦东山老师的那套方法即利用DNW和supervivi下载到nand flash的。当然,只是方法之一,因为我能隐约的感觉到还可以使用MDK直接下载。下面我就将下载到nand flash的方法步骤完整的贴出来。

   在讲解方法之前,我还是想说明几点原理,避免知其然而不知其所以然。

supervivi的各功能选项说明

   

   功能[x]:对Nand Flash进行默认分区,此命令仅对Linux系统有效。

   功能[v]:通过USB下载Linux Bootloader之vivi到Nand Flash的 vivi 分区

   功能[k]:通过USB下载Linux 内核到Nand Flash的 kernel 分区

   功能[y]:通过USB下载 yaffs 文件系统映像到 Nand Flash的 root 分区

   功能[a]:通过USB下载用户程序到Nand Flash中,一般这样的用户程序为bin可执行文件,如2440test(需要支持超过4K限制)、uCos2(开发板中带的uCos2支持 Nand Flash启动)、U-Boot等;当然,也可以使其他任意大小的bin程序。

   功能[n]:通过USB下载WinCE之启动程序Nboot到Nand Flash的root分区

   功能[l ]:通过USB下载WinCE的启动logo

   功能[w]:通过USB下载WinCE发行映像NK.bin到Nand Flash

   功能[d]:通过USB下载程序到指定内存地址(通过DNW的Configuration/Option选项指定运行地址)并运行。对于我的mini2440开发板,SDRAM的物理起始地址是0x3000 0000,结束地址是0x3400 0000,大小为64MB,另外BIOS的USB下载功能时应指定地址在0x30000000 - 0x33de8000之间。

   功能[z]:通过USB下载Linux内核映像文件zImage到内存中,下载地址为0x30008000

   功能[g]:运行内存中的Linux内核映像,该功能一般配合功能[z]一起使用

   功能[f] :擦除Nand Flash,执行此功能将会擦除整片Nand FLash 中的数据

   功能[b]:启动系统,如果烧入了Linux或者Wince,执行此命令将自动识别启动系统

   功能[s]:设置Linux启动参数,详细见子菜单说明

   功能[u]:备份整个Nand FLash中的功能,通过USB上传到PC存储为一个文件,该功能类似于PC系统中经常用的Ghost工具

   功能[r]:使用备份出来的文件恢复到Nand FLash

   功能[q]:返回vivi的命令交互模式,在交互模式下输入menu命令,则可以返回到菜单模式

   功能[i] :版本信息

韦东山DNW+Supervivi下载bin文件到Nand Flash的方法

   ①在韦东山的书上,不止一次强调要将那些裸机程序下载到Nand Flash上运行。当从Nand Flash启动CPU时,CPU会通过内部的硬件将Nand Flash开始4KB的数据复制到称为“Steppingstone”的4KB的内部RAM中(起始地址为0),然后跳到RAM的地址0处开始执行。

   ②通过 supervivi 的 d 命令是将程序下载到SDRAM就是内存的起始地址 0x30000000中的。这时候其实是从 Nor Flash启动的。如果先从Nor Flash启动,把程序直接下载到SDRAM中运行,就开始运行SDRAM中的代码,把Steppingstone中4KB的代码复制到SDRAM中,这个时候由于Steppingstone中的东西是未知的,所以会吧SDRAM中的代码覆盖掉,导致程序错乱。

   ③正确的方法是先从 Nor Flash 启动,然后使用 v 命令(把程序下载到Nand Flash的vivi分区,而 vivi 分区的地址是 0x0-0x50000)下载程序到 Nand Flash,其实 v 命令的过程是通过DNW先把程序下载到SDRAM中,然后执行了 Nand写操作,把 0x3000 0000 开始的那段代码复制到了 nand flash 的0地址处,这样就把代码下载到了Nand Flash 中。然后再从 Nand Flash重新启动,这样Stepping Stone中就是 Nand Flash中的代码了,本试验就能正常运行了。(注意,这里隐含的意思是咱们的代码大小只能限制在4KB以内,如果代码大于4KB的话,还需要用到搬移,这个我以后会讲的,看来我只能自己写一个Bootloader了)。

MDK+Supervivi+DNW下载mini2440裸机程序步骤

   1、建立一个keil工程文档,并命名为test

   

   2、修改自带的S3C2440.s中的一处代码,将CLOCK_SETUP     EQU     0 修改为CLOCK_SETUP     EQU     1

   

   3、编写分散加载文件RuninFlash.sct,并存放在自己的工程目录中

   

   

  4、编写main.c文件,本工程只含有这一个c文件

   

   

  5、配置选项,只配置Linker和User选项,其他选项按默认值。

  Linker选项,配置后的内容如下图,记得在Scatter File一栏添加咱们刚才编写的RuninFlash.sct文件。

  

  User选项

  在下图Run User Programs ...下的Run #1一栏中添加自己的fromelf.exe文件,它一般存在你的MDK安装目录下的ARM/BIN40下,然后后边输入 --bin --output test.bin test.axf,这样做的目的是为了生成可以利用DNW下载的bin文件

   

  其他配置选项按默认值即可,无需改变。

  Target选项

   

 Output选项

     

   Debug选项

   

  Utilities选项

   

  6、工作都应经做完了,现在可以点击编译了,如下图

   

  7、现在打开mini2440的开发板,拨到Nor Flash启动,然后打开串口工具SecureCRT,在supervivi的界面中输入v命令,如下

    

   8、打开DNW,然后点击USB Port/Transmit,打开咱们的bin文件,就下载到了咱们的Nand Flash分区

   

  9、将开发板的拨到Nand Flash启动,然后重新启动开发板,就可以看到开发板上的Led1和Led3亮了。

   自此,整个步骤已经讲解完毕。

   该工程文件我上传到:http://download.csdn.net/detail/mybelief321/5425961,请自行下载

总结

  利用这种方法虽然是下载到了Nand Flash,但是他只限于4KB的代码,如果代码超过了4KB,那么久不能正常执行了,当然,有办法解决它,那就是在启动代码中加一段将Nand Flash的代码复制到SDRAM中去执行的功能,而不是在SRAM中执行。

  要实现这个方法,我想我只能硬着头皮去自己写个bootloader了,幸亏自己已经了解了MDK自带的启动代码了,现在要做的就是编写搬移代码,还有保证nand.o能连接在前4KB,这样子就可以了,任重道远啊,不知道还需要几天才能搞定它啊!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:300670次
    • 积分:4358
    • 等级:
    • 排名:第7246名
    • 原创:75篇
    • 转载:424篇
    • 译文:0篇
    • 评论:29条
    最新评论