历史上的今天
今天是:2026年01月09日(星期五)
2023年01月09日 | 以s3c2440为例的arm芯片的启动过程
2023-01-09 来源:elecfans
arm 嵌入式芯片的启动过程对于嵌入式菜鸟来说其实是很复杂的,很多人都是一知半解,存在很多误区。在笔者看来,要想真正了解这一启动过程必须要首先了解存储器的区别与联系,参考文章:各种主流半导体存储器的区别与联系。还需要了解程序是如何编译链接和执行的。
本文将以s3c2440为例详细讲述 arm 芯片的启动过程。s3c2440支持两种启动模式:NAND FLASH 启动和非 NAND FLASH 启动(一般是NOR FLASH 启动,并且可以配置数据宽度),通过 OM1、OM0 两个管脚来控制。

NAND FLASH启动过程
当 OM1、OM0 两个管脚都为低电平时,CPU 就被配置成了 NAND FLASH 启动。此时 CPU 内部的 4KB 的 SRAM 就会被映射到 nGCS0 的空间(起始地址为 0x00000000),上电时 CPU 会自动将 NAND FLASH 中前 4KB 的数据拷贝到该片内 SRAM。然后 CPU 从内部 SRAM 的 0x00000000 地址开始执行程序,对系统进行相应的初始化,为后续 4Kb 以外的程序执行做准备。
也就是说,CPU 启动过程之时能够执行的程序最多只能占用 4Kb 大小的空间。如果需要执行更多程序,则需要在 4Kb 的程序里完成对 DRAM 的初始化(DRAM 在使用前必须初始化),配置好栈空间,并将需要执行的程序拷贝到 DRAM 中,然后跳转到 DRAM 中继续执行。
启动过程之所以要将 NAND FLASH 中的代码先拷贝到内部 SRAM 再执行,是因为 NAND FLASH 需要通过 NAND FLASH 控制器来进行访问,不能通过 CPU 的总线直接访问,所以不能够执行程序。

NOR FLASH启动过程
当系统配置为此方式启动时,CPU 内部 SRAM 则不再被映射到地址空间中,此时被映射到 nGCS0(起始地址为 0x00000000)地址空间的应该是外部的 NOR FLASH(存放启动代码的存储器)。系统上电或者复位时,CPU 直接从 0x00000000 地址(也就是 NOR FLASH 的起始地址)开始执行代码。相比 NAND FLASH 启动,NOR FLASH 的启动代码可以达到 128Mb 之大(s3c2440)。
之所以可以在 NOR FLASH 上直接执行代码,是因为 NOR FLASH 具有类似 RAM 的访问接口,可以通过 CPU 总线直接进行随机读取,但不支持随机写操作。因此,这些启动代码里是不可有 C 语言的,应为程序里必然会有变量(需要写),需要栈空间调用函数(同样需要写),而汇编程序则是可以避免对内存空间的写操作的。
那么是不是说,如果是 NOR FLASH 启动就不能有 C 程序了呢?当然不是的,不要忘了还有 DRAM 的存在。当 NOR FLASH 启动过程完成了对 DRAM 的初始化,栈空间的配置之后就可去调用 C 语言的程序了。

这就是 arm 芯片的启动过程了,其实在启动过程中的最开始的那些启动代码里还有很多地方值得细细斟酌的,也会有很多疑问,这个时候就应该去了解程序是怎么编译链接的、又是如何执行的。
上一篇:友善之臂Micro2440简介
史海拾趣
|
PIC系列单片机的源程序是指PIC的助记符指令编写的程序(汇编语言程序)。这里将对PIC源程序的格式要求和其源程序的建立或书写作简要的介绍。 一般来说对PIC单片机的源程序格式并没有要求统一的编写形式,用户可以根据习惯来编写,当然编写时应遵守 ...… 查看全部问答> |
|
真正是调试才能发现设计中的问题。太哦是工程的第一件就是先调节电源电路。在电原的调试过程中,我发现 LM317 输出总是受到输入的影响。可能就是因为调节端子的电流在输出端产生的电压太大了,这个原因可能和我采用比较的大电位器来作为调节电阻有 ...… 查看全部问答> |
|
我在tornado2.2下写了如下一段C程序: #include #include #include int main(void) { Tcl_Interp *pTclInterp = Tcl_CreateInterp(); if(!pTclInterp) ...… 查看全部问答> |
|
我的CAMERA图象在LCD上怎么只能显示半屏?要不上半屏,要不下半屏。老是全屏显示不了,初始化参数我都是按全屏来设置的。 我的CAMERA图象在LCD上怎么只能显示半屏?要不上半屏,要不下半屏。老是全屏显示不了,初始化参数我都是按全屏来设置的。… 查看全部问答> |
|
现在我手头里有一个12864的液晶 ,可是是16脚的,一般不都是20或18脚的吗。这个背面写着12864-8,实在不知道是什么型号用的什么驱动器。大虾们帮帮忙吧。在此跪谢了。… 查看全部问答> |
|
近段时间有关学习MSP430的知识,在论坛是刮起一了一阵大风。我呢,第一次在这里正式接触了MSP430,觉得不错,果断学习,果断下单,到手后,问题来了;所以在这里开一个帖子向大虾门讨教,比较低级,希望大家不要拍砖,给予我一点意见; &nbs ...… 查看全部问答> |




