热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

驱动设计的硬件基础(1)成于坚持,败于止步处理器分类不做过多说明,处理器类型很多,大同小异存储器存储器可分为只读储存器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光介质存储器和磁介质存储

驱动设计的硬件基础(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 以块方式进行访问,不支持芯片内执行。 


公共闪存接口(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 内部,因而硬件工程师设计电路的原理比较简单。

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

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


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

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

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

待续。。。。


推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
author-avatar
独角式恋爱牛仔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有