文章目录

  • 前言
  • 非易失性存储器
    • ROM
    • FLASH
      • NOR Flash
      • 公共闪存接口(CFI)
      • NAND Flash
    • IDE
  • 掉电丢失数据存储器
    • 静态RAM(SRAM)
    • 动态RAM(DRAM)
    • 特定RAM
      • DPRAM:双端口RAM
      • CAM:内容寻址RAM
      • FIFO:先进先出队列
  • 存储器分类总图

前言

存储器主要可分类为只读存储器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光/磁盘介质存储器
也可按掉电后是否消失,分为掉电丢失数据存储器和非易失性存储器
下面我们先是否丢失数据,再针对其特性进行分析。

非易失性存储器

就是说即使我们的系统失去了通电以后,我们在上面的存储信息也不会消失。依旧存在。

ROM

ROM还可以细分为不可编程ROM、可编程ROM(PROM)、可擦除可编程ROM(EPROM)和电可擦除可编程ROM(EEPROM),EEPROM完全可以用软件来擦写,已经是非常方便的了。

FLASH

NOR(或非)和NAND(与非)是市场上两种主要的闪存技术。

NOR Flash

NOR Flash和CPU的接口属于典型的类SRAM接口,不需要增加额外的控制电路。如下

NOR Flash的特点是可芯片内执行(XIP),程序可以直接在NOR内运行。而NAND Flash和CPU的接口必须由相应的控制电路进行转换,当然也可以通过地址线或GPIO产生NAND Flash接口的信号。NAND Flash以块方式进行访问,不支持芯片内执行。

公共闪存接口(CFI)

是一个从NOR Flash器件中读取数据的公开、标准接口。它可以使系统软件查询已安装的Flash器件的各种参数,包括器件阵列结构,电气和时间参数以及器件支持的功能等。如果芯片不支持CFI,就需要使用JEDEC(电子电器设备联合会)了。JEDEC规范的NOR则无法直接通过命令来读取容量等信息,需要读出制造商ID和设备ID,以确定Flash大小。

NAND Flash

