驱动设备概述和硬件基础

发布时间:2024年01月18日

驱动设备概述和硬件基础

Linux设备驱动概述

软件中主要要求的是高内聚,低耦合的设计要求
请添加图片描述
由此可见,驱动成为了连接应用软件和硬件的桥梁

  • 为什么要使用操作系统?使用操作系统之后,驱动反而变得复杂了
    • 并发任务
      一个复杂的软件系统要处理多个并发的任务,没有操作系统,想完成多任务是很难的
    • 内存管理
      操作系统可以给我们带来内存管理机制,对于多数含MMU的处理器而言,内存管理机制可以使得每一个进程都享有独立4GB的内存空间
    • 服务上层
      操作系统可以通过给驱动制造麻烦进而服务于上层应用,例如应用程序通过write,read等函数读写文件就可访问各种字符设备和块设备,而不论设备的具体类型和工作方式

Linux设备驱动

设备的分类及特点

驱动针对的对象是存储器和外设(包括内部集成的存储器和外设),Linux将存储器和外设分为了三大类

  • 字符设备

字符设备主要是必须以串行顺序依次进行访问的设备

  • 块设备

块设备主要是可以按任意的顺序访问,以块为单位进行操作,如硬盘和emmc等

字符设备和块设备都被映射到Linux文件系统的文件和目录,通过文件调用接口函数open() write() read() close()等即可访问字符设备和块设备

  • Linux的块设备有两种访问方法:

    • 一种是类似dd命令对应的原始块设备

      如”/dev/sdb1“

    • 在块设备上建立FAT、EXT4、BTRFS等文件系统

      然后以文件路径如”/home/barry/hello.txt“的形式进行访问

  • 网络设备

网络设备主要面向的是数据包之间的信息交换,不倾向于对应文件系统的节点

请添加图片描述
应用程序可以通过直接调用Linux的系统接口来操作系统进而使用硬件,也可以通过调用C库函数的方式,但处于代码的可移植性的目的,使用后者较为好处

驱动代码

#define reg_gpio_ctrl  *(volatile int *) (ToVirtual(GPIO_REG_CTRL))

程序中ToVirtual()的作用是当系统启动了硬件MMU之后,根据物理地址和虚拟地址的映射关系,将寄存器的物理地址转化为虚拟地址

驱动设计的硬件基础

计算机结构

  • 冯.诺依曼结构

    将程序指令存储器和数据存储器合并在一起的存储器结构。其中指令存储器和数据存储器指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同

  • 哈佛架构

    将程序指令和数据分开存储,指令和数据可以有不同的数据宽度。哈佛架构还采用了独立的程序总线和数据总线,分别作为CPU与每个存储器之间的专用通信通道

请添加图片描述
而对于改进后的结构,一共有两个总线,没有单独的程序总线和数据总线,而是共用一个总线,只不过是分时共用来传递地址和数据;还有一个地址总线用来寻址程序和数据

存储器

请添加图片描述

  • 存储器主要分为非易失存储器和掉电丢失数据的存储器
    • 非易失存储器主要又分为ROM和FLASH闪存

      • ROM

        ROM也可再细分为可编程ROM(PROM)、可擦除可编程ROM(EPROM)、可电可擦除可编程ROM(EEPROM)

      • FLASH

        市面上主要两种flash技术主要是以NAND FLASH和NOR FLASH两种闪存技术

        • NOR Flash属于类SRAM接口,程序可以直接在flash中运行

          请添加图片描述

        • NAND flash以块的方式进行访问

          一个NAND Flash的接口主要包含如下信号:

          写使能、读使能、IO总线、指令锁存使能、地址锁存使能、芯片启动

          NAND flash较Nor Flash容量大,价格低;每个块的最大擦写次数是100万次,而Nor的擦写次数是10万次;NAND flash的擦除,编程速度远超于Nor flash

        Flash的编程原理都是只能将1写成0,而不能将0写成1;因此在Flash编程之前,必须将对应的块擦除,而擦除的过程就是把所有位都写为1的过程,块内的所有字节变为0xFF

    • 掉电丢失数据的存储器RAM

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

        • SDRAM同步动态随机存取存储器

          它采用了同步设计,数据在时钟的边缘进行传输,因此速度比传统的DRAM更快。

        • DDR SDRAM双数据速率同步动态随机存取存储器

          这是一种数据在上升和下降的时钟边缘都能传输的SDRAM。

      • DPRAM双端口RAM

        接口为数据、地址、控制总线各一对,左右两边皆可以连接处理器

      • CAM内容寻址寄存器

        可以通过输入一个数据,然后与寄存器中的数据进行比对,输出相应的匹配信息

        接口为:数据地址和匹配标志

      • FIFO先进先出队列

        具有两个访问接口,但是FIFO两边并不对等,某一时刻只能设置一边作为输入一边作为输出

