PCI/PCIe 的那些事(1)- 总线基本知识
2016-01-05 21:46
1176 查看
PCI 总线
PCI: 周边组件互联局部总线 (Peripheral Component Interconnect Local Bus)1992年,Intel发布了PCI 1.0规范, 用于替代老的ISA总线。PCI总线的产生主要解决了ISA总线的以下几个缺点:
总线容量不够
地址宽度不够
不支持即插即用
PCI采用的是树型拓扑结构,每一个PCI device相当于树的一个结点或者叶子,对整个PCI Bus的遍历可以采用遍历树的算法,在对树进行遍历之后,可以获得整个PCI Bus的资源需求情况,从而进行统一的分配。任何一下结点的损坏也不会造成整个树的崩溃,因而具有鲁棒性。
电气信号
第一组:系统信号, 时钟信号(CLK)和复位信号(PCIRST#)第二组:地址/数据,命令/使能信号
第三组:传输控制信号,FRAME#, TRDY#, IRDY#, STOP#, DEVSEL#, IDSEL
第四组:仲裁请求和仲裁允许, REQ#, GNT#
第五组:终端信号
第六组:错误校验信号
第七组:PCI64扩展信号
总线操作
PCI总线操作的一具典型的特点就是支持BURST传输。什么是BURST传输呢?首先你得知道PCI的数据总线和地址总线是复用的。这就是说在同样的总线上,一段时间是地址,一段时间是传输数据。如果没有BURST传输,那么完成一次数据传输之前都得发一次地址,这就是总线有一半的时间都在传地址,这使得总线和利用率很低。有了BURST传输,可以先发一个起始地址和数据长度N, 之后传输数据0~N-1就可以直接发数据,不用再发地址了。PCI总线典型操作分为两部分:
地址相, 当FRAME#有效时,C/BE#上面出现4位交易码,AD上面是地址数据数据相,当DEVSEL#有效时,AD上面出现传输数据
PCI总线的具体交易过程如下:
主设备发起#REQ, 申请总线的使用权得到仲裁允许,#GRT
FRAME#信号拉低,交易地址放入AD, 交易码放入C/BE#
如果从设备就在这个总线上,那么地址译码成功后,从设备会把DEVSEL#拉低,就可以开妈传输数据了
如果从设务不是直接连在总线上,而是跨过了PCI-PCI bridge。那么bridge就会启动一个请求重传的机制。即通过控制信号通知主设备重试,在此同时将自己作为主设备向下一级总线转发上级总线的交易请求,这样,当下一次主设备再次发起交易的时候,bridge上面已经有了从设备获取来的数据,交易就可以正常进行了。
相关文章推荐
- 多用字面量语法,少用与之等价的方法
- UE4 服务器同步
- AngularJS学习笔记
- 【Spring 基础篇二】IoC容器的两种注入方式
- [LeetCode]Merge Sorted Array
- MongoDB 基础命令使用学习记录
- 大作业第一天
- scala 对大数据量排序求中位数 lookup方法
- 机器学习算法与Python实践之(三)支持向量机(SVM)进阶
- 触发器的整理:包括Instead of和After
- 机器学习算法与Python实践之(二)支持向量机(SVM)初级
- Intellij IDEA 导入项目中文乱码
- 判断临时表是否存在,存在则删除
- 学习笔记 - 面试题Checklist
- 单链表
- 【HDU 4925】BUPT 2015 newbie practice #2 div2-C-HDU 4925 Apple Tree
- java.lang.NoClassDefFoundError: org/uncommons/maths/random/MersenneTwisterRNG解决方法参考
- Android起航系列第一章:Android手机APP起航
- 【ThinkPHP3.2.3】学习ThinkPHP笔记:框架中的配置文件(3)
- 【杭电oj】1879 - 继续畅通工程(最小生成树)