BAR trong PCIe là gì?

Quicknote BAR trong PCIe là gì?

3 phút đọc
Đọc bằng Tiếng Việt English 日本語
PCI / ACPI / SMBIOS Terms cover

BAR là cách một PCIe device nói với firmware: “tôi cần một vùng địa chỉ để CPU có thể access register hoặc memory của tôi”. BAR có thể là MMIO hoặc I/O space; với PCIe hiện đại, phần lớn trường hợp quan trọng là MMIO.

Nếu config space cho biết device tồn tại, BAR cho biết device cần tài nguyên bao nhiêu và firmware/OS sẽ đặt nó ở đâu.

Mục Giá trị Ghi chú
BAR0 - BAR5 Base Address Register Endpoint có thể có nhiều BAR.
Memory BAR MMIO CPU access register qua memory address.
I/O BAR I/O port Legacy hơn, ít gặp trong PCIe hiện đại.
64-bit BAR Dùng 2 BAR liên tiếp Ví dụ BAR0/BAR1 tạo một base address 64-bit.
Prefetchable Có thể prefetch Quan trọng khi allocate resource/window.

Firmware probe BAR size như thế nào?

Một flow kinh điển:

Save original BAR
Write 0xFFFFFFFF to BAR
Read back mask
Calculate size
Restore/assign base address
01 Save

Lưu giá trị BAR cũ

Tránh phá cấu hình nếu đã được set.

02 Probe

Ghi all 1

Device trả về mask cho biết size yêu cầu.

03 Calc

Tính size

Mask càng nhiều bit 0 phía dưới thì vùng cần càng lớn.

04 Assign

Ghi base address

Firmware cấp MMIO/I/O base hợp lệ.

BAR size không được khai báo bằng text, firmware phải probe qua register.

Ví dụ thực tế

BAR0 size  = 16 KB
BAR0 base  = FEBC0000
Command   |= Memory Space Enable | Bus Master Enable

Sau đó driver có thể access register bằng MMIO:

MmioWrite32 (Bar0 + RegisterOffset, Value);
Value = MmioRead32 (Bar0 + StatusOffset);

Common pitfall

BAR đã có base address không có nghĩa device đã hoạt động. Command Register vẫn cần enable Memory Space hoặc Bus Master tùy device.

Checklist BAR

Bài liên quan

Nguồn tham khảo public

Thấy nội dung này hữu ích?

Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.

Nội dung liên quan

Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.