文章目录

  • 概述
  • RAM
    • 基本概念
    • DDR
    • SRAM
  • ROM
    • 名字问题
    • ROM分类
    • NorFlash
    • NandFlash
    • EMMC
  • RAM和ROM实践
    • STM32F407的NORFlash
  • 堆内存
    • 堆内存分配
  • 内存/外存
    • 固态硬盘
  • FIFO存储器

概述

要搞嵌入式Linux开发环境移植… 从内核移植篇中讲到的"将内核映像和设备树下载到内存中",有点蒙,竟然还没有正儿八经的搞明白ROM和RAM。以上述问题为契机,开始了一天的关于嵌入式板卡存储体系的学习…

RAM

基本概念

随机存取存储器(英语:Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。RAM在计算机和数字系统中用来暂时存储程序、数据和中间结果。所谓“随机存取”,指的是当存储器中的数据被读取或写入时,所需要的时间与这段信息所在的位置或所写入的位置无关。相对的,读取或写入顺序访问(Sequential Access)存储设备中的信息时,其所需要的时间与位置就会有关系。
RAM由存储矩阵、地址译码器、读/写控制器、输入/输出、片选控制等几部分组成。存储矩阵是RAM的核心部分,是一个寄存器矩阵,用来存储信息。

DDR

在阅读FS44412开发板清单时,看到其内存配置为1GB双通道 DDR3,前边标注的是RAM,有点low,这就是我的认识过程。DDR内存全称是DDR SDRAM(Double Data Rate SDRAM,双倍速率SDRAM),人们习惯称为DDR,其中,SDRAM 是Synchronous Dynamic Random Access Memory的缩写,即同步动态随机存取存储器,DDR内存是在SDRAM内存基础上发展而来的。至此,我才将PC的内存条设备和嵌入式里常见的RAM联系了起来…

SRAM

ROM

名字问题

只读存储器(Read-Only Memory,ROM),为什么叫做只读但是也可以擦除编程,因为这种说法来自于早期计算机中相关叫法,当时的技术还没现在这么先进(当时一次写入无法擦除,无法修改),所以叫做只读,最早见于电脑BIOS中。随着技术的发展,有许多的概念已经不完全是它的字面意思啦…

ROM分类

在嵌入式中讲到ROM,“程序存储器是一种只读存储器ROM”,用它来固化单片机的应用程序和一些表格参数,并讲到ROM存储器有,MaskROM型、EPROM型、OTPROM型、FlashROM型。
PROM是可编程只读存储器(Programmable read-ONly memory)的缩写,是一种电脑存储记忆晶片,它允许使用称为PROM编程器的硬件将数据写入设备中,是只能被使用者修改一次的只读存储器(ROM)。
EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。不像EPROM芯片,EEPROM不需从计算机中取出即可修改。在一个EEPROM中,当计算机在使用的时候可频繁地反复编程,因此EEPROM的寿命是一个很重要的设计考虑参数。通常讲,EEPROM在读写次数、操作单元、功耗等方面要优于Flash,但是其读写速率、容量大小等远不如Flash。
这个东西的作用于铁电差不很多,主要用来存储那些较小的配置?待查证!

Flash存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还可以快速读取数据(NVRAM的优势),使数据不会因为断电而丢失。Flash Memory,是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器。与硬盘相比,闪存也有更佳的动态抗震性。闪存的写入速度往往明显慢于读取速度。

NorFlash

NOR Flash需要很长的时间进行抹写,但是它提供完整的寻址与数据总线,并允许随机存取存储器上的任何区域,这使的它非常适合取代老式的ROM芯片。当时ROM芯片主要用来存储几乎不需更新的代码,例如电脑的BIOS或机上盒(Set-top Box)的固件。NOR Flash可以忍受一万到一百万次抹写循环,它同时也是早期的可移除式快闪存储媒体的基础。
NorFlash对比NandFlash 主要参考NandFlah百科,NAND Flash和NOR Flash区别,主要对比如下:

  1. 写入bai/擦除操作的时间不同
    擦除NAND器件以8~32KB的块进行,执行同一写入/擦除的操作时间为4ms
    擦除NOR器件是以64~128KB的块进行,执行同一个写入/擦除操作的时间为5s
  2. 接口不同
    nand flash使用较为复杂的I/O口来串行地存取数据,并且各个产品或厂商的方法可能各不相同。
    nor flash为SRAM接口,拥有足够的地址引脚用于寻址。
  3. 容量成本不同
    NAND flash的单元尺寸大约为NOR器件的一半,由于生产过程更为简单,因此价格较低。
    NOR flash单元尺寸较大,生产过程也较为复杂,因此价格较高。
  4. 耐用性不同
    NAND闪存中每个块的最大擦写次数是一百万次。
    NOR闪存中每个块的最大擦写次数是十万次。

NandFlash

NAND Flash式东芝在1989年的国际固态电路研讨会(ISSCC)上发表的, 要在NandFlash上面读写数据,要外部加主控和电路设计。NAND Flash具有较快的抹写时间, 而且每个存储单元的面积也较小,这让NAND Flash相较于NOR Flash具有较高的存储密度与较低的每比特成本。同时它的可抹除次数也高出NOR Flash十倍。然而NAND Flash 的I/O接口并没有随机存取外部地址总线,它必须以区块性的方式进行读取,NAND Flash典型的区块大小是数百至数千比特。
因为多数微处理器与微控制器要求字节等级的随机存取,所以NAND Flash不适合取代那些用以装载程序的ROM。从这样的角度看来,NAND Flash比较像光盘、硬盘这类的次级存储设备。NAND Flash非常适合用于储存卡之类的大量存储设备。第一款创建在NAND Flash基础上的可移除式存储媒体是SmartMedia,此后许多存储媒体也跟着采用NAND Flash,包括MultiMediaCard、Secure Digital、Memory Stick与xD卡。

EMMC

eMMC (Embedded Multi Media Card) 为MMC协会所订立的,eMMC 相当于 NandFlash+主控IC ,对外的接口协议与SD、TF卡一样,主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。这些特点对于希望通过缩小光刻尺寸和降低成本的NAND供应商来说,同样的重要。
eMMC由一个嵌入式存储解决方案组成,带有MMC(多媒体卡)接口、快闪存储器设备(Nand Flash)及主控制器,所有都在一个小型的BGA 封装。接口速度高达每秒52MBytes,eMMC具有快速、可升级的性能。

RAM和ROM实践

今天学习STM32F407开发板,了解到它的存储系统有4部分:192K的片内SRAM、1M的片内Flash、1M的片外SRAM(XM8A51216)、16M的片外Flah(W25Q128),由此重新来理一下上述两种Flash的区别。

STM32F407的NORFlash

结构图,及其使用方法。
使用方法参见库函数板开发指南,第39章。

堆内存

堆内存,是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。Here,以此为契机,看看上述提到的区域都真实的存在哪里?

堆内存分配

在正点原子的FreeRTOS开发手册中,有提到堆内存的分配方法。默认情况下,FreeRTOS的堆内存是有编译器来分配的,将宏configAPPLICATION_ALLOCATED_HEEP定义为1的话,堆内存可以由用户自行设置,堆内存在heap_1.c/heap_2.c/heap_3.c/heap_4.c/heap_5.c中有定义,具体的在哪个文件取决于用户选择哪种内存管理方式。

//in heap_4.c /* Allocate the memory for the heap. */
#if( configAPPLICATION_ALLOCATED_HEAP == 1 )/* The application writer has already defined the array used for the RTOSheap - probably so it can be placed in a special segment or address. */extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#elsestatic uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#endif/* configAPPLICATION_ALLOCATED_HEAP */

内存/外存

脑海里泛出来的第一问题时,既然RAM对应了PC的内存,那么是不是ROM对应的是外存或者说是硬盘? 心里犯嘀咕,感觉像又感觉不像!有的人想当然就把他们对应上来,从一些嵌入式书籍的描述中,ROM通常是被描述为内存的…
外储存器是指除计算机内存及CPU缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的外存储器有硬盘、软盘、光盘、U盘等。从冯.诺依曼的存储程序工作原理及计算机的组成来说,计算机分为运算器、控制器、存储器和输入/输出设备,这里的存储器就是指内存,而硬盘属于输入/输出设备。

? 从制造材料上,ROM和硬盘是完全不同的,从使用功能上来说ROM和硬盘是相似的,如存储操作系统、应用程序、数据等,但是硬盘更突出存储暂时不用的数据的意思,ROM没有这层意思,嵌入式开发中也不会有这样的需求,ROM更加突出存储应用程序的意思。在嵌入式领域,ROM被描述为内存。

固态硬盘

PC上常常谈及到的固态硬盘,在本质上是Flash吗?
https://zhidao.baidu.com/question/164676437.html
SSD固态硬盘是固态存储,属于Flash memory,使用寿命长,不容易损du坏,抗震性强。

FIFO存储器

作为一种新型大规模集成电路,FIFO( First Input First Output)芯片以其灵活、方便、高效的特性,逐渐在高速数据采集、高速数据处理、高速数据传输以及多机处理系统中得到越来越广泛的应用。FIFO存储器是系统的缓冲环节,IFO存储器分为写入专用区和读取专用区。读操作与写操作可以异步进行,写入区上写入的数据按照写入的顺序从读取端的区中读出,类似于吸收写入端与读出端速度差的一种缓冲器。计算机的串口,一般也都具有FIFO缓冲器(不是单一的FIFO存储器,而是嵌入在设备内部)。
FIFO可以是一块具体的硬件存储设备,也可是程序在内存中开辟的一段内存区域,而buffer往往就是一段缓冲的数据区域。FIFO强调先进先出,它有时可帮助系统解决始终域不同步或数据局宽度不一样的情况。环形缓冲区ring buffer在外在表现上有些类似fifo存储器…
FIFO 是“First-In First-Out”的缩写,意为“先进先出”,是一种常见的队列操作。 Stellaris 系列ARM 的UART 模块包含有2 个16 字节的FIFO:一个用于发送,另一个用于接收。可以将两个FIFO 分别配置为以不同深度触发中断。(来自UART-FIFO操作)

嵌入式-存储器类型详解相关推荐

  1. 《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——1.2 S5PV210处理器

    本节书摘来自异步社区<嵌入式Linux软硬件开发详解--基于S5PV210处理器>一书中的第1章,第1.2节,作者 刘龙,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  2. 单片机c语言中枚举,嵌入式开发-枚举详解---朱有鹏

    嵌入式开发-枚举详解 朱有鹏 1.枚举m 1.1.枚举是用来干嘛的? #include // 这个枚举用来表示函数返回值,ERROR表示错,RIGHT表示对 enum return_value { E ...

  3. java原生类型没有封装_Java基本数据类型与封装类型详解(int和Integer区别)

    Java基本数据类型与封装类型详解(int和Integer区别) 发布于 2020-4-19| 复制链接 摘记: int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Int ...

  4. python变量类型-Python 变量类型详解

    变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些变量可以存储整 ...

  5. mysql数据库的字符串表示什么意思_MySQL数据库的字符串类型详解(01)

    Mysql的数据类型主要分为三类:数字类型.字符串(字符)类型.日期和时间类型,由于时间紧迫,根据学习的需要 数字类型暂不做详解,等待有时间了在修改此文档,此文主要介绍mysql 数据类型中的字符串类 ...

  6. 并发编程-04线程安全性之原子性Atomic包的4种类型详解

    文章目录 线程安全性文章索引 脑图 概述 原子更新基本类型 Demo AtomicBoolean 场景举例 原子更新数组 Demo 原子更新引用类型 Demo 原子更新字段类型 使用注意事项: Dem ...

  7. python内置序列类型_Python序列内置类型之元组类型详解

    Python序列内置类型之元组类型详解 1.元祖的概念 Python中的元组与列表类似,都是一个序列,不同的是元组的元素不能修改而已. 2.元组的创建 元组使用小括号,列表使用方括号. tup = ( ...

  8. 《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.2 DDR2 SDRAM芯片

    本节书摘来自异步社区<嵌入式Linux软硬件开发详解--基于S5PV210处理器>一书中的第2章,第2.2节,作者 刘龙,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  9. java 封装表单数据类型_Java基本数据类型与封装类型详解(int和Integer区别)

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).in ...

最新文章

  1. 如何制作在线参考手册
  2. 两千年是不是闰年 输出错误_干货!AMOS常见的10种错误及解决办法!
  3. self studying room list available at campus
  4. hdu2896 病毒侵袭 ac自动机
  5. php-fpm初始化失败,FPM的初始化 - [ PHP7的内核剖析 ] - 在线原生手册 - php中文网
  6. 协同工作php,PHPOA:灵活、高效、协同,让企业高效运转
  7. JS、javascript计算两个时间差
  8. 《C++ Primer》第五版课后习题解答_第二章(1)(01-08)
  9. vue升级之路(四)-- Vuex
  10. 第二届字节跳动夏令营启动全球报名,图灵奖得主授课
  11. 计算机的发展经历了选择题,计算机发展历程的相关选择题.doc
  12. Java学习之路 之 容易混淆篇
  13. php 数组任意位置插入值
  14. java进销存系统--采购入库
  15. python高级练习题:转换所有的案件!【难度:3级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
  16. iOS12.3正式版不能更新是怎么回事(解决办法)
  17. java 数组是连续存储吗_数组在Java中储存在()中_学小易找答案
  18. redis的消息队列(面试题)
  19. 涨停股该怎么分析啊,买涨停股有什么样的方法
  20. 基于DQN与gym的小车爬坡训练

热门文章

  1. 跟着鬼哥学so改动,二,进行篇
  2. Navicat Premium 16安装教程
  3. 使用反渗透原理纯水制作,TDS(溶解性总固体)水质检测数据记录
  4. 机器学习工具 sklearn与tensorflow优劣势
  5. 易达项目第一次冲刺周期第四天
  6. openjfx(javaFX)完整学习指南(教程)
  7. 基于C语言的传输协议封包、发包实现
  8. C# --- 坦克大战开发 --- 绘制游戏界面
  9. Java 读取 JSON 文件转成 Map 对象
  10. OpenCV快速寻找图像差异