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

linux驱动程序设计的硬件基础(一)

linux驱动程序设计的硬件基础(一)本章讲总结学习linux设备程序设计的硬件基础。一、处理器1.1通用处理器通用处理器(GPP)并不针对特定的应用领域进行体系结构和指令集的优化

          linux驱动程序设计的硬件基础(一)

本章讲总结学习linux设备程序设计的硬件基础。

一、处理器

1.1通用处理器

  通用处理器(GPP)并不针对特定的应用领域进行体系结构和指令集的优化,它们具有一般化的通用体系结构和指令集,以支持复杂的运算并易于新开发功能的添加。一般而言,在嵌入式微控制器(MCU)和微处理器(MPU)中会包含一个通用处理器核。

   MPU 通常代表一个 CPU(中央处理器) ,而 MCU 则强调把中央处理器、存储器和外围电路集成在一个芯片中。嵌入式微控制器一般由一个 CPU 核和多个外围电路集成,目前主流的 CPU 核如下。51单片机就是一个典型的集成外围电路的MCU的结构。

  中央处理器的体系架构可以分为两类, 一类为冯· 诺伊曼结构, 一类为哈佛结构。冯·诺伊曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。而哈佛结构将程序指令和数据分开存储,指令和数据可以有不同的数据宽度。此外,哈佛结构还采用了独立的程序线和数据线,分别作为 CPU 与每个存储器之间的专用通信路径,具有较高的执行效率。

  技术分享      技术分享

 

  从指令集的角度来讲,中央处理器也可以分为两类,即 RISC(精简指令集计算机)和 CISC(复杂指令集计算机) 。CSIC 强调增强指令的能力、减少目标代码的数量,但是指令复杂, 指令周期长;而 RISC 强调尽可能减少指令集、指令单周期执行,但是目标代码会更大。ARM、MIPS、PowerPC 等 CPU 内核都采用了 RISC 指令集。目前,RISC 和 CSIC 的融合非常明显。

1.2数字信号处理器

  数字信号处理器(DSP)针对通信、图像、语音和视频处理等领域的算法而设计。它包含独立的硬件乘法器。DSP 的乘法指令一般在单周期内完成,且优化了卷积、数字滤波、FFT(快速傅立叶变换) 、相关、矩阵运算等算法中的大量重复乘法。DSP 一般采用改进的哈佛架构,它具有独立的地址总线和数据总线,两条总线由程序存储器和数据存储器分时共用。DSP 分为两类, 一类是定点 DSP, 一类是浮点 DSP。 浮点 DSP 的浮点运算用硬件来实现, 可以在单周期内完成, 因而其浮点运算处理速度高于定点 DSP。 而定点 DSP 只能用定点运算模拟浮点运算。

  通用处理器和数字信号处理器也有相互融合以取长补短的趋势,如数字信号控制器(DSC)即为 MCU+DSP,blackfin 系列属于 DSC。目前,芯片厂商推出了许多ARM+DSP 的双核处理器。

  网络处理器是一种可编程器件, 它应用于电信领域的各种任务, 如协议分析、路由查找、声音/数据的汇聚、防火墙等。网络处理器器件内部通常由若干微码处理器和若干硬件协处理器组成, 多个微码处理器在网络处理器内部并行处理, 通过预先编制的微码来控制处理流程。 而对于一些复杂的标准操作 (如内存操作、 路由表查找算法、 QoS 的拥塞控制算法、 流量调度算法等)则采用硬件协处理器来进一步提高处理性能,从而实现了业务灵活性和高性能的有机结合。

  使用 ASIC(专用集成电路)往往是低成本且高性能的方案。ASIC 专门针对特定应用而设计, 不具备也不需要灵活的编程能力。 使用 ASIC 完成同样地功能往往比直接使用 CPU 资源或 CPLD(复杂可编程逻辑器件)/FPGA (现场可编程门阵列)更廉价、高效。

  在实际项目的硬件方案中,往往会根据应用的需求选择通用处理器、数字信号处理器、特定领域处理器、CPLD/FPGA 或 ASIC 之一的解决方案,在复杂的系统中,这些芯片可能会同时存在,协同合作,各自发挥自己的长处。如在一款智能手机中,可使用 MCU 处理图形用户界面和用户的按键输入并运行多任务操作系统,使用 DSP进行音视频编解码,而在射频方面则采用 ASIC。

 

技术分享

二、存储器

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

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

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

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

 技术分享

一个nandflah的接口主要包含如下信息:


  1. I/O 线:地址、指令和数据通过这组线传输,一般为 8 位或 16 位。

  2. 芯片启动(Chip Enable,CE#) :如果没有检测到 CE#信号,那么,NAND器件就保持待机模式,不对任何控制信号做出响应。

  3. 写使能(Write Enable,WE#) : WE#负责将数据、地址或指令写入 NAND之中。

  4. 读使能(Read Enable,RE#) : RE#允许数据输出。

  5. 指令锁存使能(Command Latch Enable,CLE) : 当 CLE 为高时,在 WE#信号的上升沿,指令将被锁存到 NAND 指令寄存器中。

  6. 地址锁存使能(Address Latch Enable,ALE) :当 ALE 为高时,在 WE#信号的上升沿,地址将被锁存到 NAND 地址寄存器中。

  7. 就绪/忙(Ready/Busy,R/B#) :如果 NAND 器件忙, R/B#信号将变低。该信号是漏极开路,需要采用上拉电阻。

  由于 Flash 固有的电器特性, 在读写数据过程中偶然会产生 1 位或几位数据错误,即位反转, NAND Flash 发生位反转的几率要远大于 NOR Flash。 位反转无法避免, 因此,使用 NAND Flash 的同时,应采用错误探测/错误更正(EDC/ECC)算法。Flash 的编程原理都是只能将 1 写为 0,而不能将 0 写为 1。所以在 Flash 编程之前,必须将对应的块擦除,而擦除的过程就是把所有位都写为 1 的过程,块内的所有字节变为 0xFF。

  上所述的各种 ROM、Flash 和磁介质存储器都属于非易失性存储器(NVM) ,掉电信息不会丢失,而 RAM 则与此相反。

 2.2RAM 也可再分为静态 RAM(SRAM)和动态 RAM(DRAM)

   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。

2.3.1NVRAM(非易失性 RAM)

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

2.3.2DPRAM(双端口 RAM)

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

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

技术分享

2.3.3CAM(内容寻址 RAM)

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

 技术分享

2.3.4FIFO(先进先出队列)

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

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

 

 

 


推荐阅读
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
甄Ven-Li
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有