1 三种路由方式
PCIe总线继承了PCI总线的地址路由和ID路由,并且添加了隐式路由。数据的传输要确定如何找到对方?所谓的路由就是如何找到对方。PCIe协议中有三种方式路由:
- 基于ID的路由:基于ID是指通过B D F 信息找到是设备。一般在配置过程
- 基于地址的路由:配置后,通过地址路由
- 隐式路由---例如某个pcie设备发送中断后,通过隐式路由发送给RC
TLP报文是如何表示自己使用哪种方式的路由?主要是TLP的头部。看哪一位?fmt三位和type的4位分别有什么含义??例如,如果是IORd IOWr是使用地址路由,对于配置读配置写就是通过ID路由,而对于MSI中断消息,就是使用隐式路由了(注意,下图可以发现当使用msg消息时,通过后三位确定是用什么方式发给RC,当然这些都是一些规则细节)。
访问PCIe设备时,要先配置,才能读写数据:
- 配置读、配置写:使用**基于ID的路由**,就是使用<Bus, Device, Function>来寻找对方。配置成功后,每个PCIe设备都有自己的PCIe地址空间了。
- 内存读、内存写或者IO读、IO写:
-
- 发出报文给对方:使用**基于地址的路由**
- 对方返回数据或者返回状态时:使用**基于ID的路由**
- 各类消息,比如中断、广播等:使用**隐式路由**