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相关资料
快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~
有建议、有需求、有疑问、联系我