从 RAM、ROM、FLASH与EFLASH到BOOTROM、BOOTLOADER

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 引导,但具有能够在不更换芯片的情况下在系统内更新固件的优点。

芯片的XIP与BootRom启动方式_xip模式_庐州拎壶冲的博客-CSDN博客

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要下载OpenCV学习的运动目标(前景)检测源码,可以按照以下步骤进行。 首先,访问OpenCV的官方网站(https://opencv.org/)或GitHub的OpenCV仓库(https://github.com/opencv/opencv),找到源代码的下载选项。 在官方网站上,可以选择下载最新版本的OpenCV,或者根据特定版本的需求进行选择。在GitHub上,可以浏览仓库的不同分支和版本标签,并选择下载相应的源代码。 一旦选择了合适的源码下载选项,点击下载按钮进行下载。下载完成后,将源代码文件解压缩至本地目录。 接下来,在下载的源代码文件夹,找到与运动目标检测相关的示例代码或项目。这些示例代码通常位于“samples”或“examples”文件夹,可以根据名称或说明找到与运动目标检测相关的示例。 打开示例代码文件,使用合适的集成开发环境(IDE)或文本编辑器加载源代码。确保已正确配置编译环境和OpenCV库文件。 阅读示例代码的注释和文档,理解实现运动目标检测的算法和方法。 对于初学者,建议阅读和运行示例代码,以更好地理解和学习运动目标检测的概念和实践。根据需要,可以根据示例代码进行修改和调整,以满足特定的需求。 总之,要下载OpenCV学习的运动目标(前景)检测源码,首先选择合适的源代码下载选项,然后解压缩源代码文件夹,找到与运动目标检测相关的示例代码或项目,最后阅读和运行示例代码以学习和实践运动目标检测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值