全部博文(685)
分类: 嵌入式
2014-05-21 23:47:54
原文地址:PCI 总线 协议 基础 详解 作者:linuxargue
PCI总线协议基础
PCI基本总线协议传输机制是猝发成组数据传输。一个分组由一个地址相位和一个或多个数据相位组成。
1.PCI总线的传输控制
PCI总线上所有的数据传输基本上都是由以下三条信号线控制的:
FRAME#:由主设备驱动,说明一次数据传输周期的开始和结束。
IRDY#:由主设备驱动,表示主设备已经作好传送数据的准备。
TRDY#:由从设备驱动,表示从设备已经作好传送数据的准备。
当
数据有效时,数据源设备需要无条件设置xRDY#,接收方可以在适当的时间发出xRDY#信号。FRAME#信号有效后的第一个时钟前沿是地址相位的开
始,此时,开始传送地址信息和总线命令,下一个时钟前沿进入一个或多个数据相位。每当IRDY#和TRDY#同时有效时,所对应的时钟前沿就使数据在主从
设备之间传送。在此期间,可由主设备或从设备分别利用IRDY#和TRDY#的无效而插入等待周期。
一旦主设备设置了IRDY#,将
不能再改变IRDY#和FRAME#,直到当前的数据相位完成为止,而此期间不管TRDY#的状态是否发生变化。一旦从设备设置了TRDY#,就不能改变
DEVSEL#、TRDY#或STOP#,直到当前的数据相位完成为止。也就是说,只要数据传输已经开始,那么在当前数据相位结束之前,不管是主设备还是
从设备都不能撤消命令,必须完成数据传输。
最后一次数据传输时(可能紧接地址相位之后),主设备应撤消FRAME#信号而建立IRDY#,表明主设备已作好了最后一次数据传输的准备。当从设备发出TRDY#信号,表明最后一次数据传输已经完成,接口转入空闲状态,此时FRAME#和IRDY#均被撤消。
对于PCI总线的传输,可总结出以下几条规则:
①FRAME#和IRDY#决定总线的忙/闲状态。当其中一个有效时,表示总线忙;两个都无效时,总线进入空闲状态。
②一旦FRAME#被置为无效,在同一传输期间不能重新置为有效。
③除非设置IRDY#,一般情况下不能设置FRAME#无效(在FRAME#无效后的第一个时钟沿IRDY#必须保持有效)。
④一旦主设备已使IRDY#有效,在当前数据相位完成前,不能改变IRDY#或FRAME#的状态。
⑤在完成最后一个数据相位之后的时钟周期主设备必须使IRDY#无效。
2.PCI总线的寻址
PcI总线定义了三种物理地址空间:内存地址空间、I/O地址空间及配置地址空间,前两种为通常意义的地址空间,第三种配置地址空间用以支持PCI的硬件配置。
PCI
总线的地址译码是分散的,每个设备都有自己的地址译码逻辑,从而省去了中央译码逻辑。PCl支持对地址的正向译码和负向译码,所谓正向译码,是指总线上每
个设备都监视地址总线上的访问地址,判断是否落在自己的地址范围内,译码速度较快。所谓负向译码,是指要接受未被其他设备在正向译码中接受的所有访问,因
此,此种译码方式只能由总线上的一个设备来实现(一般是连接标准扩展总线的桥)。由于它要等到总线上其他所有设备都拒绝之后才能动作,所以速度较慢。负向
译码对于标准扩展总线上地址空间零散的设备是很有用的。
在I/O地址空间,所有韵32位地址都用来表示一个完整的字节地址。启动
I/O传输的主设备应确保AD[1~0]正确指示本次传输的最低有效字节(即起始字节)。字节允许信号和AD[1~0]一起指明传输的数据宽度和双字中被
选中的字节,表9.5表示了AD[1~0]和初始数据相位中字节允许的有效组合。
在存储器地址空间,AD[31~2]提供一个双字边界地址,而AD[1—0]不参与地址译码,用来指明主设备要求的数据传输顺序,见表9.6。
在
线性增加模式下,每个数据相位后,地址增加一个双字(即加4,对32位传输)或增加两个双字(即加8,对64位传输),直到传输结束。对于Cache行回
卷(wayp)模式,传输可从Cache中任意地址偏移处开始,Cache块的长度是由配置空间中的Cache块大小寄存器定义的。访问过程中每次地址增
加一个双字(64位传输中地址增加两个双字),一直到Cache块的末尾,然后回卷到同一Cache块的开始处,再进行到Cache块的剩余部分被传送完
为止。
在配置地址空间,由AD[7—2]寻址64个双字寄存器。当一条配置命令的地址被译码,IDSEL有效且AD[1—0]=00时,设备判断是否寻址自己的配置寄存器,如果不是则不理会当前操作。
3.PCI总线驱动的过渡
为了避免多个设备同时驱动一个信号到PCI总线上而产生竞争,在一个设备驱动到另一个设备驱动之间要设置一个过渡期,又称为交换周期,如图9—6所示中用互相指向对方尾部的双箭头符号表示。不同信号的交换周期出现的时刻可能不同。对于IRDY#、TRDY#、S
TOP#、DEVSEL#等信号,都利用地址相位作为它们的交换周期;而对于FRAME#、C/BE[3~0]#、AD[3l~00]等信号,则是利用数据传输之间的空闲期作为交换周期。
4.PCI总线数据传输过程
PCI
采用地址/数据复用技术,每一个PCI总线传送由一个地址相位和一个或多个数据相位组成。地址相位由FRAME#变为有效的时钟周期开始。在地址相位,总
线主设备通过C/BE[3~0]#发送总线命令。如果是总线读命令,在地址相位后需要一个交换周期,该周期过后,AD[3l~0]改由从设备驱动,以接纳
从设备的数据。对于写操作没有过渡期,直接从地址相位进入数据相位。数据相位的个数取决于要传送的数据个数,一个数据相位至少需要一个PCI时钟周期,在
任何一个数据相位都可以插入等待周期。FRAME#从有效变成无效表示当前正处于最后一个数据相位。
总线操作结束有多种方式。在大多
数情况下,由从设备和主设备共同撤消准备就绪信号TRDY#和IRDY#。如果从设备不能继续传送,可以设置STOP#信号,表示从设备撤消与总线的连
接。所寻址的从设备不存在或者DEVSEL#信号一直为无效状态都可能导致主设备结束当前总线操作,使FRAME#和IRDY#变为无效,回到总线空闲状
态。
1)PCI总线上的读操作
图9.6是PCI总线读操作时序的一个例子,从中可以看出,一旦FRAME#信号有
效,地址相位便开始,并在时钟2的上升沿处稳定有效。在地址相位内,AD[31~00]上包含有效地址,C/BE#[3~0]上包含一个有效的总线命令。
数据相位是从时钟3的上升沿处开始的。在此期间,AD[31一00]上传送的是数据,C/BE#线上的信息用于指定数据线上哪些字节有效(即哪几个字节是
当前要传输的)。需要强调的是,无论是读操作还是后面要讲的写操作,从数据相位的开始一直到传输完成,C/BE#的输出缓冲器(或锁存器)必须始终保持有
效状态。
图9.6中的DEVSEL#信号和TRDY#信号由被地址相位内所发地址选中的从设备提供,但要保证TRDY#在
DEVSEL#之后出现,IRDY#信号是发起读操作的主设备根据总线的占用情况发出的。数据的真正传输是在IRDY#和TRDY#同时有效的时钟前沿进
行的。当这两个信号之一无效时,就表示需要插入等待周期,此时,不进行数据传输。这说明一个数据相位可以包含一次数据传输和若干个等待周期。图中所示的时
钟4、6、8处各进行了一次数据传输,而在时钟3、5、7处插入了等待周期。
在读操作中的地址相位和数据相位之间,AD线上要有一个总线交换周期,这通过从设备强制TRDY#实现,即让TRDY#的发出比地址晚一拍。在交换周期过后且DEVSEL#信号变为有效时,从设备必须驱动AD线。
尽
管主设备在时钟7处已知道下一个数据相位是本次传送的最后一个,但由于某种原因它暂时不能完成该次传输(此时IRDY#无效),所以主设备还不能撤消
FRAME#,只有在时钟8处,IRDY#变为有效后,FRAME#信号才能撤消,从而通知从设备这是最后一个数据相位。
2)PCI总线上的写操作
图9.7所示是PCI总线写操作时序的一个例子。从中可以看出,总线上的写操作与读操作相类似,也是FRAME#的有效表示写操作周期中地址相位的开始,但地址相位后不需要交换周期,因为数据和地址都是由同一主设备提供的。
在
图9.7中,第一个和第二个数据相位中没有等待周期,而在第三个数据相位中连续插入了3个等待周期,注意,第一个等待周期是由传输双方共同引起的。告诉从
设备最后一个数据相位的方法与读操作时相同,即当FRAME#撤消后,还需要IRDY#处于有效状态。这里,主设备在时钟6处使IRDY#恢复有效,通知
从设备这是最后一个数据相位,但由于从设备未准备好,最后一次数据传输到时钟8才完成。
从图中AD和C/BE#的波形可看出,主设备发送数据可以延迟,但字节允许信号不受等待周期的影响,不得延迟发送。
上述的读/写操作均是以多个数据相位为例来说明的。如果是一个数据相位,
FRAME#信号在没有等待周期的情况下,应在地址相位(读操作应在交换周期)过后即撤消。对于一个数据相位,中间亦可插入等待周期。
3)PCI总线传输的终止过程
无论是主设备还是从设备,都可以提出终止传输的要求,但不一定得到响应。也就是说,双方均无权单方面终止传输,而需要相互配合,但传输的最终停止控制要由主设备完成。
(1)由主设备引发的终止
主
设备是通过撤消FRAME#并建立IRDY#来提出终止请求的,这样做是为了通知从设备,现在己进入了传输周期中最后一个数据相位。此后,IRDY#一直
保持有效直到TRDY#信号有效,完成最后一个数据的传输。接着便撤消IRDY#,从而达到完全终止的条件(FRAME#和IRDY#同时无效),结束传
输,进入总线空闲状态。
主设备一般在下列情况下会提出终止传输:
①一次数据传输即将结束(剩下一个数据未传输)。
②总线上有更高优先级的总线占用请求,而总线仲裁器取消当前主设备的总线控制权(移去了GNT#信号)。
③主设备发出了FRAME#后在规定的时间内没有检测到目标设备的DEVSEL#响应信号。
(2)由从设备引发的终止
从
设备可以通过STOP#信号请求终止传输。一旦STOP#有效,就必须保持有效到主设备置FRAME#无效。IRDY#和TRDY#之间的关系与
STOP#和FRAME#之间的关系无关。所以,在从设备请求终止期间数据仍可以传送,这仅取决于当时IRDY#和TRDY#的状态。
从设备可由下面两种原因请求终止传输:
①从设备正处于不能传送数据的状态。例如,设备的数据缓冲器满,暂时不能接收数据,或者因数据缓冲器空而不能发送数据等。待传送条件满足后,重新启动传输。这种情况称为“重入(Retry)”。
②由于从设备的响应速度太慢,在PCI引导时间长度(8个时钟周期)不能作出响应以及在猝发传输中,从设备检测到下一个数据的地址已经超出规定的范围等原因而提出终止传输请求。此种情况称为“解除连接(Disconnect)”。