RAM、ROM FALSH 与EFLASH
存储器:在单片机中,内存即存储器。存储器是用来存储程序和数据的部件,对于单片机来说,有了存储器,才有记忆功能,才能保证正常工作。
RAM,Random Access Memory
又称为随机存取存储器,是与CPU直接交换数据的内部存储器;存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。
RAM最大的特点是存储读取的速度非常快,比ROM高出很多。CPU(中央处理器)在执行程序时需要先将指令和数据调入到RAM中,从而保证计算速度。
RAM分类:
1. 静态RAM(static RAM/SRAM)。SRAM速度非常快,不需要刷新电路即能保存数据,是目前最快的存储设备。
2. 动态RAM(Dynamic RAM/DRAM)。DRAM保留数据的时间很短,需要内存刷新电路,每隔一段时间,刷新充电一次,否则数据会消失。
ROM,Read Only Memory
是一种半导体内存,其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,资料并且不会因为电源关闭而消失。
只能读出事先所存数据的固态半导体存储器。英文简称ROM。ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定 ,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据。
ROM分类:
1. PROM:可编程一次性(无法修改的ROM)
2. EPROM: 紫外线可擦除可编程的ROM
3. EEPROM: 电可擦除可编程的ROM
ROM最初不能编程,出厂什么内容就永远什么内容,不灵活。后来出现了PROM,可以自己写入一次,要是写错了,只能换一片,自认倒霉。人类文明不断进步,终于出现了可多次擦除写入的EPROM,每次擦除要把芯片拿到紫外线上照一下,想一下你往单片机上下了一个程序之后发现有个地方需要加一句话,为此你要把单片机放紫外灯下照半小时,然后才能再下一次,这么折腾一天也改不了几次。历史的车轮不断前进,伟大的EEPROM出现了,拯救了一大批程序员,终于可以随意的修改rom中的内容了
FLASH
又称闪存,快闪。它是EEPROM的一种。它结合了ROM和RAM的长处。不仅具备电子可擦除可编辑(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据。它于EEPROM的最大区别是,FLASH按扇区(block)操作,而EEPROM按照字节操作。FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因此适合用于做程序存储器。
汽车所用单片机控制器中的程序就存储在FLASH中。因为FLASH可以永久存储单片机程序,且可擦除可编辑,易于软件更新与刷写。
目前Flash主要有两种NOR Flash和NADN Flash。
NOR Flash每个N-MOS单元独立(OR的意思),可以随机读取任意单元内容,适用于程序代码并行读写存储。用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。
NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。多个N-MOS单元连接在一起(AND),可按顺序读取存储单元内容,适用于数据或文件的串行读写存储。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。
因为nor flash可以进行字节寻址,所以程序可以在nor flash中运行。嵌入式系统多用一个小容量的nor flash存储引导代码,用一个大容量的nand flash存放文件系统和内核。
一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息,而大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的'闪盘',可以在线擦除。
EFLASH
soc中的flash叫eflash,e是embedding的意思,可以理解为嵌入到芯片中的flash。
bootrom与bootloader
bootrom是什么
其实像arm32的单片机是不需要bootrom,通过拨码开关,去找到该在那种介质上启动;不同的启动模式对应的不同的启动pc地址,比如stm32:会在0x00000000处取出栈指针MSP的初始值(存储的是栈顶地址__initial_sp);会在0x00000004处取出程序指针PC的初始值(存储的是首条指令Reset_Handler的地址);如下图对应不同启动模式的不同sp,pc值,这个是由硬件决定的,上电后,cpu就会通过总线,去到对应地址去取指令,译码,并执行
1.从内部flash启动:使用jtag和swd模式下载程序,不需要用到bootloader.
2.从系统存储器启动(ISP):使用串口下载程序,由于串口不能直接将程序下载到flash,需要使用bootloader来引导程序下载至flash,再配置成1启动方式。
3.内存(SRAM)启动:一般用于程序调试
但是对于一般的arm64处理器来说,要运行大型系统,就需要bootrom来引导系统启动了:简单来说,处理器上电后,就会根据程序计数器(pc)去取第一条指令,译码,然后执行;当然这个包含第一条指令的程序,我们一般叫做bootcode;这个bootcode被放在通常叫做bootRom的地方,那么bootRom肯定得是nor flash;因为至少要满足两个条件:掉电不丢失,也就是rom属性;还有就是能直接执行(除非处理器能够在上电后:直接将代码复制到不需要初始化的sram中去执行);下面就是一幅启动过程的流程图,很简单易懂
bootloader是什么
Bootloader,称为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。
Bootloader通常固化在硬件上某个固态存储设备上,加电后自启动。
bootloader要实现的功能就是:在系统上电或者复位后,将系统的软硬件环境带到一个合适的状态,为最终调用应用程序准备好正确的环境。它包括:
- 初始化硬件设备
- 建立正确的内存空间映射
- 初始化栈
- 检测并初始化内存
- 初始化全局变量
- 加载程序,将非易失性存储器中的特定软件组拷贝到RAM中,并运行。
Bootloader的主要任务是:正确地调用内核来加载操作系统。
在基于ARM的嵌入式系统中,系统在上电或复位时通常都从地址0x0000,0000处开始执行,而在这个地址处安排的通常就是系统的Bootloader。
工作模式
大多数Bootloader都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。
从最终用户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。
1)启动加载(Bootloading)模式
启动加载模式称为“自举”(Autonomous)模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到 RAM中运行(由上图可知这个过程由bootrom完成),整个过程并没有用户的介入。
启动加载模式是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。
2)下载(Downloading)模式
在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机上下载文件。
比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被 Bootloader写到目标机上的FLASH类固态存储设备中。
bootloader介绍_把bootloader自搬运到ram中_zhaoshuzhaoshu的博客-CSDN博客
芯片的XIP与BootRom启动方式
XIP:execute in place,就地执行,即芯片内执行,指应用程序可以直接在flash闪存中取指然后译码、执行,不必再把代码读到系统RAM中,flash内执行时指Nor flash不需要初始化,可以直接在flash内执行代码,但往往只执行部分代码,比如用于初始化RAM等。所谓片内执行不是说程序在存储器内执行,CPU的基本功能是取指、译码、运行。Nor Flash能在芯片内执行,指的是CPU能够直接从Nor flash中取指令,供后面的译码器和执行器来使用。
NOR Flash和Nand Flash
Intel于1988年首先开发出NOR Flash 技术,彻底改变了原先由EPROM(Electrically Programmable Read-Only-Memory电可编程序只读存储器)和EEPROM(电可擦只读存储器Electrically Erasable Programmable Read - Only Memory)一统天下的局面。紧接着,1989年,东芝公司发表了NAND Flash 结构,强调降低每比特的成本,有更高的性能,并且像磁盘一样可以通过接口轻松升级。NOR Flash 的特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。NOR 的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响到它的性能。NAND的结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于Flash的管理和需要特殊的系统接口。通常读取NOR的速度比NAND稍快一些,而NAND的写入速度比NOR快很多。
XIP启动与BootRom启动
CPU执行代码是指执行存储在其内存中的代码指令的过程。CPU从高速指令缓存中取出指令,对其进行解码,然后执行指令指定的操作。CPU一条一条地读取指令,执行指令指定的操作,然后继续执行下一条指令,直到程序结束。那这和启动方式有啥关系?不同的启动方式,决定了高速指令缓存里面的指令从哪里来。
XIP启动
XIP启动方式:把指令直接从NorFlash拷贝到芯片的高速指令缓存;
从软件的角度来说,XIP是在外部闪存直接执行代码,就像芯片在内部flash 的地址0x0800 0000直接执行一样,称为“就地执行”。
软件技术实现
用户应用程序代码应链接到目标执行存储器地址(外部QSPI或FMC-NOR闪存)
用户应用程序代码编译的时候链接地址要改成外部闪存的地址,如STM32 H7系统给QSPI Flash在系统总线分配的地址是0x9000 0000,那么代码的地址就要改成0x9000 0000。
BootRom启动
从 ROM 引导:这是一种传统方法,其中程序指令存储在只读存储器 (ROM) 芯片中,然后复制到 RAM 中执行。这种方法需要 ROM 和 RAM,但具有只需更换 ROM 芯片即可更新固件的优点。
从SD卡启动:这种方法将固件存储在SD卡上,然后将其复制到RAM中执行。这种方法常用于需要大量固件存储的系统,具有只需更换 SD 卡即可更新固件的优点。
华邦也有SD Nand,把SD卡做成板载的形式,传输性能更好,如果MPU处理音视频性能可以得到释放;当然价格也比同容量的Nand更贵.
从NAND/NOR闪存启动:这种方法将程序指令存储在NAND或NOR闪存芯片中,并将其复制到RAM中执行。这种方法类似于从 ROM 引导,但具有能够在不更换芯片的情况下在系统内更新固件的优点。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_45519101/article/details/131853159