Acest curs explorează interfețele PCI și PCI Express utilizate în sistemele embedded pentru conectarea dispozitivelor de mare viteză.
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.
- 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.
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.
Dispozitivele PCIe sunt identificate printr-un sistem de adresare format din Bus, Device și Function (BDF).
lspci -vvv
Linux permite interogarea dispozitivelor PCIe prin `sysfs` și `lspci`.
cat /sys/bus/pci/devices/0000:00:1f.6/config
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");
- Acceleratoare hardware (FPGA, GPU, AI)
- Plăci de rețea de mare viteză (10G/40G Ethernet)
- SSD NVMe pentru stocare de mare viteză
Listează toate dispozitivele PCIe conectate la sistem și scrie un modul kernel care afișează informațiile unui dispozitiv PCIe specificat.