PCI Information

This page is something I'm creating to help people and me easily find information on the PCI bus. I have started this as I'm currently researching how to build a simple PCI card and interface to it under Linux. This seems hard for an amateur to do and alot harder than working with the old ISA bus but who knows i may be able to build one if not at least the information i have gathered may be of help to someone else

 

 

 

124 pin (98+22) PCI 5 volt EDGE connector

 

 

The PCI specification defines two types of connectors that may be implemented at the system board level:

  • One for systems that implement 5 Volt signalling levels
  • One for systems that implement 3.3 Volt signalling levels.

Also the PCI systems may implement either the 32-bit or 64-bit connector. Most PCI buses implement only the 32-bit portion of the connector which consists of pins 1 through 62. Advanced systems which support 64-bit data transfers implement the full PCI bus connector which consists of pins 1 through 94. Three types of add-in boards may be implemented:

  • 5 Volt add-in boards
    include a key notch in pin positions 50 and 51 to allow them to be plugged only into 5 Volt system connectors.
  • 3.3 Volt add-in boards
    include a key notch in pin positions 12 and 13 to allow them to be plugged only into 3.3 Volt system connectors.
  • Universal add-in boards
    include both key notches to allow them to be plugged into either 5 Volt or 3.3 Volt system connectors.

 

 

Below are some example images i found on the net so you can get a better idea of the connectors

 


Above you can see a 32-bit connector (PCI 5V/32-bit)

 


Above you can see a 64-bit connector (PCI 3.3V/64-bit)

 

98+22 PIN EDGE CONNECTOR at the computer.

Pin +5V +3.3V Universal Description   Pin +5V +3.3V Universal Description
A1 TRST     Test Logic Reset   B1 -12V     -12 VDC
A2 +12V     +12 VDC   B2 TCK     Test Clock
A3 TMS     Test Mde Select   B3 GND     Ground
A4 TDI     Test Data Input   B4 TDO     Test Data Output
A5 +5V     +5 VDC   B5 +5V     +5 VDC
A6 INTA     Interrupt A   B6 +5V     +5 VDC
A7 INTC     Interrupt C   B7 INTB     Interrupt B
A8 +5V     +5 VDC   B8 INTD     Interrupt D
A9 RESV01     Reserved VDC   B9 PRSNT1     Reserved
A10 +5V +3.3V Signal Rail +V I/O (+5 V or +3.3 V)   B10 RES     +V I/O (+5 V or +3.3 V)
A11 RESV03     Reserved VDC   B11 PRSNT2     ??
A12 GND03 (OPEN) (OPEN) Ground or Open (Key)   B12 GND (OPEN) (OPEN) Ground or Open (Key)
A13 GND05 (OPEN) (OPEN) Ground or Open (Key)   B13 GND (OPEN) (OPEN) Ground or Open (Key)
A14 RESV05     Reserved VDC   B14 RES     Reserved VDC
A15 RESET     Reset   B15 GND     Reset
A16 +5V +3.3V Signal Rail +V I/O (+5 V or +3.3 V)   B16 CLK     Clock
A17 GNT     Grant PCI use   B17 GND     Ground
A18 GND08     Ground   B18 REQ     Request
A19 RESV06     Reserved VDC   B19 +5V +3.3V Signal Rail +V I/O (+5 V or +3.3 V)
A20 AD30     Address/Data 30   B20 AD31     Address/Data 31
A21 +3.3V01     +3.3 VDC   B21 AD29     Address/Data 29
A22 AD28     Address/Data 28   B22 GND     Ground
A23 AD26     Address/Data 26   B23 AD27     Address/Data 27
A24 GND10     Ground   B24 AD25     Address/Data 25
A25 AD24     Address/Data 24   B25 +3.3V     +3.3VDC
A26 IDSEL     Initialization Device Select   B26 C/BE3     Command, Byte Enable 3
A27 +3.3V03     +3.3 VDC   B27 AD23     Address/Data 23
A28 AD22     Address/Data 22   B28 GND     Ground
A29 AD20     Address/Data 20   B29 AD21     Address/Data 21
A30 GND12     Ground   B30 AD19     Address/Data 19
A31 AD18     Address/Data 18   B31 +3.3V     +3.3 VDC
A32 AD16     Address/Data 16   B32 AD17     Address/Data 17
A33 +3.3V05     +3.3 VDC   B33 C/BE2     Command, Byte Enable 2
A34 FRAME     Address or Data phase   B34 GND13     Ground
A35 GND14     Ground   B35 IRDY     Initiator Ready
A36 TRDY     Target Ready   B36 +3.3V06     +3.3 VDC
A37 GND15     Ground   B37 DEVSEL     Device Select
A38 STOP     Stop Transfer Cycle   B38 GND16     Ground
A39 +3.3V07     +3.3 VDC   B39 LOCK     Lock bus
A40 SDONE     Snoop Done   B40 PERR     Parity Error
A41 SBO     Snoop Backoff   B41 +3.3V08     +3.3 VDC
A42 GND17     Ground   B42 SERR     System Error
A43 PAR     Parity   B43 +3.3V09     +3.3 VDC
A44 AD15     Address/Data 15   B44 C/BE1     Command, Byte Enable 1
A45 +3.3V10     +3.3 VDC   B45 AD14     Address/Data 14
A46 AD13     Address/Data 13   B46 GND18     Ground
A47 AD11     Address/Data 11   B47 AD12     Address/Data 12
A48 GND19     Ground   B48 AD10     Address/Data 10
A49 AD9     Address/Data 9   B49 GND20     Ground
A50           B50 (OPEN) GND (OPEN) Ground or Open (Key)
A51           B51 (OPEN) GND (OPEN) Ground or Open (Key)
A52 C/BE0     Command, Byte Enable 0   B52 AD8     Address/Data 8
A53 +3.3V11     +3.3 VDC   B53 AD7     Address/Data 7
A54 AD6     Address/Data 6   B54 +3.3V12     +3.3 VDC
A55 AD4     Address/Data 4   B55 AD5     Address/Data 5
A56 GND21     Ground   B56 AD3     Address/Data 3
A57 AD2     Address/Data 2   B57 GND22     Ground
A58 AD0     Address/Data 0   B58 AD1     Address/Data 1
A59 +5V +3.3V Signal Rail +V I/O (+5 V or +3.3 V)   B59 VCC08     +5 VDC
A60 REQ64     Request 64 bit ???   B60 ACK64     Acknowledge 64 bit ???
A61 VCC11     +5 VDC   B61 VCC10     +5 VDC
A62 VCC13     +5 VDC   B62 VCC12     +5 VDC
                     
