# Peripheral Component Interconnect
PCI (tiếng Anh: Peripheral Component Interconnect) trong khoa học máy tính là một chuẩn để truyền dữ liệu giữa các thiết bị ngoại vi đến một bo mạch chủ (thông qua chip cầu nam).
Kết nối thành phần ngoại vi (PCI) là một bus máy tính cục bộ để gắn các thiết bị phần cứng trong máy tính và là một phần của tiêu chuẩn PCI Local Bus. Bus PCI hỗ trợ các chức năng được tìm thấy trên bus bộ xử lý nhưng ở định dạng chuẩn hóa độc lập với bất kỳ bus gốc nào của bộ xử lý nhất định. Các thiết bị được kết nối với bus PCI dường như với bus chính được kết nối trực tiếp với bus của chính nó và được gán địa chỉ trong không gian địa chỉ của bộ xử lý. Nó là một bus song song, đồng bộ với một bus clock duy nhất. Các thiết bị đi kèm có thể ở dạng mạch tích hợp được lắp vào bo mạch chủ (được gọi là thiết bị phẳng trong thông số kỹ thuật PCI) hoặc một thẻ mở rộng phù hợp với một khe cắm. Bus cục bộ PCI lần đầu tiên được triển khai trong các máy tính tương thích của IBM, nơi nó thay thế sự kết hợp của một số khe cắm Kiến trúc tiêu chuẩn công nghiệp (ISA) chậm và một khe cắm VESA Local Bus (VLB) nhanh làm cấu hình bus. Sau đó nó đã được chấp nhận cho các loại máy tính khác. Các loại card PCI điển hình được sử dụng trong PC bao gồm: card mạng, card âm thanh, modem, các cổng phụ như Universal Serial Bus (USB) hoặc serial, card tuner TV và bộ điều hợp máy chủ ổ đĩa cứng (hard disk drive host adapters). Card màn hình PCI đã thay thế các card ISA và VLB cho đến khi nhu cầu băng thông tăng cao hơn khả năng của PCI. Sau đó, giao diện ưa thích cho card màn hình trở thành Cổng đồ họa tăng tốc 'Accelerated Graphics Port'(AGP), một bộ siêu tốc của PCI, trước khi nhường chỗ cho PCI Express.
Phiên bản đầu tiên của PCI được tìm thấy trong máy tính để bàn bán lẻ là bus 32 bit sử dụng đồng hồ bus 33 MHz và tín hiệu 5 V, mặc dù tiêu chuẩn PCI 1.0 cũng được cung cấp cho biến thể 64 bit. Chúng có một định vị khía trong thẻ (card). Phiên bản 2.0 của tiêu chuẩn PCI đã giới thiệu các khe cắm 3,3 V, được phân biệt vật lý bằng một đầu nối vật lý lật để ngăn việc cắm thẻ (card) 5 V. Thẻ đa năng (Universal cards), có thể hoạt động trên một trong hai điện áp, có hai rãnh. Phiên bản 2.1 của tiêu chuẩn PCI đã giới thiệu hoạt động 66 MHz tùy chọn. Một biến thể hướng tới máy chủ của PCI, PCI Extended (PCI-X) hoạt động ở tần số lên đến 133 MHz cho PCI-X 1.0 và lên đến 533 MHz cho PCI-X 2.0. Một đầu nối bên trong cho thẻ máy tính xách tay, được gọi là Mini PCI, đã được giới thiệu trong phiên bản 2.2 của đặc điểm kỹ thuật PCI. Bus PCI cũng được sử dụng cho tiêu chuẩn kết nối máy tính xách tay bên ngoài - CardBus. Đặc điểm kỹ thuật PCI đầu tiên được phát triển bởi Intel, nhưng việc phát triển tiêu chuẩn sau đó trở thành trách nhiệm của Nhóm lợi ích đặc biệt PCI (PCI-SIG).
PCI và PCI-X đôi khi được gọi là PCI song song hoặc PCI thông thường để phân biệt chúng về mặt công nghệ với PCI Express kế nhiệm gần đây hơn, vốn áp dụng kiến ​​trúc nối tiếp, dựa trên làn. Thời kỳ hoàng kim của PCI trên thị trường máy tính để bàn là khoảng 1995 đến 2005. PCI và PCI-X đã trở nên lỗi thời cho hầu hết các mục đích; tuy nhiên vào năm 2020, chúng vẫn còn phổ biến trên các máy tính để bàn hiện đại với mục đích tương thích ngược và chi phí sản xuất tương đối thấp. Một ứng dụng hiện đại phổ biến khác của PCI song song là trong các máy tính công nghiệp, nơi nhiều thẻ mở rộng chuyên dụng, được sử dụng ở đây, không bao giờ chuyển đổi sang PCI Express, giống như với một số thẻ ISA. Nhiều loại thiết bị trước đây có sẵn trên thẻ mở rộng PCI nay thường được tích hợp vào bo mạch chủ hoặc có sẵn trong các phiên bản USB và PCI Express.

