http://www.wanxiangshu.com

一文详解Linux PCI驱动框架

PCI/PCIe总线硬件;

Linux PCI驱动核心框架;

Linux PCI Host控制器驱动;

不排除会包含PCIe外设驱动模块,一切随缘。

第一代总线包含ISA、EISA、VESA和Micro Channel等;

第二代总线包含PCI、AGP、PCI-X等;

第三代总线包含PCIe、mPCIe、m.2等;

PCIe(PCI Express)是目前PC和嵌入式系统中最常用的高速总线,PCIe在PCI的基础上发展而来,在软件上PCIe与PCI是后向兼容的,PCI的系统软件可以用在PCIe系统中。

本文会分两部分展开,先介绍PCI总线,然后再介绍PCIe总线,方便在理解上的过渡,开始旅程吧。

2. PCI Local Bus

2.1 PCI总线组成

PCI总线(Peripheral Component Interconnect,外部设备互联),由Intel公司提出,其主要功能是连接外部设备;

PCI Local Bus,PCI局部总线,局部总线技术是PC体系结构发展的一次变革,是在ISA总线和CPU总线之间增加的一级总线或管理层,可将一些高速外设,如图形卡、硬盘控制器等从ISA总线上卸下,而通过局部总线直接挂接在CPU总线上,使之与高速CPU总线相匹配。PCI总线,指的就是PCI Local Bus。

先来看一下PCI Local Bus的系统架构图:

pIYBAGA960uAKQWOAAClqNzGaD0578.png

从图中看,与PCI总线相关的模块包括:

Host Bridge,比如PC中常见的North Bridge(北桥)。图中处理器、Cache、内存子系统通过Host Bridge连接到PCI上,Host Bridge管理PCI总线域,是联系处理器和PCI设备的桥梁,完成处理器与PCI设备间的数据交换。其中数据交换,包含处理器访问PCI设备的地址空间和PCI设备使用DMA机制访问主存储器,在PCI设备用DMA访问存储器时,会存在Cache一致性问题,这个也是Host Bridge设计时需要考虑的;此外,Host Bridge还可选的支持仲裁机制,热插拔等;

PCI Local Bus;PCI总线,由Host Bridge或者PCI-to-PCI Bridge管理,用来连接各类设备,比如声卡、网卡、IDE接口等。可以通过PCI-to-PCI Bridge来扩展PCI总线,并构成多级总线的总线树,比如图中的PCI Local Bus #0和PCI Local Bus #1两条PCI总线就构成一颗总线树,同属一个总线域;

PCI-To-PCI Bridge;PCI桥,用于扩展PCI总线,使采用PCI总线进行大规模系统互联成为可能,管理下游总线,并转发上下游总线之间的事务;

PCI Device;PCI总线中有三类设备:PCI从设备,PCI主设备,桥设备。PCI从设备:被动接收来自Host Bridge或者其他PCI设备的读写请求;PCI主设备:可以通过总线仲裁获得PCI总线的使用权,主动向其他PCI设备或主存储器发起读写请求;桥设备:管理下游的PCI总线,并转发上下游总线之间的总线事务,包括PCI桥、PCI-to-ISA桥、PCI-to-Cardbus桥等。

2.2 PCI总线信号定义

PCI总线是一条共享总线,可以挂接多个PCI设备,PCI设备通过一系列信号与PCI总线相连,包括:地址/数据信号、接口控制信号、仲裁信号、中断信号等。如下图:

MBR7ny.png

左侧红色框里表示的是PCI总线必需的信号,而右侧蓝色框里表示的是可选的信号;

AD[31:00]:地址与数据信号复用,在传送时第一个时钟周期传送地址,下一个时钟周期传送数据;

C/BE[3:0]#:PCI总线命令与字节使能信号复用,在地址周期中表示的是PCI总线命令,在数据周期中用于字节选择,可以进行单字节、字、双字访问;

PAR:奇偶校验信号,确保AD[31:00]和C/BE[3:0]#传递的正确性;

Interface Control:接口控制信号,主要作用是保证数据的正常传递,并根据PCI主从设备的状态,暂停、终止或者正常完成总线事务:

FRAME#:表示PCI总线事务的开始与结束;

IRDY#:信号由PCI主设备驱动,信号有效时表示PCI主设备数据已经ready;

TRDY#:信号由目标设备驱动,信号有效时表示目标设备数据已经ready;

STOP#:目标设备请求主设备停止当前总线事务;

DEVSEL#:PCI总线的目标设备已经准备好;

IDSEL:PCI总线在配置读写总线事务时,使用该信号选择PCI目标设备;

Arbitration:仲裁信号,由REQ#和GNT#组成,与PCI总线的仲裁器直接相连,只有PCI主设备需要使用该组信号,每条PCI总线上都有一个总线仲裁器;

Error Reporting:错误信号,包括PERR#奇偶校验错误和SERR系统错误;

System:系统信号,包括时钟信号和复位信号;

看一下C/BE[3:0]都有哪些命令吧:

a2AFvy.png

2.3 PCI事务模型

PCI使用三种模型用于数据的传输:

ZZvQje.png

Programmed I/O:通过IO读写访问PCI设备空间;

DMA:PIO的方式比较低效,DMA的方式可以直接去访问主存储器而无需CPU干预,效率更高;

Peer-to-peer:两台PCI设备之间直接传送数据;

2.4 PCI总线地址空间映射

PCI体系架构支持三种地址空间:

nAFz6z.png

memory空间:针对32bit寻址,支持4G的地址空间,针对64bit寻址,支持16EB的地址空间;

I/O空间PCI最大支持4G的IO空间,但受限于x86处理器的IO空间(16bits带宽),很多平台将PCI的IO地址空间限定在64KB;

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。