NAND Flash的接口主要包含如下信号。

  • I/O总线:地址、指令和数据通过这组总线传输,一般为8位或16位(就是8根或16根)
  • 芯片启动(Chip Enable:CE#):如果没有检测到CE信号,NAND器件就保持待机模式,不对信号任何控制信号做出响应。
  • 写使能(WE#):WE#负责将数据、地址或指令写入NAND之中。
  • 读使能(RE#):RE# 允许数据输出。
  • 指令锁存使能(CLE):当CLE为高电平时,在WE#信号的上升沿,指令将被锁存到NAND指令寄存器中。
  • 地址锁存使能(ALE):当ALE为高电平时,在WE#信号的上升沿,地址将被锁存到NAND地址寄存器中。
  • 就绪/忙(R/B#):如果NAND器件忙,R/B#信号将被变为低电平。该信号是漏极开路,需要采用上拉电阻。
    如下

NAND Flash较NOR Flash容量大,可擦写次数多,价格低,速度快。

注意:Flash特性,只能写0,不能写1。擦除就是把所有位全部写1。同时在读写过程中偶然会产生1位或几位数据错误,即位反转,NAND Flash发生的概率要比NOR Flash大很多。位反转不可避免,因此使用NAND Flash的同时,应采用错误勘探/错误纠正(EDC/ECC)算法。另外,Flash还存在一个负载均衡的特性,不能老是在同一块位置进行擦除和写的动作,这样容易坏块

IDE

IDE接口可连接硬盘控制器或光驱,IDE接口的信号与SRAM类似。
很多SoC集成了一个eFuse电编程熔丝作为OTP(一次性可编程)存储器。eFuse可以通过计算机对芯片内部的参数和功能进行配置,这一般是在芯片出厂的时候已经设置好了。

掉电丢失数据存储器

和上面相反,就是失去电源以后,存放在这种类型存储器的数据信息将会被删除,消失。

静态RAM(SRAM)

静态RAM只要供电,就会保持一个值,没有刷新周期。每个SRAM存储单元由6个晶体管组成。
通常所说的SDRAM(同步动态随机存取存储器)、DDR SDRAM(双倍同步速率动态存取存储器)皆属于DRAM的范畴,采用CPU外存控制器同步的时钟工作(注意,不是与CPU的工作频率一致)。DDR SDRAM就是利用了时钟脉冲的上升沿和下降沿发送数据,所以是双倍速率。

动态RAM(DRAM)

DRAM以电荷形式进行存储,数据存储在电容器中。由于电容器会因漏电而出现电荷丢失,所以DRAM器件需要定期刷新。存储单元由1个晶体管和1个电容器组成。

特定RAM

DPRAM:双端口RAM

DPRAM的特点是通过两个端口同时访问,具有两套完全独立的数据总线、地址总线和读写控制线,通常用于两个处理器之间交互数据。如下图

当一端被写入数据后,另一端可以通过轮询或中断获知,并读取其写入的数据。由于双CPU同时访问DPRAM时仲裁逻辑电路集成在DPRAM内部,所以需要硬件工程师设计的电路原理比较简单。

DPRAM的优点就是通信速度快、实时性强、接口简单,而且两边处理器都可主动进行数据传输。除了双端口RAM以外,目前IDT等芯片厂商还推出了多端口RAM,可以提供3个以上的处理器互通数据。

CAM:内容寻址RAM

CAM是以内存进行寻址的存储器,是一种特殊的存储阵列RAM,它的主要工作机制就是同时将一个输入数据项与存储在CAM中的所有数据项自动进行比较,判别该输入数据项与CAM中存储的数据项是否匹配,并输出该数据项对应的匹配信息。
如下图

输入的是所要查询的数据,输出的是数据地址和匹配标志。若匹配(即搜寻到数据),则输出数据地址。CAM用于数据检索的优势是软件无法比拟的,它可以极大地提高系统性能。

FIFO:先进先出队列

FIFO存储器地特点就是先进先出,进出有序,FIFO多用于数据缓冲。FIFO和DPRAM类似,具有两个访问端口,但是FIFO两边地端口并不对等,某一时刻只能设置为一边作为输入,一边作为输出。

如果FIFO区域共有n个字节,我们只能通过循环n次读取同一个地址才能将该片区域读出,不能指定偏移地址。对于有n个数据地FIFO,当循环读取m次后,下次读取会自动读取到m+1个数据,这是由FIFO本身的特性决定的。

存储器分类总图

Linux驱动开发(硬件基础知识)——存储器相关推荐

  1. NT内核和驱动开发的基础知识-笔记

    这是我在学习NT内核和驱动开发的基础知识时记录的一些笔记,不是连续的教程,欢迎指正错误的地方 ----------------------------------------------------- ...

  2. Linux设备驱动开发详解【二】_设备驱动相关硬件基础知识

    本文简介 本文讲解底层驱动工程师必备的硬件基础,给出了嵌入式系统硬件原理及分析方法的全景视图.         2.1 节讲解微控制器.微处理器.数字信号处理器以及应用于特定领域的处理器各自的特点. ...

  3. linux系统怎样写单片机程序,单片机知识是Linux驱动开发的基础之一以及如何学单片机...

    这是arm裸机1期加强版第1课第2.3节课程的wiki文字版. 为什么没前途也要学习单片机? 因为它是个很好的入口. 学习单片机可以让我们抛开复杂的软件结构,先掌握硬件操作,如:看原理图.芯片手册.写 ...

  4. Linux驱动设计——硬件基础

    Linux 驱动设计之硬件基础 0.开篇说明 本片内容主要来源于宋宝华老师<Linux设备驱动开发> 1.处理器 目前主流的通用处理器(GPP)多采用SoC(片上系统)的芯片设计方法,集成 ...

  5. WIFI驱动开发——WIFI基础知识汇总

    文章目录 1. Wi-Fi起源 2. Wi-Fi定义 3. WLAN 4. 802.11协议标准 5. Wi-Fi所采用的技术 6. Wi-Fi相关术语 7. 参考文章 1. Wi-Fi起源 现在我们 ...

  6. Linux驱动开发工程师需要掌握哪些技能?

    一.前言 Linux驱动开发是一项高度技术性的工作,需要深厚的编程技能和对计算机硬件的深入理解.随着物联网.人工智能等领域的快速发展,Linux驱动开发工程师的需求日益增加.在这篇文章中,我将为您介绍 ...

  7. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之Pinctrl子系统和GPIO子系统的使用

    文章目录 前言 1.Pinctrl子系统 1.1.为什么有Pinctrl子系统 1.2.重要的概念 1.3.代码中怎么引用pinctrl 2.GPIO子系统 2.1.为什么有GPIO子系统 2.2.在 ...

  8. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之设备树模型

    文章目录 前言 1.设备树的作用 2.设备树的语法 2.1.设备树的逻辑图和dts文件.dtb文件 2.1.1.1Devicetree格式 1DTS文件的格式 node的格式 properties的格 ...

  9. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之驱动设计的思想:面向对象/分层/分离

    文章目录 前言 1.分离设计 驱动程序分析---程序分层 通用驱动程序---面向对象 个性化驱动程序---分离 APP 程序分析 前言 韦东山嵌入式Linux驱动开发基础知识学习笔记 文章中大多内容来 ...

  10. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED驱动框架--面向对象、分层设计思想

    文章目录 前言 1.LED驱动程序框架 1.1.对于LED驱动,我们想要什么样的接口? 1.2.LED驱动要怎么写,才能支持多个板子?分层写 1.3.程序分析 驱动程序 应用程序 Makefile 1 ...

最新文章

  1. SQL数据库恢复后出现对象名无效(SQL Server备份还原时造成孤立用户的解决方案
  2. 数据结构二:排序(冒泡排序和选择排序)
  3. MySql,Sql Server分区技术浅析
  4. 排查生产问题linux命令,排查问题所用到的一些Linux命令实践(不定期更新。。)...
  5. “未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决方案
  6. python3 面向对象编程 下载_Python3(7) Python 面向对象编程
  7. python给定dna等分成两个序列_分析DNA序列中的串联重复序列
  8. 第五章 卷积神经网络(CNN)
  9. springboot异步任务
  10. 3Dmax转的fbx模型导入unity赋材质不能改变颜色一直是黑色
  11. 【考研数学】函数、极限、连续
  12. Layui select 的动态添加
  13. js之dialogArguments
  14. 应用程序无法正常启动0xc0150002+vs2005配置opencv2.2.0
  15. 缩写月份单词python_月份的英文单词、缩写及由来
  16. 大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:6.工厂模式在Spring框架和JDK源码中的应用
  17. Python办公自动化之PPT幻灯片自动化:使用Python制作PPT 操作PPT
  18. 网易2018实习生招聘笔试题
  19. 音频/视频标签的使用
  20. Echarts水滴图

热门文章

  1. 奥飞娱乐疯狂扩张之痛:影视、游戏掣肘动漫第一股
  2. golang后台任务库
  3. 计算机视觉知识结构图
  4. 岭回归(Ridge Regression)
  5. Data Race Free 的前世今生
  6. GeoTools Polygon smooth方法
  7. 读经灵修:利未记1-5章
  8. HDD和SSD的比较
  9. html中购物车小球飞入的效果,vue项目中css3实现加入购物车小球抛物线飞入动画效果...
  10. c 水仙花数(linux中寻找水仙花数)