软件中主要要求的是高内聚,低耦合的设计要求
由此可见,驱动成为了连接应用软件和硬件的桥梁
驱动针对的对象是存储器和外设(包括内部集成的存储器和外设),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总线的两个信号线为数据线SDA和信号线SCL;
总线空闲时,两个信号线都需要上拉;
SDA和SCL的接口电路都是双向的;
开始位和停止位都由i2c主设备产生,在选择从设备时,若从设备的地址为7位设备地址,则主设备在发起传输前,需要发出1字节地址信息,前7位为地址信息,第8位为读写标志位。在第八个时钟周期过后,主控方应该释放SDA。
SPI是串行外设接口,低电平有效CSS的从机选择线
当我们要与某外设通信时,需要将该设备上的CSS线拉低;
SPI的从机的最大支持频率决定了SPI的时钟频率,SPI从机中的CPHA、CPOL模式决定了采样的时刻以及出发的边沿,数据与时钟之间的偏移。
当CPOL = 0,串行同步时钟的空闲状态为低电平;
当CPOL = 1,串行同步时钟的空闲状态为高电平;
当CPHA = 0,串行同步时钟的第一个跳变沿(上升或下降)数据被采样
当CPHA = 1,串行同步时钟的第二个跳变沿(上升或下降)数据被采样
usb没有看懂就么写了,后面补充
以太网接口是由MAC和PHY物理收发器共同组成
之间是由MII(媒体独立接口)连接,MII含有两个接口,一个是数据接口,一个是管理MAC和PHY的接口
pci是一种局部总线,可进行突发模式传输
突发模式传输
突发模式传输,是指取得总线控制权之后连续进行多个数据传输。只需要给出目的地的首地址,访问第一个数据后,第2~n个数据会在首地址的基础上按一定规则自动寻址和传输
PCI-E采用的是点对点串行连接,比起PCI的并行架构,每个设备都有单独的设备连接,采用串行的方式进行传输数据,不需要向总线请求带宽都可以达到高带宽。
SD是关于FLASH的一种存储卡标准,也就是常见的SD记忆卡
SDIO是在SD卡的基础上,定义了一些IO口,用来连接蓝牙、wifi、GPS等
EMMC就是NAND FLASH、闪存控制芯片和标准接口封装的集合;支持DAT[0]~DAT[7]8位的数据线,默认处于1位模式,只使用DAT[0],后续可以配置为4位或者是8位