Re: PCI burst transactions
От: Геннадий Майко США  
Дата: 25.10.06 07:28
Оценка:
Здравствуйте, andykang,

A>День добрый. Никогда прежде не работал с PCI, однако жизнь заставила. Чтение конфигурационного пространства и чтение/запись в режиме PIO уже освоил. Хочется попробовать burst mode. Платформа x86 (embedded). Есть development board с загруженным ядром PCI. Инфы никакой нет на данный момент, опыта в данной области почти ноль. Может кто подсказать, в каком направлении рыть, что почитать? Может ссылочки на примеры, как это программить. Спецификация PCI есть и иногда почитывается, однако этого явно недостаточно.

--
Прежде всего вопрос — как Вы хотите проверить, что обращение к Вашей плате действительно идет в "burst mode"? Быть может, Вы и так иногда работаете в этом режиме.


При работе с PCI устройствами у программы очень мало возможностей влиять на работу PCI устройств в "burst mode". Даже если Вам и удасться каким-то способом беспечить условия для работе в режиме burst со стороны PCI initiater, PCI target может в любой момент завершить транзакцию.

Однако, в зависимости от конфигурации всех PCI bus и места Вашего устройства в этой иерархии, host PCI и PCI-to-PCI bridge могут самостоятельно объединять некоторые транзакции в burst'ы (см. i.3.2.6 "Combining, merging and collapsing" в PCI Local bus Specification). Поэтому, в принципе, как-то повлиять на эту возможность можно с помощью конфигурация этих bridg'ей; однако, например, Windows не позволяет добраться к регистрам PCI-to-PCI bridge и управляет ими самостоятельно.
Вполне возможно, что в Вашем PCI-устройстве есть внутренние FIFO, конфигурацию которых можно изменить. Это может косвенно повлиять на работу этого устройства в "burst mode".

Мы как-то экспериментировали с одним из наших PCI-устройствов для оценки использования burst при записи в режиме PIO. В процедуре обработки прерывания от этого устройства (это более-или менее гарантировало "непрерываемость" этого кода) мы в цикле записывали 512 DWORD в устройство и наблюдали, что происходит на PCI bus с помощью логического анализатора. Обычно на этой шине мы видели burst'ы в 16-32 DWORD. Можете попробовать проделать то же самое.

Если Ваше устройство поддерживает передачу данных с помощью DMA и является DMA master, то очень часто такая передача данных происходит в режиме burst.

C уважением,
Геннадий Майко.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.