Я пытаюсь понять, как работает PCI Express, чтобы я мог написать драйвер Windows, который может читать и записывать на пользовательское устройство PCI Express без встроенной памяти.
Я понимаю, что регистры базовых адресов (BAR) в пространстве конфигурации PCIE содержат адрес памяти, на который PCI Express должен отвечать / которому разрешено выполнять запись. (Это правильно понял?)
Мои вопросы следующие:
- Что такое «специфичный для шины адрес» по сравнению с физическим адресом, когда речь идет о PCIE?
- Когда и как BAR заполняется адресами? Отвечает ли драйвер за распределение памяти и запись адреса на периферийный BAR?
- Можно ли изменить адреса в BAR во время выполнения?
- Используется ли DMA при передаче данных с периферийного устройства в память хоста?
Я ценю ваше время.
С наилучшими пожеланиями,