精华内容
下载资源
问答
  • PCI总线

    千次阅读 2019-08-09 14:31:54
    PCI 总线介绍 外围部件互连总线PCI (Peripheral Component Interconnect) 总线,是一种先进的高性能32/64 位地址数据复 用局部总线,可同时支持多组外围设备,为中央处理器与高速外围设备提供了一座沟通的桥梁,是...

    PCI 总线介绍

    外围部件互连总线PCI (Peripheral Component Interconnect) 总线,是一种先进的高性能32/64 位地址数据复

    用局部总线,可同时支持多组外围设备,为中央处理器与高速外围设备提供了一座沟通的桥梁,是现在PC

    领域中流行的总线。本文重点介绍UEFI 规范如何支持PCI 总线,以及UEFI 固件中PCI 总线驱动的实现 。

          BIOS 对于PCI 总线的支持包括以下三个方面:

    1.        提供分配PCI 设备资源的协议(Protocol)
    2.        提供访问PCI 设备的协议(Protocol)。
    3.        枚举PCI 总线上的设备以及分配设备所需的资源 。

    UEFI BIOS 如何支持PCI 总线及设备

           UEFI BIOS 提供了两个主要的模块来支持PCI 总线,一个是PCI Host Bridge 控制器驱动,另一个是

    PCI 总线驱动。 

           PCI Host Bridge  控制器驱动是跟特定的平台硬件绑定的,根据系统实际IO 空间和memory map, 为PCI

    设备指定I/O 空间和Memory 空间的范围,并且产生PCI Host Bridge Resource Allocation 协议(protocol)

    供PCI 总线驱动使用。该驱动还对HostBridge控制器下所有RootBridge 设备产生句柄(Handle), 该句柄上

    安装了PciRootBridgeProtocol . PCI 总线驱动则利用PciRootBridgeIo Protocol 枚举系统中所有PCI 设备,发

    现并获得PCI 设备的Option Rom, 并且调用PCI Host Bridge Resource Allocation 协议对PCI Host

    Bridge Controller 进行编程。

     

    针对 UEFI 规范定义了PCI Root Bridge I/O 协议(Protocol),该协议抽象了访问RootBridge设备

    下所有PCI 设备的接口。PCI HostBridge Controller 产生一个或者多个PCI RootBridge设备,

    PCI RootBridge设备又产生了PCI Local Bus. Host Bridge controller 是一个计算机北桥上的硬件

    组件,通过它可以访问共享PCI I/O 和Memory 空间和配置空间进行访问。它支持对设备进行DMA

    操作。PCI 设备驱动不会使用PCI Root Bridge I/O 协议访问PCI 设备,而是会使用PCI总线驱动

    为PCI 设备产生的PCI IO Protocol 来访问PCI IO/MEMORY 空间和配置空间,PCI Root Bridge

    I/O 协议是安装在RootBridge 设备的句柄上(handle), 同时该handle 上也会有表明RootBridge设备

    的DevicePath 协议(Protocol) , 如下图所示:

     

    下图是一个简单的PCI 系统,该系统有一个PCI HostBridge 设备和一个Root Bridge 设备,

    RootBridge 设备又产生了PCI 总线。UEFI BIOS 对该系统会产生一个PCI Root Bridge I/O Protocol

     

    根据实际中不同的PCI 系统设计,一个HostBridge 设备下面可以有多个RootBridge 设备。如果

    系统中有n个Root Bridge 设备,则有n个PCI Root Bridge I/O Protocol 实例。

    对于一个RootBridge设备下的PCI 总线上的所有的PCI 设备,它们必然会共享PCI I/O 和Memory 空间。

     

    HostBridgeController 驱动产生了两个Handle

    一个是RootBridge Handle,该RootBridge handle 表明当前HostBridge 下面某一个Root Bridge 设备。

    在它上面安装了PciRootBridgeIoProtocol 和DevicePathProtocol.

    另一个是HostBridge handle , 在它上面安装了PciHostBridgeResourceAllocationProtocol,统一管理

    和分配 HostBridge 下所有PCI 设备的资源。

     

    PCI Host Bridge 控制器驱动

    PciHostBride 用来初始化PCI HostBridge 控制器,是PCI 总线驱动的基础。PciHostBridge 驱动

    包括以下两个方面:

    提供管理和分配PCI 设备资源的协议(PciHostBridgeResourceAllocationProtocol)

    提供访问PCI 设备的配置空间,MMIO/IO 空间的协议(PciRootBridgeIoProtocol).

     

    NotifyPhase 函数

    提供了PCI总线驱动枚举和资源分配中的钩子函数,可以插入任何平台实现相关的代码。例如当PCI总线

    如当PCI 总线驱动将要为某个RootBridge 设备下所有PCI 设备分配资源时,PCI 总线驱动调用

    EfiPciHostBridgeAllocateResources 通知PciHostBridge 驱动分配总的内存空间,供PCI 总线驱动使用。

    typedef struct {
      UINTN                                             Signature;
      EFI_HANDLE                                        Handle;
      LIST_ENTRY                                        RootBridges;
      BOOLEAN                                           CanRestarted;
      EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  ResAlloc;
    } PCI_HOST_BRIDGE_INSTANCE;

     

    从这个结构体可以看出,host bridge 下面挂着root bridge.

    已知

      EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  ResAlloc; 的地址, 就可以算出

    HostBridge 的地址。

     

    StartBusEnumeration 函数

     

      for (Link = GetFirstNode (&HostBridge->RootBridges)
           ; !IsNull (&HostBridge->RootBridges, Link)
           ; Link = GetNextNode (&HostBridge->RootBridges, Link)
           ) {
        RootBridge = ROOT_BRIDGE_FROM_LINK (Link);
        if (RootBridgeHandle == RootBridge->Handle) {
          *Configuration = AllocatePool (sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));
          if (*Configuration == NULL) {
            return EFI_OUT_OF_RESOURCES;
          }

          Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) *Configuration;
          Descriptor->Desc                  = ACPI_ADDRESS_SPACE_DESCRIPTOR;
          Descriptor->Len                   = sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3;
          Descriptor->ResType               = ACPI_ADDRESS_SPACE_TYPE_BUS;
          Descriptor->GenFlag               = 0;
          Descriptor->SpecificFlag          = 0;
          Descriptor->AddrSpaceGranularity  = 0;
          Descriptor->AddrRangeMin          = RootBridge->Bus.Base;
          Descriptor->AddrRangeMax          = 0;
          Descriptor->AddrTranslationOffset = 0;
          Descriptor->AddrLen               = RootBridge->Bus.Limit - RootBridge->Bus.Base + 1;

          End = (EFI_ACPI_END_TAG_DESCRIPTOR *) (Descriptor + 1);
          End->Desc = ACPI_END_TAG_DESCRIPTOR;
          End->Checksum = 0x0;

          return EFI_SUCCESS;
        }
      }

      return EFI_INVALID_PARAMETER;
    }

    根据总线起始编号和最大编号,构建EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR

    供PCI 总线驱动使用。

     

    SetBusNumbers 函数

    更新当前RootBridge 实际总线编号的范围。

          //
          // Update the Bus Range
          //
          RootBridge->ResAllocNode[TypeBus].Base    = Descriptor->AddrRangeMin;
          RootBridge->ResAllocNode[TypeBus].Length  = Descriptor->AddrLen;
          RootBridge->ResAllocNode[TypeBus].Status  = ResAllocated;
          return EFI_SUCCESS;
        }

     

    更新当前RootBridge 设备的总线资源类型的实际大小和范围。

    PCI 总线驱动

     

    PCI_IO_DEVICE 数据结构

    当PCI 总线发现一个PCI设备,就创建PCI_IO_DEVICE 数据结构与之对应。

    PCI_IO_DEVICE 每个域含义如下,

    struct _PCI_IO_DEVICE {
      UINT32                                    Signature;
      EFI_HANDLE                                Handle;
      EFI_PCI_IO_PROTOCOL                       PciIo;
      LIST_ENTRY                                Link;

      EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL PciDriverOverride;
      EFI_DEVICE_PATH_PROTOCOL                  *DevicePath;
      EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *PciRootBridgeIo;
      EFI_LOAD_FILE2_PROTOCOL                   LoadFile2;

      //
      // PCI configuration space header type
      //
      PCI_TYPE00                                Pci;

      //
      // Bus number, Device number, Function number
      //
      UINT8                                     BusNumber;
      UINT8                                     DeviceNumber;
      UINT8                                     FunctionNumber;

     

    定义 数据结构的标示为PCI_IO_DEVICE_SIGNATURE,当用CR 宏根据另一个域Link

    的地址得到PCI_IO_DEVICE 的地址时,该标示用来做进一步的检查,确认是PCI_IO_DEVICE 结构。

     

    PCI 设备的句柄(Handle). 该句柄上安装了标示该PCI 设备位置信息的Device Path 协议(

    EfiDevicePathProtocol) , 用于访问该PCI 设备的PCI IO 协议以及LoadFile 协议。

     

    LIST_ENTRY                                Link;

    Link 用于该PCI 设备挂在桥设备的ChildList 上。可以用桥设备的

     

    PciBusDriver 关键函数解析

    PciBusDriverBindingStart 函数

    当对PCIRootBridge 设备Handle 或者DevicePath进行Connect, PCI 总线驱动就会开始执行。

    PcibusDriverBindingStart()开始对当前RootBridge 进行PCI 总线设备枚举和资源分配。

    Controller handle 表明Host Bridge Controller 下面某一个RootBridge 设备。

        if (!EFI_ERROR (Status)) {
          Status = PciEnumerator (Controller, PciRootBridgeIo->ParentHandle);
        }
      } else {
        //
        // If PCI bus has already done the full enumeration, never do it again
        //
        Status = PciEnumeratorLight (Controller);
      }

      if (EFI_ERROR (Status)) {
        return Status;
      }

      //
      // Start all the devices under the entire host bridge.
      //
      StartPciDevices (Controller);

     

    PciEnumerator 函数

    注意: 以下提到的HostBridge Controller 均指当前PCI 总线驱动管理的RootBridge 所属的HostBridge controller.

     

     

      //
      // Get the pci host bridge resource allocation protocol
      //
      Status = gBS->OpenProtocol (
                      HostBridgeHandle,
                      &gEfiPciHostBridgeResourceAllocationProtocolGuid,
                      (VOID **) &PciResAlloc,
                      gPciBusDriverBinding.DriverBindingHandle,
                      Controller,
                      EFI_OPEN_PROTOCOL_GET_PROTOCOL
                      );


    获得当前PCI 总线驱动管理的RootBridge 的PciRootBridgeIoProtocol.

      //
      // Get the pci host bridge resource allocation protocol
      //
      Status = gBS->OpenProtocol (
                      HostBridgeHandle,
                      &gEfiPciHostBridgeResourceAllocationProtocolGuid,
                      (VOID **) &PciResAlloc,
                      gPciBusDriverBinding.DriverBindingHandle,
                      Controller,
                      EFI_OPEN_PROTOCOL_GET_PROTOCOL
                      );

      if (EFI_ERROR (Status)) {
        return Status;
      }

     

    获得该HostBridge Controller 的PciHostBridgeResourceAllocationProtocol, 用来分配该HostBridge controller

    下所有RootBridge 产生的PCI 总线上的PCI 设备资源 。

      //
      // Notify the pci bus enumeration is about to begin
      //
      Status = NotifyPhase (PciResAlloc, EfiPciHostBridgeBeginEnumeration);

    通知platform PCI 总线枚举即将开始,调用platform 提供的钩子函数。

     

    PCI 总线驱动对Option ROM 的支持

    GetOpRomInfo函数

    GetOpRomInfo 获得PCI 设备OpRom的大小。

      //
      // Offset is 0x30 if is not ppb
      //

      //
      // 0x30
      //
      RomBarIndex = PCI_EXPANSION_ROM_BASE;

      if (IS_PCI_BRIDGE (&PciIoDevice->Pci)) {
        //
        // If is ppb, 0x38
        //
        RomBarIndex = PCI_BRIDGE_ROMBAR;
      }

     

    RomBarIndex 是PCI 设备配置空间中Expansion ROM Base Address 寄存器,该域在

    PCI 设备的配置空间中偏移是0x30, Bridge 设备的配置空间中偏移是0x38. 该寄存器可以

    用来得到该PCI 设备的Option Rom的大小,并且当一个MMIO 地址写入该寄存器后,

    可以从该MMIO 地址读出PCI 设备的Option Rom .

      AllOnes = 0xfffffffe;
      Address = EFI_PCI_ADDRESS (Bus, Device, Function, RomBarIndex);

      Status = PciRootBridgeIo->Pci.Write (
                                      PciRootBridgeIo,
                                      EfiPciWidthUint32,
                                      Address,
                                      1,
                                      &AllOnes
                                      );
      if (EFI_ERROR (Status)) {
        return EFI_NOT_FOUND;
      }

      //
      // Read back
      //
      Status = PciRootBridgeIo->Pci.Read(
                                      PciRootBridgeIo,
                                      EfiPciWidthUint32,
                                      Address,
                                      1,
                                      &AllOnes
                                      );
      if (EFI_ERROR (Status)) {
        return EFI_NOT_FOUND;
      }

      //
      // Bits [1, 10] are reserved
      //
      AllOnes &= 0xFFFFF800;
      if ((AllOnes == 0) || (AllOnes == 0xFFFFF800)) {
        return EFI_NOT_FOUND;
      }

      PciIoDevice->RomSize = (~AllOnes) + 1;
      return EFI_SUCCESS;
    }

    向PCI 配置空间的Expansion ROM Base Address 写入全1。

     

    构建PCI 配置空间的Expansion ROM Base Address 地址。

    向Expansion ROM Base Address 写入全1

    去除低10位的保留位,然后取反加1,得到该PCI 设备的Option ROM 的大小。

    505

     

    展开全文
  • pci总线

    千次阅读 2014-12-22 17:18:46
    pci总线 一、总线是一种传输信号的信道;总线是连接一个或多个导体的电气连线。总线由电气接口和编程接口组成,我们重点关注编程接口。 二、PCI是Peripheral Component Interconnect(外围设备...
    原创:kylin_zeng http://blog.163.com/kylin_fire 参考国嵌教育
    pci总线
    一、总线是一种传输信号的信道;总线是连接一个或多个导体的电气连线。总线由电气接口和编程接口组成,我们重点关注编程接口。

    二、PCI是Peripheral Component Interconnect(外围设备互联)的简称,是在桌面及更大型的计算机上普遍使用的外设总线。

    三、PCI总线具有三个非常显著的优点:
    1)在计算机和外设间传输数据时具有更好的性能
    2)能够尽量独立于具体的平台
    3)可以方便地实现即插即用

    四、体系结构
    从结构上看,PCI总线是一种不依附于某个具体处理器的局部总线,它是在CPU和原来的系统总线之间插入的一级总线,具体由一个桥接电路实现对这一层的管理,并实现上下之间的接口以协调数据的传送系统的各个部分通过PCI总线和PCI-PCI桥连接在一起。CPU和RAM通过PCI桥连接到PCI总线0(即主PCI总线),而具有PCI接口的显卡直接连接到主PCI总线上。PCI-PCI桥是一个特殊的PCI设备,它负责将PCI总线0和PCI总线1连接在一起。图中连接到PCI 1号总线上的是SCSI卡和以太网卡。为了兼容旧的ISA总线标准,PCI总线还可以通过PCI-ISA桥来连接ISA总线,从而支持以前的ISA设备,图中ISA总线上连接着一个多功能I/O控制器,用于控制键盘、鼠标和软驱等
    PCI总线 - 731439229 - linux的轨迹
     
    五、设备寻址:
    PCI设备寻址:每个PCI设备由一个总线号、一个设备号、和一个功能号确定。PCI规范允许一个系统最多拥有256条总线,每条总线最多带32个设备,但每个设备可以是最多8个功能的多功能板(如一个音频设备带一个CD-ROM驱动器)。/proc/iomem描述了系统中所有的设备I/O在内存地址空间上的映射。我们来看地址从1G开始的第一个设备在
    /proc/iomem中是如何描述的:40000000-400003ff : 0000:00:1f.1这是一个PCI设备,40000000-400003ff是它所映射的内存空间地址,占据了内存地址空间1024 bytes的位置,而0000:00:1f.1则是这个PCI外设的地址,它以冒号和逗号分隔为4个部分,第一个16位表示域,第二个8位表示一个总线号,第三个5位表示一个设备号,最后是3位,表示功能因为PCI规范允许单个系统拥有最多256条总线,所以总线编号是8位。每个总线上可支持32个设备,所以设备号是5位,而每个设备上最多可有8种功能,所以功能号是3位。由此,由此可以得出上述的PCI设备的地址是0号总线上的31号设备上的1号功能使用lspci命令可以查看系统中的PCI设备,下面是使用lspci命令得到的一组输出: (练习:分析该数据后画出系统的PCI结构图)
    00:00.0 Host bridge: Intel Corporation 82845 845 
    00:01.0 PCI bridge: Intel Corporation 82845 845 
    00:1d.0 USB Controller: Intel Corporation 82801CA/CAM USB 
    00:1d.1 USB Controller: Intel Corporation 82801CA/CAM USB 
    00:1e.0 PCI bridge: Intel 82801 Mobile PCI Bridge 
    00:1f.0 ISA bridge: Intel Corporation 82801CAM ISA Bridge 
    00:1f.1 IDE interface: Intel Corporation 82801CAM IDE U100
    00:1f.3 SMBus: Intel 82801CA/CAM SMBus Controller 
    00:1f.5 Multimedia audio controller:Intel Corporation 82801CA/CAM AC'97 Audio Controller 
    00:1f.6 Modem: Intel 82801CA/CAM AC'97 Modem Controller 
    01:00.0 VGA compatible controller: nVidia Corporation NV17
    02:00.0 FireWire: VIA Technologies. 1394 Host Controller
    02:01.0 Ethernet controller: Realtek Semiconductor Co. 
    02:04.0 CardBus bridge: O2 Micro, Inc. Cardbus Controller 
    02:04.1 CardBus bridge: O2 Micro, Inc. Cardbus Controller 
    PCI总线 - 731439229 - linux的轨迹
     
    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(5) | 评论(0) | 转发(0) |
    0

    上一篇:没有了

    下一篇:linux RTC 驱动模型分析

    给主人留下些什么吧!~~
    评论热议
    展开全文
  • PCI 总线

    2011-04-29 13:34:00
    PCI总线信号定义/PCI总线详解 (2008-11-04 12:22:20) 转载 标签: pci总线 it 分类:嵌入式技术 PCI局部总线简介:PCI的含义为外部部件互连(Peripheral Component Interconnect)。...

    PCI总线信号定义/PCI总线详解

     sg_trans.gif(2008-11-04 12:22:20)
    标签: 

    pci总线

     

    it

    分类: 嵌入式技术
    PCI局部总线简介:
        PCI的含义为外部部件互连(Peripheral Component Interconnect)。
        1991年,Intel公司对PCI局部总线进行了定义,并与IBM、Compaq、AST、HP、NEC等100多家公司联合共谋计算机总线的发展大业,于是,PCI局部总线标准1.0版本技术规范于1992年6月22日推出。目前,最新的2.2修改版于1998年12月18日完成,1999年2月发布。
        PCI局部总线是一种具有多路地址线和数据线的高性能32/64位总线。虽然在PC领域,PCI已经逐渐被更高性能的PCI-Express总线替代,但在嵌入式领域PCI总线依然应用广泛,且其性能足够满足绝大多数嵌入式系统的需求。

    PCI总线信号定义
        在一个PCI应用系统中,如果某设备取得了总线的控制权,就称其为“主设备”,而被主设备选中以进行通信的设备称为“从设备”或“目标设备”。对于相应的接口信号线,通常分为必备的和可选的两大类。如果只作为目标设备,至少需要47条接口信号线,若作为主设备,则需要49条。下面对主设备和目标设备综合考虑,并按功能分组将这些信号表示于图中。
    PCI总线信号定义/PCI总线详解
        下面对PCI信号的类型规定说明:
        IN  表示输入,是标准的只作输入的信号。
        OUT 表示输出,是标准的图腾柱式输出驱动信号。
        T/S 表示双向的三态输入/输出信号。
        O/D 表示漏极开路,以线或形式允许多个设备共同驱动和分享。
        S/T/S 表示持续的并且低电平有效的三态信号。在某一时刻只能属于一个主设备并被其驱动。

    系统信号定义:
        CLK  IN:
    对于所有的PCI设备都是输入信号。其频率范围为0~33M或者0~66M,这一频率也称为PCI的工作频率。对于PCI的信号,除了RST#、INTA#~INTD#之外,其余信号都在CLK的上升沿有效(或采样)。
        RST# IN:
    复位信号。用来使PCI专用的特性寄存器、配置寄存器、定时器、主设备、目标设备以及输出驱动器恢复为规定的初始状态。每当复位时,PCI的全部输出信号一般都应驱动到三态。REQ#和GNT#必须同时驱动到三态,不能在复位期间为高或为低。为防止AD、C/BE#及PAR在复位期间浮动,可由中央资源将它们驱动到逻辑低,但不能驱动为高电平。RST#和CLK可以不同步,但要保证其撤销边沿没有反弹。

    地址和数据信号:
        AD[31:0]  T/S:
    地址、数据多路复用的输入/输出信号。一个总线交易由一个地址期和一个或多个数据期构成。在FRAME#有效时,是地址期;在IRDY#和TRDY#同时有效时,是数据期。PCI总线支持突发方式的读写功能。
        C/BE[3:0]#  T/S:
    总线命令和字节使能多路复用信号线。在地址期中,传输的是总线命令;在数据期内,传输的是字节使能信号,用来确定AD[31:0]线上哪些字节为有效数据。C/BE[0]#应用于字节0(最低字节),C/BE[3]#应用于字节3(最高字节)。
        PAR  T/S地址与数据位传送时的奇偶校验信号。

    接口控制信号:
        FRAME#  S/T/S:
    帧周期信号。由当前的主设备驱动,表示当前主设备一次交易的开始和持续时间。FRAME#的有效预示着总线传输的开始;在FRAME#存在期间,意味着数据传输的继续进行;FRAME#失效后,是交易的最后一个数据期;
        IRDY#  
     S/T/S主设备准备好信号。由当前主设备驱动,该信号的有效表明发起本次传输的设备能够完成交易的当前数据期。它要与TRDY#配合使用,二者同时有效,数据方能完整传输。在读周期,该信号有效时,表示主设备已作好接收数据的准备。在写周期,该信号有效时,表明数据已提交到AD总线上。如果IRDY#和TRDY#有一个无效,将插入等待周期。
        TRDY#  
     S/T/S目标设备准备好信号。由当前被寻址的目标设备驱动,该信号有效表示目标设备已经作好完成当前数据传输的准备工作。同样,该信号要与IRDY#配合使用,二者同时有效,数据方能完整传输。在写周期,该信号有效,表示从设备已作好接收数据的准备;在读周期,该信号有效,表明数据已提交到AD总线上。同理,TRDY#和 IRDY#任一个无效,都将插入等待周期;
        STOP#
       S/T/S停止数据传送信号。由目标设备驱动。当该信号有效时,表示目标设备要求主设备中止当前的数据传送。
        IDSEL#
      IN初始化设备选择信号。在参数配置读和配置写期间,用作片选信号。
        DEVSEL#
     S/T/S设备选择信号。该信号有效时,表示驱动它的设备已称为当前访问的目标设备。换言之,该信号的有效说明总线上某一设备已被选中。如果一个主设备启动一个交易并且在6个CLK周期内没有检测到DEVSEL#有效,它必须假定目标设备没有反应或者地址不存在,从而实施主设备缺省。
        LOCK#
       S/T/S锁定信号(可选)。当该信号有效时,表示对桥的原始操作可能需要多个传输才能完成,也就是说,对此设备的操作是排它性的。锁定只能由主桥、PCI-PCI桥和扩展总线桥发起。

    仲裁信号:
        REQ#  T/S:
    总线占用请求信号。该信号一旦有效即表明驱动它的设备向仲裁器要求使用总线。它是一个点到点的信号线,任何主设备都有其REQ#信号。当RST#有效时,REQ#必须为三态。
        GNT#  T/S:
    总线占用允许信号。用来向申请总线占用的设备表示其请求已获得批准。这也是一个点到点的信号线,任何主设备都有自己的GNT#信号。当RST#有效时,必须忽略GNT#。
        每一个PCI主设备都有一对仲裁线直接连接到PCI仲裁器上。当一个主设备请求使用总线时,它会使连接到仲裁器上的REQ#有效,当仲裁器决定正在请求的主设备应该授权控制总线时,它会使对应的GNT#有效。在PCI环境中,总线仲裁器在同时有另一个主设备仍控制总线时起作用,这称为“隐式”仲裁。当主设备接受来自仲裁器的授权时,必须等待当前的主设备完成其传送,直到采样到FRAME#和IRDY#均无效时,它才认为自己取得总线授权。

    错误报告信号:
        PERR# 
     S/T/S数据奇偶校验错误信号;由数据的接收端驱动,同时设置其状态寄存器中的奇偶校验错误位。一个交易的主设备负责给软件报告奇偶校验错误,为此在写数据期它必须检测PERR信号。
        SERR#  O/D:
    系统错误报告信号;它的作用是报告地址奇偶错误,特殊周期命令的数据错误。SERR#是一个OD(漏极开路)信号,它通常会引起一个NMI中断,Power PC中会引起机器核查中断。

    中断信号:
        中断在PCI中是可选项,属于电平敏感型,低电平有效,OD,与时钟异步。其中INTB ~INTD只能用于多功能设备。中断线和功能之间的最终对应关系是由中断引脚寄存器来定义的。

    附加信号:
        PRSNT[2:1]:
    插卡存在信号;用于指出PCI插件板上是否存在插卡板,如存在则要求母板为其供电;
        CLKRUN:
    时钟运行信号;用于停止或者减慢CLK;
        M66EN:
    66M使能信号;
        PME#:
    电源管理事件信号。
        3.3Vaux:
    辅助电源信号;当插卡主电源被软件关闭时,3.3Vaux为插件提供电能以产生电源管理事件。

    64位总线扩展信号:
        AD[64:32]:
    在地址期,如使用DAC命令且REQ64有效时为高32位地址;在数据期,REQ64和ACK64都有效时高32位数据有效。
        C/BE[7:4]:
    用法与AD信号同。
        REQ64#:
    64位传输请求;由主设备驱动,并和FRAME有相同的时序;
        ACK64#:
    64位传输认可;由从设备驱动,并和DEVSEL有相同的时序;
        PAR64#:
    奇偶双字节校验。

    JTAG/边界扫描信号:
        TCK,TDI,TDO,TMS,TRST#

    转载于:https://www.cnblogs.com/zong-blogs/archive/2011/04/29/2032647.html

    展开全文
  • PCI总线概述

    2021-02-03 18:18:17
    文章介绍了PCI总线的特点,描述了PCI总线的信号、命令、传输协议与PCI总线的配置空间。 关键词:PCI总线;信号定义;总线命令;总线协议;配置空间。 SummaryofPCI BusZHANGGuanghua1,YANGShuguang2(1....
  • 总线协议基础PCI总线协议基础PCI基本总线协议传输机制是猝发成组数据传输。一个分组由一个地址相位和一个或多个数据相位组成。1.PCI总线的传输控制PCI总线上所有的数据传输基本上都是由以下三条信号线控制的:FRAME...

    总线协议基础

    PCI

    总线协议基础

    PCI

    基本总线协议传输机制是猝发成组数据传输。

    一个分组由一个地址相位

    和一个或多个数据相位组成。

    1

    PCI

    总线的传输控制

    PCI

    总线上所有的数据传输基本上都是由以下三条信号线控制的:

    FRAME#

    :由主设备驱动,说明一次数据传输周期的开始和结束。

    IRDY#

    :由主设备驱动,表示主设备已经作好传送数据的准备。

    TRDY#

    :由从设备驱动,表示从设备已经作好传送数据的准备。

    当数据有效时,数据源设备需要无条件设置

    xRDY#

    ,接收方可以在适当的时

    间发出

    xRDY#

    信号。

    FRAME#

    信号有效后的第一个时钟前沿是地址相位的开始,此

    时,开始传送地址信息和总线命令,下一个时钟前沿进入一个或多个数据相位。

    每当

    IRDY#

    TRDY#

    同时有效时,所对应的时钟前沿就使数据在主从设备之间传

    送。在此期间,可由主设备或从设备分别利用

    IRDY#

    TRDY#

    的无效而插入等待

    周期。

    一旦主设备设置了

    IRDY#

    ,将不能再改变

    IRDY#

    FRAME#

    ,直到当前的数据

    相位完成为止,而此期间不管

    TRDY#

    的状态是否发生变化。一旦从设备设置了

    TRDY#

    ,就不能改变

    DEVSEL#

    TRDY#

    STOP#

    ,直到当前的数据相位完成为止。

    也就是说,

    只要数据传输已经开始,

    那么在当前数据相位结束之前,

    不管是主设

    备还是从设备都不能撤消命令,必须完成数据传输。

    最后一次数据传输时

    (

    可能紧接地址相位之后

    )

    ,主设备应撤消

    FRAME#

    信号

    而建立

    IRDY#

    ,表明主设备已作好了最后一次数据传输的准备。当从设备发出

    TRDY#

    信号,表明最后一次数据传输已经完成,接口转入空闲状态,此时

    FRAME#

    IRDY#

    均被撤消。

    对于

    PCI

    总线的传输,可总结出以下几条规则:

    ①FRAME#和

    IRDY#

    决定总线的忙/闲状态。

    当其中一个有效时,

    表示总线忙;

    两个都无效时,总线进入空闲状态。

    ②一旦

    FRAME#

    被置为无效,在同一传输期间不能重新置为有效。

    ③除非设置

    IRDY#

    一般情况下不能设置

    FRAME#

    无效

    (

    FRAME#

    无效后的第

    一个时钟沿

    IRDY#

    必须保持有效

    )

    ④一旦主设备已使

    IRDY#

    有效,在当前数据相位完成前,不能改变

    IRDY#

    FRAME#

    的状态。

    ⑤在完成最后一个数据相位之后的时钟周期主设备必须使

    IRDY#

    无效。

    2

    PCI

    总线的寻址

    PcI

    总线定义了三种物理地址空间:

    内存地址空间、

    I

    O

    地址空间及配置地

    址空间,

    前两种为通常意义的地址空间,

    第三种配置地址空间用以支持

    PCI

    的硬

    件配置。

    PCI

    总线的地址译码是分散的,每个设备都有自己的地址译码逻辑,从而省

    去了中央译码逻辑。

    PCl

    支持对地址的正向译码和负向译码,所谓正向译码,是

    指总线上每个设备都监视地址总线上的访问地址,

    判断是否落在自己的地址范围

    内,

    译码速度较快。

    所谓负向译码,

    是指要接受未被其他设备在正向译码中接受

    的所有访问,因此,此种译码方式只能由总线上的一个设备来实现

    (

    一般是连接

    展开全文
  • PCI总线---深入理解PCI总线

    千次阅读 2017-10-10 14:42:15
    8.1 深入理解PCI总线 8.1.1 PCI设备工作原理 8.1.2 PCI总线域 8.1.3 PCI资源管理器 8.1.4 PCI配置空间读取和设置
  • PCI总线及其产品设计 PCI总线及其产品设计
  • PCI总线协议 V2.3 PCI总线协议 V2.3 PCI总线协议 V2.3
  • PCI总线的操作

    2018-01-22 19:37:40
    ※ 总线命令  ※ 命令使用规则  ※ PCI总线协议  ※ PCI总线的数据传输过程
  • PCI总线是一种高性能的32/64位地址数据复用总线,它是一种独立处理器的同步总线,可支持猝发传送。其总线时钟频率为0~33MHz。为了支持即插即用功能,PCI总线规范定义了256字节的配置空间。但由于PCI总线协议比较...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,284
精华内容 2,113
关键字:

pci总线