1.CPU如何访问PCI设备
1)配置。
a)扫描PCI设备,读取配置寄存器,获取设备种类以及设备所需要的空间
b)分配地址范围,并将这个地址范围写入PCI设备的配置寄存器
对于PCI总线,FRAM信号为底时的第一个时钟期间,AD总线传输的是地址,在后续的时钟里,传输的是数据。
IDSEL(初始化设备选择)引脚,想要配置某个设备时,通过这个引脚来选中他。不同的桥,选中IDSEL的方式可能不同,例如,使用不同的AD引脚来连接不同设备的IDSEL引脚,以达到选中不同的设备的效果。
2)怎么访问PCI设备的配置寄存器
TYPE0(非桥设备)的配置空间如下图。
对于一个PCI设备,最多可以有8种功能,对于每种功能有256字节的配置寄存器。
通过IDSEL可以选中PCI设备,那么怎么选中这个设备的某个功能呢?又怎么选中这个功能的某个寄存器呢?TYPE0设备地址主句的格式如下图:
1)通过IDSEL选中设备
2)在ADDRESS[31::0]地址数据中,指定功能,指定寄存器
3)使用C/BE[3::0]这几个引脚来确定是读还是写
4)Get Data,包括设备种类,设备所需要的空间等
5)将分配好的地址范围写会设备
通过以上5个步骤,这个设备就被配置好了。配置好后设备寄存器里会记录自己的地址范围。后面,CPU发出的地址就会被转换为PCI空间的地址,设备发现这个地址属于自己地址空间范围内的地址时就会回应CPU。