嵌入式设计经验分享:存储器以及BootLoader的一些
在大学的时候很少关心单片机内部存储器的结构及应用,只是大概的知道RAM和ROM的区别,甚至只是知道程序下载到ROM中就能运行了。其他的如何工作程序如何启动的就不了了知了。因此在接触嵌入式的时候就会出现很多盲区。在此本人将工作三个多月以来接触到的一些关于嵌入式新的理解分享给大家,有什么错误的地方在所难免,希望大家给予指正。
RAM和ROM在单片机中的相关应用
ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。
RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另一种称为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。
DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等。所谓内存就是用来存放当前正在使用的(即执行中)的数据和程序,我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的“动态”,指的是当我们将数据写入DRAM后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。
ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。另外一种 EEPROM是通过电子擦出,价格很高,写入时间很长,写入很慢。
简单来说,最原始的单片机比如at89c51,内部集成了 ROM,RAM。ROM用来存储编好的程序、常数、表格等,当单片机掉电ROM中的数据不会丢失,因此单片机掉电再上电还会继续运行;RAM可以存放用户的临时变量、还有单片机内部的特殊寄存器等,单片机掉电后数据会丢失,当在上电后程序执行,重新初始化寄存器和变量的值。
在这里简单说一下MCS-51的程序执行流程,MCS-51单片机的存储器组织结构,采用典型的哈佛结构,即程序存储器和数据存储器完全独立,拥有各自的寻址系统,包括片内数据存储器与片外数据存储器都拥有自己独立的寻址系统。所以,在地址空间上允许重叠。如:程序存储器的地址空间中有0000H这个单元,片内数据存储器也有0000H这个单元,片外数据存储器中还有0000H这个单元。
89S51片内有4kB的程序存储单元,其地址为0000H— 0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。在这里会跳转到main函数,但是据说在跳转到 main函数之前,还会做一些判断的处理,具体没有研究过。
Flash在嵌入式系统中的应用
现在很多的芯片内部都是用flash,或者是外挂Flash来存储程序。目前的Flash主要有两种NOR Flash和NADN Flash。
NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。
NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。
一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息,而大容量的用NAND FLASH。NOR Flash可以拥有 SDRAM的接口,拥有更多的地址线来方便读取内存中的每一个字节;NAND flash AND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。
Serial Flash 拥有spi的接口可以页读、任意地址读。并且它可以有四线SPI,双线SPI的DDR接口。它可以利用spi的外部地址总线的方式来直接在外部flash中运行程序,不过运行速度是个有待考虑的问题。
嵌入式Boot Loader
在嵌入式中一些产品中,采用的启动方式中,根据不同的芯片结构而不同。拿计算机的启动来说,计算机引导加载程序由BIOS和位于硬盘MBR中的OS Boot Loader组成,其实BIOS就是一段固化程序,现在很多嵌入式的芯片内
嵌入式 存储器 BootLoader 相关文章:
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)
- 嵌入式Linux系统中MMC卡驱动管理技术研究(06-10)
- FPGA的DSP性能揭秘(06-16)