1、引脚

必要的引脚在左边,任选的引脚在右边



2、CLK in:时钟输入,为所有PCI上的接口传送提供时序。其频率也称为PCI的工作频率。

大部分信号都在CLK的上升沿有效

3、AD0~AD31 t/s:地址、数据多路复用的输入/输出信号。在FRAME#有效时,是地址周期;在IRDY#和TRDY#同时有效时,是数据周期。

一个PCI总线的传输中包含了一个地址周期和多个数据周期。

地址周期为一个时钟周期,在该周期中AD0~AD31线上含有一个32位的物理地址。对于I/O操作,它是一个字节地址;若是存储器操作和配置操作,则是双字地址。

数据周期, AD0~AD7为最低字节, AD24~AD31为最高字节。当IRDY#有效时,表示写数据稳定有效,TRDY#有效表示读数据稳定有效 。

4、C/BE 0~3#  t/s:总线命令和字节使能 多路复用信号线。

在地址周期内,这四条线上传输的是总线命令;

在数据周期内,传输的是字节使能信号,用来表示在整个数据期中, AD0~AD31上哪些字节为有效数据。

5、PCI定义了三个物理地址空间:存储器地址空间、I/O地址空间和配置地址空间,

前两个是一般总线都有的空间;第三个是用以支持PCI硬件配置的特殊空间。

PCI总线的编址是分布式的,每个设备都有自己的地址译码,从而省去了中央译码逻辑。

PCI支持两种设备地址译码:正向译码和负向译码。所谓正向译码就是每个设备都监视地址总线上的访问地址是否落在它范围内,因而速度较快。而负向译码是指该设备要接受未被其他设备在正向译码中接受的所有访问,因此,码方式只能由总线上的一个设备来实现。由于它要等到总线上其他所有设备都拒绝之后才能译码,所以速度较慢,负向译码对于标准扩展总线这类设备是很有用的,因为这类设备必须响应一个很零散的地址空间。正和反向译码设备都不对保留的总线命令发出DEVSEL#响应信号。

6、在I/O访问中, 全部32位AD线都被用来提供一个完整的地址编码(字节地址)。AD0~AD1这两位很重要,并要与C/BE0~3配合,才能进行一次有效的访问。

AD BE(1111) 起始字节

00 xxx0 字节0

01 xx01 字节1

10 x011 字节2

11 0111 字节3

7、在存储器访问中,所有的目标设备都要检查AD0~AD1,要么提供所要求的突发传输顺序,或者执行设备断开操作。对于所有支持突发传输的设备都应能实现线性突发性传输顺序,用AD2~AD31译码得到一个双字地址的访问。

在存储器访问期间,AD0AD1用来指明主设备要求的数据传输模式 ,含义如下:     

当AD[1~0]为00时,突发传输顺序为线性增长模式; 在线性增加模式下,每个数据相位后,地址增加一个双字(即加4,对32位传输)或增加两个双字(即加8,对64位传输),直到传输结束。

AD[1~0]为01时,为高速缓存行切换模式; 

AD[1~0]为10时,为CACHE行回卷模式; 

AD[1~0]为11时,为保留模式。

在存储器地址空间,AD[31~2]提供一个双字边界地址,而AD[1—0]不参与地址译码。

8、在配置的地址空间中,要用AD2~AD7将访问落实到一个DWORD地址寻址64个双字寄存器。当一个设备收到配置命令时,IDSEL信号成立且AD0AD1为00,则该设备即被选为访问的目标。否则就不参与当前的对话。如果译码出来符合某桥路的编号,且AD0AD1为01,则说明配置访问是对该桥后面的设备,即不与桥直接连接的设备。

9、字节使能信号C/BE# 0~3来指出哪些字节带了有意义的数据,在每个数据周期内,可以自由改变字节能,使之对传输数据的实际含义和有效部分进行界定,

这一功能称作字节校正或字节对齐。

10、为了避免多个设备同时驱动一个信号到PCI总线上而产生竞争,在一个设备驱动到另一个设备之间设个过渡期,又称为交换周期。在时序图上,交换期用"→←"来表示。

在每个地址周期和数据周期,所有的AD线都必须被驱动到稳定的状态(数据),即使是在当前数据传涉及到的字节所对应的AD线也不例外。在实际应用中,如果对功耗要求较高时,为尽量减少总线上的功耗,对当前总线周期中不用的字节用与前一周期相同的数据去驱动它们。

11、PCI总线上的读操作

