Linux设备驱动开发详解-Note(3)---驱动设计的硬件基础(1)

驱动设计的硬件基础(1)

成于坚持,败于止步

处理器分类

不做过多说明,处理器类型很多,大同小异

Linux设备驱动开发详解-Note(3)---驱动设计的硬件基础(1)_第1张图片

存储器

存储器可分为只读储存器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光介质存储器和磁介质存储器。

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

目前 ROM 有被 Flash 替代的趋势,NOR(或非)和 NAND(与非)是市场上两种主要的 Flash 闪存技术。Intel 公司于 1988 年首先开发出 NOR Flash,彻底改变了原先由 EPROM 和 E2PROM 一统天下的局面。紧接着,1989 年,东芝公司开发出 NAND Flash,每比特的成本被大大降低。 

NOR Flash 和 CPU 的接口属于典型的类 SRAM 接口(如图 2.5 所示),不需要增加额外的控制电路。NOR Flash 的特点是可芯片内执行(XIP,eXecute In Place),程序可以直接在 NOR 内运行。而 NAND Flash 和 CPU 的接口必须由相应的控制电路进行转换,当然也可以通过地址线或 GPIO 产生 NAND Flash 接口的信号。NAND Flash 以块方式进行访问,不支持芯片内执行。 

Linux设备驱动开发详解-Note(3)---驱动设计的硬件基础(1)_第2张图片

公共闪存接口(Common Flash Interface,简称 CFI)是一个公开的、标准的从 NOR Flash 器件中读取数据的接口。它可以使系统软件查询已安装的 Flash 器件的各种参数,包括器件阵列结构参数、电气和时间参数以及器件支持的功能等。利用 CFI,在不修改系统软件的情况下,就可以用新型的和改进的产品代替旧版本的产品。

一个 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。 

许多嵌入式系统都提供了 IDE(Integrated Drive Electronics)接口,以供连接硬盘控制器或光驱,IDE 接口的信号与 SRAM 类似。人们通常也把 IDE 接口称为 ATA(Advanced Technology Attachment)接口,技术角度而言并不准确。其实,ATA 接口发展至今,已经经历了 ATA-1(IDE)、ATA-2(EIDE Enhanced IDE/Fast ATA)、ATA-3(FastATA-2)、Ultra ATA、Ultra ATA/33、Ultra ATA/66、Ultra ATA/100 及 Serial ATA 的发展过程。 

以上所述的各种 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 发信电平)技术的 RDRAM(Rambus DRAM)和 Direct RDRAM。 

针对许多特定场合的应用,嵌入式系统中往往还使用了一些特定类型的 RAM。 

1.NVRAM(非易失性 RAM) 既然是 RAM,就是易失性的,为什么会有一类非易失性的 RAM 呢? 实际上,NVRAM 借助带有备用电源的 SRAM 或借助 NVM(如 E2PROM)存储SRAM 的信息并恢复来实现非易失性。NVRAM 的特点是完全像 SRAM 一样读写,而且写入的信息掉电不丢失,不需要 E2PROM 和 Flash 的特定擦除和编程操作。NVRAM 多用于存放系统中的参数信息。 

2.DPRAM(双端口 RAM)
DPRAM 的特点是可以通过两个端口同时访问,具有两套完全独立的数据总线、地址总线线和读写控制线,通常用于两个处理器之间交互数据,如图 2.6 所示。当一端被写入数据后,另一端可以通过轮询或中断获知,并读取其写入的数据。由于双CPU 同时访问 DPRAM 时的仲裁逻辑电路集成在 DPRAM 内部,因而硬件工程师设计电路的原理比较简单。

Linux设备驱动开发详解-Note(3)---驱动设计的硬件基础(1)_第3张图片 
DPRAM 的优点是通信速度快、实时性强、接口简单,而且两边 CPU 都可主动进行数据传输。除了双端口 RAM 以外,目前 IDT 等芯片厂商还推出了多端口 RAM,可以供 3个以上的 CPU 互通数据。 

3.CAM(内容寻址 RAM)
CAM 是按内容进行寻址的存储器,是一种特殊的存储阵列 RAM,它的主要工作机制就是将一个输入数据项与存储在 CAM 中的所有数据项自动同时进行比较,判别该输入数据项与 CAM 中存储的数据项是否相匹配,并输出该数据项对应的匹配信息。 如图 2.7 所示,在 CAM 中,输入的是所要查询的数据,输出的是数据地址和匹配标志。若匹配(即搜寻到数据),则输出数据地址。CAM 用于数据检索的优势是软件无法比拟的,可以极大地提高系统性能。 

Linux设备驱动开发详解-Note(3)---驱动设计的硬件基础(1)_第4张图片

4.FIFO(先进先出队列)
FIFO 存储器的特点是先进先出,进出有序,FIFO 多用于数据缓冲。FIFO 和 DPRAM类似,具有两个访问端口,但是 FIFO 两边的端口并不对等,某一时刻只能被设置为一边作为输入,一边作为输出。
如果 FIFO 的区域共为 n 个字节,我们只能通过循环 n 次读取同一个地址才能将该片区域读出,不能指定偏移地址。对于有 n 个数据的 FIFO,当循环读取 m 次,下一次读会自动读取到第 m+1 个数据,这是由 FIFO 本身的特性决定的。
存储器分类总结:
Linux设备驱动开发详解-Note(3)---驱动设计的硬件基础(1)_第5张图片

就到这里了,O(∩_∩)O~

我的专栏地址:http://blog.csdn.net/column/details/linux-driver-note.html

待续。。。。

你可能感兴趣的:(linux,驱动开发)