打印

初看PCI总线协议有许多不懂的地方求前辈指教

[复制链接]
2739|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rt,想diy个PCI接口的主板诊断卡,但是初看PCI遇到不少问题,特来求教。主板诊断卡就是插在PCI插槽上,读取CPU的IO地址80H处的内容(post code)来检测电脑自检是停在哪一步出错的。
因此需要了解如何通过PCI总线读取CPU的IO地址80H处的内容。


如上图所示,我初读协议的理解是:
不同PCI设备之间的IDSEL连接到AD[31:11]中的一根,这样在读写配置空间时可以通过这个片选信号确定响应的PCI设备,
然后通过读取配置空间的基址寄存器(貌似这个在2.2版本里没有,这样就完全不知道怎么做了。。),以确定某个PCI设备的IO空间地址或存储空间地址
但是如果要访问CPU的80H地址的话,由于不知道CPU的PCI接口的IDSEL接什么,就没法知道相应的IO地址了,也就没法进行IO读操作。
求前辈指教,插在PCI插槽上的设备怎么读取CPU的IO地址80H处的内容?标准PCI和2.2版本读取有什么区别吗?

相关帖子

沙发
zepanwucai|  楼主 | 2012-1-31 16:54 | 只看该作者
今天又看了下电脑开机过程,发现PCI设备分配地址是在通电自检之后的,那为什么在这之前PCI总线可以传输数据呢?

使用特权

评论回复
板凳
forgot| | 2012-1-31 20:58 | 只看该作者
PCI 规范系列文档总共定义了三种方法让CPU 通过Host/PCI 桥在PCI 总线上启动配置空间访问事务,这三种方法是:(1)配置机制#1,即Host/PCI 桥将CPU 对Host/PCI 桥设备的配置地址端口0xcf8 和配置数据端口0xcfc 的访问转换为桥后PCI 总线上的配置空间访问事务。这也是PCI Specification 2.2 所定义的唯一方法。(2)配置机制#2。这是早期PCI 规范所定义的方法,在PCI Specification 2.2 中已经被去除。(3)通过PCI BIOS 提供的服务来访问配置空间。我主要介绍一下最最常用的第一种方法。

对于PC-AT compatible System,可以通过两个I/O端口来操作,CONFIG_ADDRESS(CF8h),CONFIG_DATA(CFCh)(都是32位的),通过给CONFIG_ADDRESS写如下命令字


  

  

Bus Number选择是那个PCI总线,Device Number选择这个总线上的那个设备,Function Number选择这个设备上的那个子设备(称作功能),host-bridge会通过以上信息选择正确的pci设备(置高正确的IDSEL引脚),然后给这个pci设备发送configuration read/write(可以参考PCI总线规范,PCI总线上一共有三种不同读写类型的命令,IO,MEMORY,CONFIG,具体的做法是通过在给PCI设备传送地址的时候C/BE[3:0]引脚上的值来决定到底是什么命令的,随后是data circle) 命令读取配置空间相应的Register Number处的Dword值到CONFIG_DATA端口上。


这个我也不太清楚,这是我复制来的,不知道有没有用:handshake

使用特权

评论回复
地板
zepanwucai|  楼主 | 2012-1-31 21:55 | 只看该作者
3# forgot 多谢了,虽然貌似没有用的样子。。
我今天查的结果是,存放post code的80H地址是固定的,不用向其他设备一样进行重定位。
现在的疑问是,BIOS对IO空间的写操作是否会通过所有总线反映出来(因为各种接口的主板诊断卡都有)?
所有总线在电源稳定后就立即能开始工作了吗?
BIOS对IO空间的写操作是通过什么途径进行的?南桥芯片在其中是如何工作的呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

180

帖子

6

粉丝