PCI协议 总结的更多相关文章

  1. linux pci 协议一

    当当热卖商品推荐 先打下广告,上面是一本好书了O(∩_∩)O~ 前言 因为遇到一个pci总线的问题,所以去学习了解linux 的pci驱动,中间总结了一些pci总线原理和linux驱动的知识,在此总结 ...

  2. linux驱动---用I/O命令访问PCI总线设备配置空间

    PCI总线推出以来,以其独有的特性受到众多厂商的青睐,已经成为计算机扩展总线的主流.目前,国内的许多技术人员已经具备开发PCI总线接口设备的能 力.但是PCI总线的编程技术,也就是对PCI总线设备的操 ...

  3. linux驱动之一语点破天机

    <const 关键字> 在嵌入式系开发中,const关键字就是“只读”的意思   <为什么要ARM需要进行C语言环境的初始化> 在汇编情况下,指令的跳转,保护现场需要保存的数据 ...

  4. 000 PCI Express协议入门指南目录

    一.001 PCI Express体系结构(一)

  5. 基于WDF的PCI/PCIe接口卡Windows驱动程序(1)-WDF概述及开发环境搭建

    原文出处:http://www.cnblogs.com/jacklu/p/4619110.html 本科毕业设计是这方面的工作,所以想开几篇博客来介绍使用WDF开发PCI/PCIe接口卡的驱动程序方法 ...

  6. 系统虚拟化学习笔记——PCI设备

    内容摘自<系统虚拟化:原理与实现> PCI 总线架构 PCI总线是典型的树结构.把北桥中host-PCI桥看做根,总线中其他PCI-PCI桥,PCI-ISA桥(ISA总线转PCI总线桥)等 ...

  7. Linux PCI网卡驱动的详细分析

    学习应该是一个先把问题简单化,在把问题复杂化的过程.一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉.读Linux网卡驱动也是一 样.那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏 ...

  8. PCI 总线学习笔记

    转载请注明出处:http://blog.csdn.net/lg2lh/article/details/8042008 PCI的基本协议这里就不介绍了,由于一般的芯片协议都是集成好的,我仅仅须要大体了解 ...

  9. 开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等

    在上篇随笔<基于微信小程序的系统开发准备工作>介绍了开发微信小程序的一些前期的架构设计.技术路线 .工具准备等方面内容,本篇随笔继续这个步骤,逐步介绍我们实际开发过程中对SSL协议的申请及 ...

随机推荐

  1. Linux忘记Root密码怎么找回

    进入1级别,单用户模式 ,修改root密码即可(运行级别不懂看这里) 具体操作如下: 1.开机时按enter键 2.进入GRUB界面 3.输入 e,在引导系统前编辑命令 4.选择第二行 kernel ...

  2. Oracle - Trunc() 函数截取日期&截取数值

    Oracle TRUNC函数可以截取数字和日期类型:截取日期:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; --显示当前时间 s ...

  3. Linux基础:子网划分

    一.ip地址基本知识 1.1 ip地址的结构和分类 1.2 特殊ip地址 1.3 子网掩码 1.4 ip地址申请 二.子网划分 2.1 子网划分概念 2.2 c类子网划分初探 2.3 子网划分步骤 2 ...

  4. 从浅入深掌握并发执行框架Executor

    引言 任务的执行 大多数并发应用程序都是围绕"任务执行(Task  Execution)"来构造的:任务通常是一些抽象的且离散的工作单元. 任务通常是一些抽象的且离散的工作单元.通 ...

  5. nginx负载均衡初体验

    本例采取简单的轮询策略进行nginx的负载均衡处理. 在反向代理(参考:https://www.cnblogs.com/ilovebath/p/14771571.html)的基础上增加负载均衡处理的n ...

  6. SIMD编码/解码

    在看SEAL库和HElib库中经常在编码中碰到打包(batch)技术,另外还提到了SIMD编码技术,有点困惑,编码.打包.SIMD到底有什么关系? 编码 在CKKS方案中,因为明文空间在复数域上,简单 ...

  7. 记一次慢查询优化sql

    sql语句优化(慢查询日志) 最近,旧系统向新系统迁移工程刚刚结束.开发完成后,测试阶段也是好好休息了一把.接到一个需求,由于内部员工使用的网站部分功能加载时间很长,所以需要去优化系统的一些功能.大致 ...

  8. 「BUAA OO Pre」 Pre 2总结回顾概览

    「BUAA OO Pre」 Pre 2总结回顾概览 目录 「BUAA OO Pre」 Pre 2总结回顾概览 Part 0 前言 写作背景 定位 您可以在这里期望获得 您在这里无法期望获得 对读者前置 ...

  9. C#析构函数(方法)

    析构方法是在垃圾回收.释放资源时使用的.析构函数用于析构类的实例.备注:    不能在结构中定义析构函数.只能对类使用析构函数.    一个类只能有一个析构函数.    无法继承或重载析构函数.    ...

  10. 释放linux内存中的cache缓存

    echo 3 > /proc/sys/vm/drop_caches 记一次 经常用  exp 导出oracle全量数据库,发现linux内存一直在减小没有释放,即使 oracle重启也不行,只有 ...