3.5 PCI配置的实现机制,Type00和01


这是剖析PCIE协议的第16篇文章

内容简介

2024-01-08

    全文共1178字,阅读大约需要4分钟,

这是将是介绍PCI配置访问机制的最后一篇文章。在3.2 我们从整体上介绍了PCI的拓扑结构和组织形式,在3.3 我们从原理上介绍了PCI是如何了解自己的拓扑结构的,在3.4 我们介绍了BDF和配置空间,本节就在上述文章基础上介绍具体路由的实现机制。通过本文主要介绍内容如下:

1、为啥要有Type00和01两种配置请求

2、CFG_ADDR信息转换为Type01

3、CFG_ADDR信息转换为Type00

    了解这些也就了解了PCI的配置访问机制

01

为什么有type0和type1

    PCI总线定义了两种配置请求,一类是Type 00,一类是Type 01。为啥要用00和01表示呢?

这与PCI的访问机制有关具体会在下面展开

    1、总的来说HOST主桥或者PCI桥使用Type00配置请求访问与HOST主桥或者PCI桥相连的PCI设备或PCI桥,此时PCI桥作为一个PCI设备,接受访问其配置空间的读写请求。

    2、HOST主桥或者PCI桥使用Type 01配置请求,需要至少穿越一个PCI桥访问没有与其直接相连的PCI设备或PCI桥。   

    就比如上一节的这个图我们来讲。HOS主桥可以用Type00配置请求访问PCI设备01,但需要用Type01配置请求访问其它PCI设备,因为需要垮桥。

    HOST主桥判断采用何种配置请求的依据是目标设备的Bus Number,与HOST主桥直连的总线是Bus0,过一个桥就加一,所以当访问目标设备的总线不为0,用Type01配置请求,为0用Type00配置请求。

    CPU通过配置地址寄存器CFG_ADDR来确定目标PCI的地址,反映在物理连接上就是下图AD信号。HOST主桥收到后会将其转换为Type01或Type00类型,而且PCI桥会根据收到的地址信息来确定是否将其转换为Type00。


02

CFG_ADDR信息转换为Type01

    发出Type01配置请求的原因就是访问这边不在当前桥上,要穿桥搬运。如下图是CPU发出配置地址寄存器CFG_ADDR与Type01配置请求的对应关系。

    如下图是配置地址寄存器的各个字段的内容,可以收是照搬过去了,只是bit0设置为1表示是type01类型,bit31设置为0,也就是接下来不进行对PCI设备配置空间的读写。

    最终这个Type01类型的配置请求去到哪里则是根据携带的Bus Number与PCI桥或HOST桥的位置信息决定。

03

CFG_ADDR信息转换为Type00

    如下是CFG_ADDR是Type00类型的转换方式,Bus Number会被丢弃,因为肯定是该条总线下的了,所以没用了。Device Number会转换为地址值,映射到AD的bit31~bit11。Device是5bit,可以表示32个设备,但bit31~bit11只有21bit不够呀。然而PCI一条总线最多挂十来个,也就无所谓了

    例如Device为5,那么AD[15]就应该为1,那么如何与PCI设备相对应呢?这就需要另外一个信号叫IDSEL(Initialization Device Select),作用是告诉PCI设备,PCI总线上的传输是与之相关的。    

    PCI规范规定了设备号与IDSEL信号之间的映射关系。通常,PCI设备的设备号直接映射到相应插槽上的IDSEL信号。例如,设备号为0的设备可能与插槽上的IDSEL0信号相关联。

    IDSEL信号是PCI插槽中的一根引脚,通过PCI插槽和插入的卡(PCI设备)之间的电气连接来确定。每个插槽都有一个或多个IDSEL信号引脚,每个信号对应一个设备号。

    在PCI总线的初始化阶段,PCI主机会通过IDSEL信号选择要进行初始化配置的设备。这涉及在PCI配置周期中选择设备的IDSEL信号,并在总线上生成一个有效的地址。

    在PCI总线上可能连接有多个设备,每个设备都有唯一的设备号(Device Number)。IDSEL信号用于选择与之通信的特定PCI设备。当PCI主机希望与某个设备进行通信时,它会在总线上选择对应设备的IDSEL信号。

欢迎关注公众号领取PCIE相关资料







快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~

有建议、有需求、有疑问、联系我

<