天天看点

PCI 总线操作二: bus transaction

PCI总线协议中定义总线传输主要讲述的ReadTransaction 和Write Transaction的总线操作。

1、  Read Transaction

如下图所示,Read transaction 是从FRAME#宣告之后,马上开始寻址阶段,在clock2的时候发生。在寻址阶段,AD[31:00]包含可用的地址,C/BE[3:0]#包含可用的bus command。

PCI 总线操作二: bus transaction

而数据阶段的第一clock是clock3,。在数据阶段,C/BE#表示当前数据阶段哪个byte lane响应了,一直要保持到当前transaction结束。数据阶段中可以包含wait cycles。从时序图可以看到,当IRDY#或者TRDY#出现拉高的时候,总线会出现wait cycle。这可以使master来发出也可以是target完成。

Read transaction的第一个数据阶段需要一个回转周期(有target控制TRDY#来完成)。而寻址是在clock2的时候完成,随后master会停止驱动AD线。Target最早提供有效数据是在clock4的时候,target必须在DEVSEL#宣告之后,再进过一个回转周期,马上驱动AD线来完成数据传输。

数据的完整传送要在pci的一个上升沿的时候,同时宣告IRDY#和TRDY#。(注意,DEVSEL#没有宣告的时候TRDY#是不能被宣告的,因为此时Device没有被选中)。而当IRDY#或者TRDY#其中只要有一个没有宣告,则总线处于wait cycle,没有数据会传送。

最后,只有IRDY#被宣告了,FRAME#才能被deasserted,表示要告知target,当前数据是最后一个数据阶段。

2、  Write Transaction

同Read transaction原理一样,整个周期从FRAME#的宣告开始算起,如图中的clock2的时候。不过有一处和Read transaction有区别,Write传输在address phase之后没有回转周期,因为寻址动作和数据都是master发出来的。

PCI 总线操作二: bus transaction

如上图中,第一个data phase和第二个data phase中间没有wait cycles发生。但是在第三个data phase中target插入了三个wait cycles。图中时序clock5处表示master和target都产生了一个wait cycles。对于IRDY#来说,在最后要在FRAME#被deasserted的时候必须被asserted,以表示最后的data phase了。

继续阅读