驱动设备概述和硬件基础
文章目录
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的接口
- 数据接口
- 包括用于发送和接受的两条独立通道,每条通道都有独立的数据、时钟、控制信号
- 数据接口总共需要16个信号
- MII管理接口包含2个信号,时钟和数据信号。
- 以太网隔离变压器使用来稳定信号和高电压隔离的作用
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位