A63 GND     Ground   B63 RES     Reserved
A64 C/BE[7]#     Command, Byte Enable 7   B64 GND     Ground
A65 C/BE[5]#     Command, Byte Enable 5   B65 C/BE[6]#     Command, Byte Enable 6
A66 +5V +3.3V Signal Rail +V I/O (+5 V or +3.3 V)   B66 C/BE[4]#     Command, Byte Enable 4
A67 PAR64     Parity 64 ???   B67 GND     Ground
A68 AD62     Address/Data 62   B68 AD63     Address/Data 63
A69 GND     Ground   B69 AD61     Address/Data 61
A70 AD60     Address/Data 60   B70 +5V +3.3V Signal Rail +V I/O (+5 V or +3.3 V)
A71 AD58     Address/Data 58   B71 AD59     Address/Data 59
A72 GND     Ground   B72 AD57     Address/Data 57
A73 AD56     Address/Data 56   B73 GND     Ground
A74 AD54     Address/Data 54   B74 AD55     Address/Data 55
A75 +5V +3.3V Signal Rail +V I/O (+5 V or +3.3 V)   B75 AD53     Address/Data 53
A76 AD52     Address/Data 52   B76 GND     Ground
A77 AD50     Address/Data 50   B77 AD51     Address/Data 51
A78 GND     Ground   B78 AD49     Address/Data 49
A79 AD48     Address/Data 48   B79 +5V +3.3V Signal Rail +V I/O (+5 V or +3.3 V)
A80 AD46     Address/Data 46   B80 AD47     Address/Data 47
A81 GND     Ground   B81 AD45     Address/Data 45
A82 AD44     Address/Data 44   B82 GND     Ground
A83 AD42     Address/Data 42   B83 AD43     Address/Data 43
A84 +5V +3.3V Signal Rail +V I/O (+5 V or +3.3 V)   B84 AD41     Address/Data 41
A85 AD40     Address/Data 40   B85 GND     Ground
A86 AD38     Address/Data 38   B86 AD39     Address/Data 39
A87 GND     Ground   B87 AD37     Address/Data 37
A88 AD36     Address/Data 36   B88 +5V +3.3V Signal Rail +V I/O (+5 V or +3.3 V)
A89 AD34     Address/Data 34   B89 AD35     Address/Data 35
A90 GND     Ground   B90 AD33     Address/Data 33
A91 AD32     Address/Data 32   B91 GND     Ground
A92 RES     Reserved   B92 RES     Reserved
A93 GND     Ground   B93 RES     Reserved
A94 RES     Reserved   B94 GND     Ground