## Lịch sử phát triển
Công ty Intel  đã xây dựng nên một tiêu chuẩn ghép nố có tên là bus cục bộ PCI (Peripheral Component Interconnection - Kết nối các thành phần ngoại vi) hay 
thường gọi tắt là bus PCI, để dùng cho bộ xử lý Pentium.Bus này cho phép truy nhập rất nhanh tới bộ nhớ, bộ  điều khiển  đĩa, card âm thanh, card đồ hoạ. Vi mạch ghép nối dùng cho bus này là chip PCI 82430 cho phép ghép nối trực tiếp với bus.
Ban đầu tốc độ xung nhịp đồng hồ cho Bus PCI là 33 MHz, về sau nâng lên 66 MHz đối với PCI 2.1, với tốc độ lý thuyết là 266MBps - gấp 33 lần so với ISA Bus. Nó có thể thiết lập cấu hình 32-bit hoặc 64-bit. Với 64-bit chạy với tốc độ xung nhịp 66 MHz - giữa năm 1999 - tăng băng thông về mặt lý thuyết tới 524MBps PCI được Intel phát triển để thay thế các bus cổ điển ISA và EISA vào những năm 1992. Sự phát triển của bus PCI đã thay đổi qua nhiều phiên bản, có thể kể đến như sau:
- PCI phiên bản 1.0: ra đời vào năm 1992 bao gồm hai loại: loại chuẩn (32 bit) và loại đặc biệt (64 bit)
- PCI phiên bản 2.0: ra đời năm 1993
- PCI phiên bản 2.1: ra đời năm 1995
- PCI phiên bản 2.2: ra đời tháng 1 năm 1999
- PCI-X 1.0 ra đời tháng 9 năm 1999
- mini-PCI ra đời tháng 11 năm 1999
- PCI phiên bản 2.3 ra đời tháng 3 năm 2002
- PCI-X phiên bản 2.0 ra đời tháng 7 năm 2002
- PCI Express phiên bản 1.0 ra đời tháng 7 năm 2002 và ít lâu sau là 1.1
- PCI Express phiên bản 2.0 ra đời 15 tháng 1 năm 2007
- PCI Express phiên bản 3.0 ra mắt khoảng năm 2010[3].


