Curs 8 - PCI și PCIe: Arhitectură și Utilizare în Embedded Systems

Acest curs explorează interfețele PCI și PCI Express utilizate în sistemele embedded pentru conectarea dispozitivelor de mare viteză.

1. Ce este PCI și PCIe?

PCI (Peripheral Component Interconnect) și PCI Express (PCIe) sunt interfețe utilizate pentru conectarea dispozitivelor periferice de mare viteză, precum plăcile grafice, plăcile de rețea și dispozitivele de stocare.

2. Diferențe între PCI și PCIe

- PCI utilizează un bus paralel partajat, unde mai multe dispozitive concurează pentru acces.

- PCIe utilizează un protocol serial punct-la-punct cu multiple benzi (lanes) care oferă viteze mai mari și scalabilitate.

3. Arhitectura PCIe

PCIe utilizează un model bazat pe lanes, fiecare lane conținând două perechi diferențiale pentru transmisie și recepție de date.

- x1, x4, x8, x16: Numărul de lane-uri determină lățimea de bandă totală.

- Protocol bazat pe pachete: PCIe trimite date în pachete similare cu rețelele Ethernet.

4. Adresarea în PCIe

Dispozitivele PCIe sunt identificate printr-un sistem de adresare format din Bus, Device și Function (BDF).

lspci -vvv

5. Configurarea unui Dispozitiv PCIe în Linux

Linux permite interogarea dispozitivelor PCIe prin `sysfs` și `lspci`.

cat /sys/bus/pci/devices/0000:00:1f.6/config

6. Programarea unui Driver PCIe în Linux

Exemplu de driver PCIe simplu pentru a detecta un dispozitiv PCIe.

#include <linux/module.h>
#include <linux/pci.h>

static struct pci_device_id pci_ids[] = {
    { PCI_DEVICE(0x8086, 0x1533) }, // Exemplu de ID vendor/device
    { 0 }
};

static int pci_probe(struct pci_dev *dev, const struct pci_device_id *id) {
    printk(KERN_INFO "PCIe device detected!\n");
    return 0;
}

static struct pci_driver pci_driver = {
    .name = "my_pci_driver",
    .id_table = pci_ids,
    .probe = pci_probe,
};

module_pci_driver(pci_driver);
MODULE_LICENSE("GPL");

7. Aplicații ale PCIe în Embedded Systems

- Acceleratoare hardware (FPGA, GPU, AI)

- Plăci de rețea de mare viteză (10G/40G Ethernet)

- SSD NVMe pentru stocare de mare viteză

8. Exercițiu Practic - Detectarea și Configurarea unui Dispozitiv PCIe

Listează toate dispozitivele PCIe conectate la sistem și scrie un modul kernel care afișează informațiile unui dispozitiv PCIe specificat.

Resurse suplimentare: