在嵌入式硬件系统中,经常会用到程序存储器,顾名思义,程序存储器是用来存储程序的芯片,较早的程序存储器由ROM,之后又EPROM、EEPROM,到现在常用的Flash。我们知道ROM芯片只能是出厂前有制造商来写入程序,之后就不能再作修改,由于这个缺点,被上面提到的其他存储方式替代。但是,在现在的嵌入式系统中,经常还会碰到ROM、EEPROM,为什么呢?现在的ROM用来做什么呢?回答是用来存放,启动代码 由于处理器上电后,所有的寄存器都会复位,包括CPU的程序指针,所以程序会从程序指针的位置(arm是从0地址处,X86从FFFF0地址处)开始执行,从这个地址处开始执行的就是ROM芯片中的启动代码,启动代码主要做一下几方面的事情:开机自检、初始化寄存器、初始化内存,然后根据cpu引脚的电平(arm为OM0、OM1)判断是进入下载模式还是测试模式或是其他模式,并执行相应的启动代码。由于这部分比较复杂,所以,生产商会把这部分程序固化到内部,不用修改。当然,对于PC来说启动代码就是BIOS了,而且现在也用flash做了
EEPROM主要用来存储用户的数据,具有掉电数据不丢失的优点,主要存储程序运行过程中产生的数据。一般容量不是很大。
容量最大的算是falsh了,由于flash只能先进行擦除,然后进行写入,故而主要用于存储用户的程序和一些常量数据。flash主要分为两种Nor Flash和Nand Flash,这两种flash的结构存在较大的差异,最先出现的Nor flash,采用并口输入输出数据,速度快,CPU可以直接从Nor Flash中取指令执行专门术语叫XIP (eXecute In Place),但是价格昂贵,同时,由于要占用地址线,容量不能很大。基于以上的缺点,三星公司开发了Nand Flash结构,这种结构采用串行数据存储,而且使用块存储,故而容量可以很高。但是他的缺点是程序不能直接在Nand Flash中运行,只能拷贝到Nor Flash或者是RAM中运行,这样程序启动的过程中就存在一个程序拷贝的过程,这个过程主要在Nor Flash中运行。所以,一般Nor Flash用作存放BootLoader(这部分内容也类似于PC中的BIOS和MBR),主要是在单片机上电后,执行将Nand Flash中的程序拷贝到RAM中,然后将CPU控制权交给RAM中的程序(用户自己编写的函数或者是系统内核)。所以,一般的嵌入式系统中都带有容量较小的Nor Flash和大容量的Nand Flash。Nor Flash主要用来存放引导程序,而Nand Flash存放用户真正的程序。如果使用操作系统,一般内核比较大,系统启动过程比较慢,大约5-10秒不等,这个过程中主要执行开机自检和硬件初始化以及程序拷贝。 |