## Các kiểu bus PCI
PCI với bus 33,33 Mhz, độ rộng 32 bit là bus PCI thông dụng nhất cho đến thời điểm năm 2007 dùng cho các bo mạch mở rộng (bo mạch âm thanh, bo mạch mạng, bo mạch modem gắn trong...Tuy nhiên có một số bus PCI khác như sau:
- PCI 66 Mhz: Độ rộng bus: 32 bit; Tốc độ bus: 66 MHz; Dữ liệu chuyển trong một xung nhịp: 1; Băng thông: 266 Mbps
- PCI 64 bit: Độ rộng bus: 64 bit; Tốc độ bus: 33 MHz; Dữ liệu chuyển trong một xung nhịp: 1; Băng thông: 266 Mbps
- PCI 64 bit/66 MHz: Độ rộng bus: 64 bit; Tốc độ bus: 66 MHz; Dữ liệu chuyển trong một xung nhịp: 1; Băng thông: 533 Mbps
- PCI-X 64: Độ rộng bus: 64 bit; Tốc độ bus: 66 MHz; Dữ liệu chuyển trong một xung nhịp: 1; Băng thông: 533 Mbps
- PCI-X 133: Độ rộng bus: 64 bit; Tốc độ bus: 133 MHz; Dữ liệu chuyển trong một xung nhịp: 1; Băng thông: 1066 Mbps
- PCI-X 266: Độ rộng bus: 64 bit; Tốc độ bus: 266 MHz; Dữ liệu chuyển trong một xung nhịp: 2; Băng thông: 2132 Mbps
- PCI-X 533: Độ rộng bus: 64 bit; Tốc độ bus: 533 MHz; Dữ liệu chuyển trong một xung nhịp: 4; Băng thông: 4266 Mbps

Những bus PCI 66 Mhz hoặc 64 bit theo liệt kê trên không thông dụng trong các máy tính cá nhân, chúng thường chỉ xuất hiện trên các máy chủ hoặc máy trạm.

## Cấu hình tự động
PCI cung cấp bộ nhớ riêng biệt và không gian địa chỉ cổng I/O được ánh xạ bộ nhớ cho họ bộ xử lý x86, lần lượt là 64 và 32 bit. Địa chỉ trong các không gian địa chỉ này được chỉ định bởi phần mềm. Không gian địa chỉ thứ ba, được gọi là Không gian cấu hình PCI (PCI Configuration Space), sử dụng lược đồ địa chỉ cố định, cho phép phần mềm xác định dung lượng bộ nhớ và không gian địa chỉ I/O cần thiết cho mỗi thiết bị. Mỗi thiết bị có thể yêu cầu tối đa sáu vùng không gian bộ nhớ hoặc không gian cổng vào / ra (I/O) thông qua các thanh ghi không gian cấu hình của nó.
Trong một hệ thống điển hình, phần sụn (firmware) (hoặc hệ điều hành) truy vấn tất cả các bus PCI tại thời điểm khởi động (thông qua PCI Configuration Space) để tìm ra thiết bị nào hiện diện và tài nguyên hệ thống nào (không gian bộ nhớ, không gian I/O, đường ngắt, v.v. ) mỗi nhu cầu. Sau đó, nó sẽ phân bổ các tài nguyên và cho mỗi thiết bị biết phân bổ của nó là gì.
Không gian cấu hình PCI cũng chứa một lượng nhỏ thông tin về loại thiết bị, giúp hệ điều hành chọn trình điều khiển thiết bị cho nó, hoặc ít nhất là đối thoại với người dùng về cấu hình hệ thống.
Các thiết bị có thể có bộ nhớ chỉ đọc trên bo mạch read-only memory' (ROM) chứa mã thực thi cho bộ xử lý x86 hoặc PA-RISC, trình điều khiển Open Firmware hoặc ROM tùy chọn. Chúng thường cần thiết cho các thiết bị được sử dụng trong quá trình khởi động hệ thống, trước khi trình điều khiển thiết bị được tải bởi hệ điều hành.
Ngoài ra, còn có bộ định thời gian trễ PCI (PCI Latency Timers) là một cơ chế để các thiết bị làm chủ bus PCI (PCI Bus-Mastering) chia sẻ bus PCI một cách công bằng. "Công bằng" trong trường hợp này có nghĩa là các thiết bị sẽ không sử dụng một phần lớn băng thông bus PCI có sẵn đến mức các thiết bị khác không thể hoàn thành công việc cần thiết. Lưu ý, điều này không áp dụng cho PCI Express.
Cách hoạt động của điều này là mỗi thiết bị PCI có thể hoạt động ở chế độ bus-master được yêu cầu triển khai một bộ định thời, được gọi là Bộ định thời gian trễ  (PCI Latency Timers), giới hạn thời gian thiết bị đó có thể giữ bus PCI. Bộ đếm thời gian bắt đầu khi thiết bị giành được quyền sở hữu bus và đếm ngược theo tốc độ của xung nhịp PCI. Khi bộ đếm về 0, thiết bị được yêu cầu giải phóng bus. Nếu không có thiết bị nào khác đang chờ quyền sở hữu xe buýt, nó có thể chỉ cần lấy lại xe buýt và truyền nhiều dữ liệu hơn.

## Ngắt (Interrupts)
Các thiết bị được yêu cầu tuân theo một giao thức để các đường ngắt (interrupt line) có thể được chia sẻ. Bus PCI bao gồm bốn đường ngắt, tất cả đều có sẵn cho mỗi thiết bị. Tuy nhiên, chúng không được nối dây song song như các đường bus PCI khác. Vị trí của các dòng ngắt xoay vòng giữa các khe, vì vậy những gì xuất hiện trên một thiết bị dưới dạng dòng INTA # là INTB # tiếp theo và INTC # đối với thiết bị sau đó. Các thiết bị đơn chức năng sử dụng INTA # của chúng để báo hiệu ngắt, vì vậy tải thiết bị được trải khá đồng đều trên bốn đường ngắt có sẵn. Điều này làm giảm bớt một vấn đề phổ biến với việc chia sẻ bị gián đoạn.
Việc ánh xạ các đường ngắt PCI lên các đường ngắt của hệ thống, thông qua cầu máy chủ PCI (PCI host bridge), phụ thuộc vào việc triển khai. Mã Hệ thống Đầu vào / Đầu ra (BIOS) cơ bản dành riêng cho nền tảng có nghĩa là biết điều này và đặt trường "dòng ngắt" (interrupt line) trong không gian cấu hình của mỗi thiết bị cho biết IRQ mà nó được kết nối.
Các đường ngắt PCI được kích hoạt theo mức (level-triggered). Điều này được chọn thay vì kích hoạt cạnh (edge-triggering) để đạt được lợi thế khi phục vụ một đường ngắt được chia sẻ và để mạnh mẽ: các ngắt được kích hoạt cạnh rất dễ bị bỏ sót.
Các bản sửa đổi sau của đặc điểm kỹ thuật PCI bổ sung hỗ trợ cho các ngắt được báo hiệu bằng tin nhắn message-signaled interrupts (MSI). Trong hệ thống này, một thiết bị báo hiệu nhu cầu dịch vụ của nó bằng cách thực hiện ghi vào bộ nhớ, thay vì xác nhận một đường dây chuyên dụng. Điều này làm giảm bớt vấn đề khan hiếm dòng ngắt. Ngay cả khi các vectơ ngắt vẫn được chia sẻ, nó không bị các vấn đề chia sẻ của các ngắt được kích hoạt ở mức độ. Nó cũng giải quyết vấn đề định tuyến, vì việc ghi bộ nhớ không bị sửa đổi không thể đoán trước giữa thiết bị và máy chủ. Cuối cùng, vì tín hiệu thông báo là trong băng, nó giải quyết một số vấn đề đồng bộ hóa có thể xảy ra với các dòng ghi và ngắt ngoài băng đã đăng.
PCI Express hoàn toàn không có đường ngắt vật lý. Nó sử dụng riêng các ngắt được báo hiệu bằng tin nhắn (MSI).