接口与总线

I2C

I2C总线支持多主机,在任意情况下进行发送和接收的设备都可以称为主设备。主控在任意情况下只有一个,能够控制数据的传输和时钟频率,在任意时刻只能有一个主控。

I2C总线的两个信号线为数据线SDA和信号线SCL;

总线空闲时,两个信号线都需要上拉;

SDA和SCL的接口电路都是双向的;

开始位和停止位都由i2c主设备产生,在选择从设备时,若从设备的地址为7位设备地址,则主设备在发起传输前,需要发出1字节地址信息,前7位为地址信息,第8位为读写标志位。在第八个时钟周期过后,主控方应该释放SDA。

请添加图片描述

SPI

SPI是串行外设接口,低电平有效CSS的从机选择线

请添加图片描述
当我们要与某外设通信时,需要将该设备上的CSS线拉低;

SPI的从机的最大支持频率决定了SPI的时钟频率,SPI从机中的CPHA、CPOL模式决定了采样的时刻以及出发的边沿,数据与时钟之间的偏移。

当CPOL = 0,串行同步时钟的空闲状态为低电平;

当CPOL = 1,串行同步时钟的空闲状态为高电平;

当CPHA = 0,串行同步时钟的第一个跳变沿(上升或下降)数据被采样

当CPHA = 1,串行同步时钟的第二个跳变沿(上升或下降)数据被采样

USB

usb没有看懂就么写了,后面补充

MAC以太网接口

请添加图片描述
以太网接口是由MAC和PHY物理收发器共同组成

之间是由MII(媒体独立接口)连接,MII含有两个接口,一个是数据接口,一个是管理MAC和PHY的接口

  1. 数据接口
    1. 包括用于发送和接受的两条独立通道,每条通道都有独立的数据、时钟、控制信号
    2. 数据接口总共需要16个信号
  2. MII管理接口包含2个信号,时钟和数据信号。
  3. 以太网隔离变压器使用来稳定信号和高电压隔离的作用

PCI,PCI-E

pci是一种局部总线,可进行突发模式传输

  • 突发模式传输

    突发模式传输,是指取得总线控制权之后连续进行多个数据传输。只需要给出目的地的首地址,访问第一个数据后,第2~n个数据会在首地址的基础上按一定规则自动寻址和传输

PCI-E采用的是点对点串行连接,比起PCI的并行架构,每个设备都有单独的设备连接,采用串行的方式进行传输数据,不需要向总线请求带宽都可以达到高带宽。

SD,SDIO

SD是关于FLASH的一种存储卡标准,也就是常见的SD记忆卡

SDIO是在SD卡的基础上,定义了一些IO口,用来连接蓝牙、wifi、GPS等

EMMC就是NAND FLASH、闪存控制芯片和标准接口封装的集合;支持DAT[0]~DAT[7]8位的数据线,默认处于1位模式,只使用DAT[0],后续可以配置为4位或者是8位

文章来源:https://blog.csdn.net/weixin_45241469/article/details/135678207
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。