MINI2440 从NAND FLASH启动时的代码复制理解心得

来源:互联网 发布:淘宝买东西怎么改价格 编辑:程序博客网 时间:2024/06/06 05:23

有错误请指出。

1.首先,S3C2440存储控制器的地址空间分布图:

 

MINI2440 <wbr>从NAND <wbr>FLASH启动时的代码复制理解心得

理解错误的地方:NANDFLASH在图中对应的地址是多少?

              NANDFLASH理解为硬盘,该图为存储控制器地址空间分布,用于连接外设的共1GB的地址空间。
摘自书本原话:

   S3C2440对外引出的27根地址线ADDR0--ADDR26的访问范围为128MB,那么如何达到上面所说的1GB的访问空间呢?-----CPU还对外引出了8根片选信号线nGCS0-nGCS7,对应BANK0-BANK7,当访问BANKx的地址空间时,nGCSx引脚输出低电平用来选中外接的设备。这样可对应128MB* 8 = 1GB的地址空间。

   图:【没有看到NANDFLASH】MINI2440 <wbr>从NAND <wbr>FLASH启动时的代码复制理解心得

2.从NANDFLASH中启动时(理解为从硬盘启动),CPU会通过内部的硬件将NANDFLASH开始的4KB数据复制到称为Steppingstone的4KB的内部 RAM中(上图中起始地址0,SRAM),然后跳转到地址0开始执行。【这是硬件自动完成的第一个复制,下面第二个复制要软件代码完成】

本实例(存储控制器操作实例:使用SDRAM)先使用汇编语言设置好存储控制器,使外接的SDRAM可用;然后把程序本身从Steppingstone复制到SDRAM中(后面解释为什么要复制);最后跳转到SDRAM中执行。【SRAM(性能好)--copy-->SDRAM】

图:执行过程:【注意PC的变化!!!!】

MINI2440 <wbr>从NAND <wbr>FLASH启动时的代码复制理解心得

生成执行文件下载到板子上运行后,可以发现与原LEDS程序(没有第二部分的复制过程,在steppingstone中执行)相比,LED闪烁得更慢,原因是外部SDRAM的性能比内部RAM(SRAM)差一点。

    把程序从性能更好的内部RAM移到外部SDRAM中去执行,是否是多此一举呢?----内部RAM只有4KB,如果程序大于4KB,那么就不能指望完全利用内部SRAM来运行了,得想办法把存储在NAND FLASH【硬盘,烧写到NANDFLASH中】中的代码复制到外部SRAM中去。对于NANDFLASH中的前4KB,芯片自动把它复制到内部SRAM中,可以很轻松地再把它复制到外部SRAM中,要复制4KB之后的代码就需要使用NAND FLASH 控制器来读取NAND FLASH了,详见NAND FLASH 控制器部分内容!

 

   因此,综合所述,程序代码烧写到NANDFLASH【硬盘】 中后,从NAND FLASH 启动时,芯片会自动将NANDFLASH中前4KB的代码复制到内部RAM中【对应上图地址空间分布图地址0X00000000】,然后再运行里面的程序(从0地址处),这种情况下我们需要保证将启动代码保存在NandFlash开始的位置,并且启动代码的大小要小于4K。

   如果系统的所有程序在编译链接后的大小小于4K,那在系统的启动代码中无需考虑将程序从NandFlash搬运到SDRAM这个问题,因为所有的程序在启动时即全部由NandFlash拷贝至SRAM【自动完成】,程序在SRAM中运行即可;

   如果系统的所有程序在编译连接后的大小大于4K,那么在系统的启动代码中需要包含一段将系统的全部程序从NandFlash搬运到外部SDRAM的代码,因为系统启动时只将Nand Flash的前4K拷贝到了SRAM中,还有部分程序保存在NandFlash中,NandFlash中是无法运行程序的,需要将所有程序拷贝至SDRAM并在其中运行,所以在系统的启动代码中要包含这段有关程序拷贝的代码,并在所有程序拷贝完成后使程序跳转到SDRAM中运行。也就是说在启动方式为NandFlash启动的情况下,因为Nand Flash的特性,程序需要涉及到两次的搬移【复制】,一次是从NandFlash搬移到SRAM【芯片自动完成】,搬运的程序量大小是4K,目的是使系统能够启动第二次搬运是从NandFlash搬运到系统的SDRAM【软件代码完成】,搬运的程序量大小是系统的所有程序,目的是使程序在SDRAM中运行。第一次搬运是S3C2440通过硬件机制自动实现的,我们无需干预,第二次则需要我们程序员来实现,详见NANDFLASH 控制器部分内容!

0 0
原创粉丝点击