新闻  |   论坛  |   博客  |   在线研讨会
Mini2440启动代码的编写(1)
blueflag | 2010-05-25 20:57:05    阅读:5891   发布文章

Mini2440启动代码的编写

 

启动代码是系统上电或复位以后运行的第一段代码,它的作用是在用户程序运行之前对系统硬件及软件运行环境进行必要的初始化并在最后使程序跳转到用户程序,它直接面对ARM处理器内核及硬件控制器进行编程,所执行的操作与具体的目标系统紧密相关。

因为启动代码与目标系统紧密相连,所以在讲述Mini2440开发板的启动代码之前让我们先来了解一下它的启动方式。

S3C2440支持两种方式的启动:Nor Flash启动和Nand Flash启动。Nor FlashNand Flash都是非易失性存储器,Nor Flash的特点是芯片内执行,程序可以直接在其中运行,而不必将程序读取到RAM中运行。Nor Flash虽然具有这个优点,但是它的性价比远低于Nand Flash,因而很多系统采用Nand Flash启动。Nand Flash的特点是采用非线性存储模式,程序无法在其中运行,它只能作为程序或数据的存储载体,存储在其中的程序只能先拷贝到RAM中才能运行。

Nor Flash启动时,与nGCS0相连的Nor Flash就被映射到nGCS0片选的空间,其地址被映射为0x00000000;从Nand Flash启动时,S3C2440芯片内部自带的一块容量为4K的被称为“Steppingstone”(“起步阶石”)的BootSRAM被映射到nGCS0片选的空间,其地址被映射为0x00000000。当系统上电或复位时,程序会从0地址处开始执行,因此我们编写的启动代码要确保存储在0地址处。

当启动方式为Nor Flash启动时,没有额外需要考虑的问题,因为这种情况下程序在系统启动前就存储在Nor Flash中,我们只要保证将启动代码保存在Nor Flash开始的位置即可,系统上电或复位时,0地址处的启动代码就会被执行。

在启动方式为Nand Flash启动的情况下,系统启动前所有的程序存储在Nand Flash中,系统的启动过程稍微有点复杂:系统上电或复位时,0地址处为S3C2440内部自带的BootSRAM,启动前里面没有任何存储内容,启动后S3C2440先通过硬件机制将Nand Flash4K的内容拷贝至其中,然后再运行里面的程序(从0地址处)。这种情况下我们需要保证将启动代码保存在Nand Flash开始的位置,并且启动代码的大小要小于4K。如果系统的所有程序在编译链接后的大小小于4K,那在系统的启动代码中无需考虑将程序从Nand Flash搬运到SDRAM这个问题,因为所有的程序在启动时即全部由Nand Flash拷贝至BootSRAM,程序在BootSRAM中运行即可;如果系统的所有程序在编译连接后的大小大于4K,那在系统的启动代码中需要包含一段将系统的全部程序从Nand Flash搬运到SDRAM的代码,因为系统启动时只将Nand Flash的前4K拷贝到了BootSRAM中,还有部分程序保存在Nand Flash中, Nand Flash中是无法运行程序的,需要将所有程序拷贝至SDRAM并在其中运行,所以在系统的启动代码中要包含这段有关程序拷贝的代码,并在所有程序拷贝完成后使程序跳转到SDRAM中运行。也就是说在启动方式为Nand Flash启动的情况下,因为Nand Flash的特性,程序需要涉及到两次的搬移,一次是从Nand Flash搬移到BootSRAM,搬运的程序量大小是4K,目的是使系统能够启动;第二次搬运是从Nand Flash搬运到系统的SDRAM,如果系统的所有程序量小于4K,这一步可以省略,搬运的程序量大小是系统的所有程序,目的是使程序在SDRAM中运行。第一次搬运是S3C2440通过硬件机制自动实现的,我们无需干预,第二次则需要我们程序员来实现,这部分在下面的有关内容中会详细讲解。

Mini2440开发板带有两种FLASH2M Nor Flash128MNand Flash。按照开发板的设计目的以及很多实际的应用,系统一般选择从Nand FLASH启动,此文档讲解的内容也是基于Nand FLASH启动的,但厂家为了方便大家学习还是保留了Nor Flash,我们也可以将启动代码烧写至Nor Flash,并从中启动。两种启动方式的启动代码稍有不同,不同点主要在上述的第二次程序拷贝。启动方式可通过拨键开关S2来选择。

通过上述讲解我们简单了解了S3C2440的启动过程,现在就来讲述一下启动代码的编写过程。启动代码是面向ARM处理器内核和硬件控制器的,所以它的绝大部分都是通过汇编语言实现的。

待续

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客