Notes: Pin 63-94 exists only on 64 bit PCI implementations.

+V I/O is 3.3V on 3.3V boards, 5V on 5V boards, and define signal rails on the Universal board.

 

Links and sources of information

Pinouts

PCI pinout and information from pinouts.ru

PCI pinout and information from hardwarebook.net

 

Specifications

PCI-SIG - The fundamental purpose of the PCI-SIG is to deliver a stable, straightforward and compatible standard for PCI devices. Here you will find all the PCI specification. NOTE they are not free

PCI 2.3 spec - you can download PCI 2.3 spec freely from here. This site also has some other useful stuff such as usb specs

PCI example code

 

PCI ID / vendor lists

The Linux PCI ID Repository - This is a public repository of all known ID's used in PCI devices, that is ID's of vendors, devices, subsystems and device classes. These ID lists (usually in form of a pci.ids file) are used in various programs (The Linux Kernel, The PCI Utilities, new version of the XFree86 etc.) to display full device names instead of the numeric ID's.

PCI Vendor List

 

Programming

How to Write Linux PCI Drivers - Note: there is also lots of other documentation withing this site try Here to see this sites document folder

Where can I find programming info on PCI? - Wiki page with lots of links to yet more PCI information

Linux Device Drivers, 2nd Edition

Linux Device Drivers, Third Edition

The Linux Kernel API - Chapter 10. Hardware Interfaces (PCI Support Library)

Advanced Linux Programming book

PCI programming FAQ

The x86 Interrupt List - aka "Ralf Brown's Interrupt List", "RBIL". The interrupt list is a comprehensive listing of interrupt calls, I/O ports, memory locations, far-call interfaces, and more for IBM PCs and compatible machines, both documented and undocumented. Nearly eight megabytes of information in ASCII text files!

Link This book discusses topics associated with writing drivers for devices that operate on the Peripheral Component Interconnect (PCI) Local Bus in the Digital UNIX® operating system.

linux i/o port programming howto - This HOWTO document describes programming hardware I/O ports and waiting for small periods of time in user.mode Linux programs running on the Intel x86 architecture.

The Linux Kernel book - This book is for Linux enthusiasts who want to know how the Linux kernel works. It is not an internals manual. Rather it describes the principles and mechanisms that Linux uses; how and why the Linux kernel works the way that it does. Chapter 6 - PCI

The Linux Kernel DRAFT, Version 0.1-10(30) - This an older version of the above site

NOTE: below link i have not been able to connect to as of yet
Programming PCI-Devices under Linux

 

Below links have not been sorted yet

PCI Local Bus Technical Summary from techfest.com

www.edaboard.com - Found quite a lot of good links and information by searching forums for PCI info

Bona Fide OS Development - (every doc imaginable)

Craig's PCI & PnP Stuff Pages - Also on this sites downloads page you will find Craig's PCI tools (it's for DOS/Pascal and Windows). In brief, this is a suite of tools for hardware developers, engineers, programmers, system builders and the insatiably curious, that allows exploration of your PCI/AGP/PCI Express/CardBus/CompactPCI/PCI-X/PCI HotPlug/etc. hardware at the lowest level. Full source code is of course included, and is 100% freeware.

PCI Power Management

Index of Documentation - for People Interested in Writing and/or Understanding the Linux Kernel. This is a great site

The PCI Utilities - The PCI Utilities are a collection of programs for inspecting and manipulating configuration of PCI devices, all based on a common portable library libpci which offers access to the PCI configuration space on a variety of operating systems. (lspci, setpci)

NOTE: below link i have not been able to connect to as of yet Link