《Linux设备驱动开发详解 A》一一2.2 存储器

2.2 存储器

存储器主要可分类为只读储存器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光/磁介质储存器。
ROM还可再细分为不可编程ROM、可编程ROM(PROM)、可擦除可编程ROM(EPROM)和电可擦除可编程ROM(E2PROM),E2PROM完全可以用软件来擦写,已经非常方便了。
NOR(或非)和NAND(与非)是市场上两种主要的Flash闪存技术。Intel于1988年首先开发出NOR Flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND Flash结构,每位的成本被大大降低。
NOR Flash和CPU的接口属于典型的类SRAM接口(如图2.5所示),不需要增加额外的控制电路。NOR Flash的特点是可芯片内执行(eXecute In Place,XIP),程序可以直接在NOR内运行。而NAND Flash和CPU的接口必须由相应的控制电路进行转换,当然也可以通过地址线或GPIO产生NAND Flash接口的信号。NAND Flash以块方式进行访问,不支持芯片内执行。

图2.5 典型的类SRAM接口
公共闪存接口(Common Flash Interface, CFI)是一个从NOR Flash器件中读取数据的公开、标准接口。它可以使系统软件查询已安装的Flash器件的各种参数,包括器件阵列结构参数、电气和时间参数以及器件支持的功能等。如果芯片不支持CFI,就需使用JEDEC(Joint Electron Device Engineering Council,电子电器设备联合会)了。JEDEC规范的NOR则无法直接通过命令来读出容量等信息,需要读出制造商ID和设备ID,以确定Flash的大小。
与NOR Flash的类SRAM接口不同,一个NAND Flash的接口主要包含如下信号。
I/O总线:地址、指令和数据通过这组总线传输,一般为8位或16位。
芯片启动(Chip Enable,CE#):如果没有检测到CE信号,NAND器件就保持待机模式,不对任何控制信号做出响应。
写使能(Write Enable,WE#):WE#负责将数据、地址或指令写入NAND之中。
读使能(Read Enable,RE#):RE#允许数据输出。
指令锁存使能(Command Latch Enable,CLE):当CLE为高电平时,在WE#信号的上升沿,指令将被锁存到NAND指令寄存器中。
地址锁存使能(Address Latch Enable,ALE):当ALE为高电平时,在WE#信号的上升沿,地址将被锁存到NAND地址寄存器中。
就绪/忙(Ready/Busy,R/B#):如果NAND器件忙,R/B#信号将变为低电平。该信号是漏极开路,需要采用上拉电阻。
NAND Flash较NOR Flash容量大,价格低;NAND Flash中每个块的最大擦写次数是100万次,而NOR的擦写次数是10万次;NAND Flash的擦除、编程速度远超过NOR Flash。
由于Flash固有的电器特性,在读写数据过程中,偶然会产生1位或几位数据错误,即位反转,NAND Flash发生位反转的概率要远大于NOR Flash。位反转无法避免,因此,使用NAND Flash的同时,应采用错误探测/错误更正(EDC/ECC)算法。
Flash的编程原理都是只能将1写为0,而不能将0写为1。因此在Flash编程之前,必须将对应的块擦除,而擦除的过程就是把所有位都写为1的过程,块内的所有字节变为0xFF。另外,Flash还存在一个负载均衡的问题,不能老是在同一块位置进行擦除和写的动作,这样容易导致坏块。
值得一提的是,目前NOR Flash可以使用SPI接口进行访问以节省引脚。相对于传统的并行NOR Flash而言,SPI NOR Flash只需要6个引脚就能够实现单I/O、双I/O和4个I/O口的接口通信,有的SPI NOR Flash还支持DDR模式,能进一步提高访问速度到80MB/s。
IDE(Integrated Drive Electronics)接口可连接硬盘控制器或光驱,IDE接口的信号与SRAM类似。人们通常也把IDE接口称为ATA(Advanced Technology Attachment)接口,不过,从技术角度而言,这并不准确。其实,ATA接口发展至今,已经经历了ATA-1(IDE)、ATA-2(Enhanced IDE/Fast ATA,EIDE)、ATA-3(FastATA-2)、Ultra ATA、Ultra ATA/33、Ultra ATA/66、Ultra ATA/100及Serial ATA(SATA)的发展过程。
很多SoC集成了一个eFuse电编程熔丝作为OTP(One-Time Programmable,一次性可编程)存储器。eFuse可以通过计算机对芯片内部的参数和功能进行配置,这一般是在芯片出厂的时候已经设置好了。
以上所述的各种ROM、Flash和磁介质存储器都属于非易失性存储器(NVM)的范畴,掉电时信息不会丢失,而RAM则与此相反。
RAM也可再分为静态RAM(SRAM)和动态RAM(DRAM)。DRAM以电荷形式进行存储,数据存储在电容器中。由于电容器会因漏电而出现电荷丢失,所以DRAM器件需要定期刷新。SRAM是静态的,只要供电它就会保持一个值,SRAM没有刷新周期。每个SRAM存储单元由6个晶体管组成,而DRAM存储单元由1个晶体管和1个电容器组成。
通常所说的SDRAM、DDR SDRAM皆属于DRAM的范畴,它们采用与CPU外存控制器同步的时钟工作(注意,不是与CPU的工作频率一致)。与SDRAM相比,DDR SDRAM同时利用了时钟脉冲的上升沿和下降沿传输数据,因此在时钟频率不变的情况下,数据传输频率加倍。此外,还存在使用RSL(Rambus Signaling Level,Rambus发信电平)技术的RDRAM(Rambus DRAM)和Direct RDRAM。
针对许多特定场合的应用,嵌入式系统中往往还使用了一些特定类型的RAM。
1.?DPRAM:双端口RAM
DPRAM的特点是可以通过两个端口同时访问,具有两套完全独立的数据总线、地址总线和读写控制线,通常用于两个处理器之间交互数据,如图2.6所示。当一端被写入数据后,另一端可以通过轮询或中断获知,并读取其写入的数据。由于双CPU同时访问DPRAM时的仲裁逻辑电路集成在DPRAM内部,所以需要硬件工程师设计的电路原理比较简单。

图2.6 双端口RAM
DPRAM的优点是通信速度快、实时性强、接口简单,而且两边处理器都可主动进行数据传输。除了双端口RAM以外,目前IDT等芯片厂商还推出了多端口RAM,可以供3个以上的处理器互通数据。
2.?CAM:内容寻址RAM
CAM是以内容进行寻址的存储器,是一种特殊的存储阵列RAM,它的主要工作机制就是同时将一个输入数据项与存储在CAM中的所有数据项自动进行比较,判别该输入数据项与CAM中存储的数据项是否相匹配,并输出该数据项对应的匹配信息。

如图2.7所示,在CAM中,输入的是所要查询的数据,输出的是数据地址和匹配标志。若匹配(即搜寻到数据),则输出数据地址。CAM用于数据检索的优势是软件无法比拟的,它可以极大地提高系统性能。
3.?FIFO:先进先出队列
FIFO存储器的特点是先进先出,进出有序,FIFO多用于数据缓冲。FIFO和DPRAM类似,具有两个访问端口,但是FIFO两边的端口并不对等,某一时刻只能设置为一边作为输入,一边作为输出。
如果FIFO的区域共有n个字节,我们只能通过循环n次读取同一个地址才能将该片区域读出,不能指定偏移地址。对于有n个数据的FIFO,当循环读取m次之后,下一次读时会自动读取到第m + 1个数据,这是由FIFO本身的特性决定的。
总结2.2节的内容,可得出如图2.8所示的存储器分类。

图2.8 存储器分类

时间: 2024-10-01 19:55:54

《Linux设备驱动开发详解 A》一一2.2 存储器的相关文章

《Linux 设备驱动开发详解(第2版)》——1.6 设备驱动Hello World:LED驱动

1.6 设备驱动Hello World:LED驱动 Linux 设备驱动开发详解(第2版)1.6.1 无操作系统时的LED驱动 在嵌入式系统的设计中,LED一般直接由CPU的GPIO(通用可编程I/O口)控制.GPIO一般由两组寄存器控制,即一组控制寄存器和一组数据寄存器.控制寄存器可设置GPIO口的工作方式为输入或是输出.当引脚被设置为输出时,向数据寄存器的对应位写入1和0会分别在引脚上产生高电平和低电平:当引脚设置为输入时,读取数据寄存器的对应位可获得引脚上的电平为高或低. 在本例子中,我们

《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动

1.4 Linux设备驱动 Linux 设备驱动开发详解(第2版)1.4.1 设备的分类及特点 计算机系统的硬件主要由CPU.存储器和外设组成.随着IC制作工艺的发展,目前,芯片的集成度越来越高,往往在CPU内部就集成了存储器和外设适配器.譬如,相当多的ARM.PowerPC.MIPS等处理器都集成了UART.I2C控制器.USB控制器.SDRAM控制器等,有的处理器还集成了片内RAM和Flash. 驱动针对的对象是存储器和外设(包括CPU内部集成的存储器和外设),而不是针对CPU核.Linux

《Linux 设备驱动开发详解(第2版)》——1.3 有操作系统时的设备驱动

1.3 有操作系统时的设备驱动 Linux 设备驱动开发详解(第2版)1.2节中我们看到一个干净利落的设备驱动,它直接运行在硬件之上,不与任何操作系统关联.当系统中包含操作系统后,设备驱动会变得怎样? 首先,无操作系统时设备驱动的硬件操作工作仍然是必不可少的,没有这一部分,驱动不可能与硬件打交道. 其次,我们还需要将驱动融入内核.为了实现这种融合,必须在所有设备的驱动中设计面向操作系统内核的接口,这样的接口由操作系统规定,对一类设备而言结构一致,独立于具体的设备. 由此可见,当系统中存在操作系统

《Linux 设备驱动开发详解(第2版)》——1.2 无操作系统时的设备驱动

1.2 无操作系统时的设备驱动 Linux 设备驱动开发详解(第2版)并不是任何一个计算机系统都一定要运行操作系统,在许多情况下,操作系统都不必存在.对于功能比较单一.控制并不复杂的系统,譬如ASIC内部.公交车的刷卡机.电冰箱.微波炉.简单的手机和小灵通等,并不需要多任务调度.文件系统.内存管理等复杂功能,用单任务架构完全可以良好地支持它们的工作.一个无限循环中夹杂对设备中断的检测或者对设备的轮询是这种系统中软件的典型架构,如代码清单1.1. 代码清单1.1 单任务软件典型架构 1 int m

《Linux设备驱动开发详解 A》一一第1章 Linux设备驱动概述及开发环境构建

第1章 Linux设备驱动概述及开发环境构建本章导读本章将介绍Linux设备驱动开发的基本概念,并对本书所基于的平台和开发环境进行讲解.1.1节阐明设备驱动的概念和作用.1.2节和1.3节分别讲解在无操作系统情况下和有操作系统情况下设备驱动的设计,通过对设计差异的分析,讲解设备驱动与硬件和操作系统的关系.1.4节对Linux操作系统的设备驱动进行了概要性的介绍,给出设备驱动与整个软硬件系统的关系,分析Linux设备驱动的重点.难点和学习方法.1.5节对本书所基于的QEMU模拟的vexpress

《Linux 设备驱动开发详解(第2版)》——导读

前言 本书第1版在2008年初出版以后,受到广大读者的支持和厚爱,累计销售1.6万册,从几年的市场和读者反馈看,在第1版中还存在一些不足,主要是以下几方面. 没有现成的开发环境,读者需要从头到尾构建,而构建需要花费很长的时间,许多时候会不成功,加之配套光盘中的实例没有Makefile,更加大了操作的难度. 没有配套的开发板,大量的基于S3C2410的实例读者身边如果没有可以直接运行的平台,就无法亲身体验这些驱动. 个别内容实用性不强或过于陈旧,也有个别知识点的讲解语言晦涩,读者不易理解,如pla

《Linux设备驱动开发详解 A》一一1.5 Linux设备驱动的开发环境构建

1.5 Linux设备驱动的开发环境构建 1.5.1 PC上的Linux环境 本书配套资源提供了一个Ubuntu的VirtualBox虚拟机映像,该虚拟机上安装了本书涉及的所有源代码.工具链和各种开发工具,读者无须再安装和配置任何环境.该虚拟机可运行于Windows.Ubuntu等操作系统中,运行方法如下. 1)安装VirtualBox. 如果主机为Windows系统,请安装VirtualBox WIN版本: VirtualBox-4.3.20-96997-Win.exe 如果主机为Ubuntu

《Linux设备驱动开发详解 A》一一3.1 Linux内核的发展与演变

3.1 Linux内核的发展与演变 Linux操作系统是UNIX操作系统的一种克隆系统,是一种类UNIX操作系统,诞生于1991年10月5日(第一次正式向外公布的时间),起初的作者是Linus Torvalds.Linux操作系统的诞生.发展和成长过程依赖着5个重要支柱:UNIX操作系统.Minix操作系统.GNU计划.POSIX标准和Internet. 1.?UNIX操作系统 UNIX 操作系统是美国贝尔实验室的Ken. Thompson和Dennis Ritchie于1969年夏在DEC P

《Linux设备驱动开发详解 A》一一3.4 Linux内核的编译及加载

3.4 Linux内核的编译及加载 3.4.1 Linux内核的编译 Linux驱动开发者需要牢固地掌握Linux内核的编译方法以为嵌入式系统构建可运行的Linux操作系统映像.在编译内核时,需要配置内核,可以使用下面命令中的一个: make conf?ig(基于文本的最为传统的配置界面,不推荐使用) make menuconf?ig(基于文本菜单的配置界面) make xconf?ig(要求QT被安装) make gconf?ig(要求GTK+被安装) 在配置Linux内核所使用的make c

《Linux设备驱动开发详解 A》一一1.1 设备驱动的作用

1.1 设备驱动的作用 任何一个计算机系统的运转都是系统中软硬件共同努力的结果,没有硬件的软件是空中楼阁,而没有软件的硬件则只是一堆废铁.硬件是底层基础,是所有软件得以运行的平台,代码最终会落实为硬件上的组合逻辑与时序逻辑:软件则实现了具体应用,它按照各种不同的业务需求而设计,并完成用户的最终诉求.硬件较固定,软件则很灵活,可以适应各种复杂多变的应用.因此,计算机系统的软硬件相互成就了对方.但是,软硬件之间同样存在着悖论,那就是软件和硬件不应该互相渗透入对方的领地.为尽可能快速地完成设计,应用软