PCI协议笔记
1、引脚
必要的引脚在左边,任选的引脚在右边
2、CLK in:时钟输入,为所有PCI上的接口传送提供时序。其频率也称为PCI的工作频率。
大部分信号都在CLK的上升沿有效
3、AD0~AD31 t/s:地址、数据多路复用的输入/输出信号。在FRAME#有效时,是地址周期;在IRDY#和TRDY#同时有效时,是数据周期。
一个PCI总线的传输中包含了一个地址周期和多个数据周期。
地址周期为一个时钟周期,在该周期中AD0~AD31线上含有一个32位的物理地址。对于I/O操作,它是一个字节地址;若是存储器操作和配置操作,则是双字地址。
数据周期, AD0~AD7为最低字节, AD24~AD31为最高字节。当IRDY#有效时,表示写数据稳定有效,TRDY#有效表示读数据稳定有效 。
4、C/BE 0~3# t/s:总线命令和字节使能 多路复用信号线。
在地址周期内,这四条线上传输的是总线命令;
在数据周期内,传输的是字节使能信号,用来表示在整个数据期中, AD0~AD31上哪些字节为有效数据。
5、PCI定义了三个物理地址空间:存储器地址空间、I/O地址空间和配置地址空间,
前两个是一般总线都有的空间;第三个是用以支持PCI硬件配置的特殊空间。
PCI总线的编址是分布式的,每个设备都有自己的地址译码,从而省去了中央译码逻辑。
PCI支持两种设备地址译码:正向译码和负向译码。所谓正向译码就是每个设备都监视地址总线上的访问地址是否落在它范围内,因而速度较快。而负向译码是指该设备要接受未被其他设备在正向译码中接受的所有访问,因此,码方式只能由总线上的一个设备来实现。由于它要等到总线上其他所有设备都拒绝之后才能译码,所以速度较慢,负向译码对于标准扩展总线这类设备是很有用的,因为这类设备必须响应一个很零散的地址空间。正和反向译码设备都不对保留的总线命令发出DEVSEL#响应信号。
6、在I/O访问中, 全部32位AD线都被用来提供一个完整的地址编码(字节地址)。AD0~AD1这两位很重要,并要与C/BE0~3配合,才能进行一次有效的访问。
AD BE(1111) 起始字节
00 xxx0 字节0
01 xx01 字节1
10 x011 字节2
11 0111 字节3
7、在存储器访问中,所有的目标设备都要检查AD0~AD1,要么提供所要求的突发传输顺序,或者执行设备断开操作。对于所有支持突发传输的设备都应能实现线性突发性传输顺序,用AD2~AD31译码得到一个双字地址的访问。
在存储器访问期间,AD0AD1用来指明主设备要求的数据传输模式 ,含义如下:
当AD[1~0]为00时,突发传输顺序为线性增长模式; 在线性增加模式下,每个数据相位后,地址增加一个双字(即加4,对32位传输)或增加两个双字(即加8,对64位传输),直到传输结束。
AD[1~0]为01时,为高速缓存行切换模式;
AD[1~0]为10时,为CACHE行回卷模式;
AD[1~0]为11时,为保留模式。
在存储器地址空间,AD[31~2]提供一个双字边界地址,而AD[1—0]不参与地址译码。
8、在配置的地址空间中,要用AD2~AD7将访问落实到一个DWORD地址寻址64个双字寄存器。当一个设备收到配置命令时,IDSEL信号成立且AD0AD1为00,则该设备即被选为访问的目标。否则就不参与当前的对话。如果译码出来符合某桥路的编号,且AD0AD1为01,则说明配置访问是对该桥后面的设备,即不与桥直接连接的设备。
9、字节使能信号C/BE# 0~3来指出哪些字节带了有意义的数据,在每个数据周期内,可以自由改变字节能,使之对传输数据的实际含义和有效部分进行界定,
这一功能称作字节校正或字节对齐。
10、为了避免多个设备同时驱动一个信号到PCI总线上而产生竞争,在一个设备驱动到另一个设备之间设个过渡期,又称为交换周期。在时序图上,交换期用"→←"来表示。
在每个地址周期和数据周期,所有的AD线都必须被驱动到稳定的状态(数据),即使是在当前数据传涉及到的字节所对应的AD线也不例外。在实际应用中,如果对功耗要求较高时,为尽量减少总线上的功耗,对当前总线周期中不用的字节用与前一周期相同的数据去驱动它们。
11、PCI总线上的读操作