Я обращаюсь за помощью, прежде всего к экспертам VMEbus.
Я работаю над проектом, целью которого является настройка канала связи от контроллера PowerPC реального времени (Emerson MVME4100), работающего под управлением vxWorks 6.8, до компьютера Intel с Linux (Xembedded XVME6300), работающего под управлением Debian 6 с ядром 2.6.32. Этот канал работает по шине VME; оба компьютера находятся в корпусе VME и оба используют набор микросхем Tundra Tsi148. Компьютер Intel явно настроен как системный контроллер, а компьютер реального времени — нет.
Установка: Для компьютера Intel я написал специальный драйвер, который создает буфер ядра размером 4 МБ и передает его по шине VME посредством подчиненного окна; Для компьютера реального времени я настраиваю передачу DMA для многократной пересылки блоков размером ровно 48640 байт; заполняется байтами тестовых данных (нули, единицы, двойки и т. д.) в быстрой последовательности (раз в 32 миллисекунды, если возможно). Для компьютера Intel я читаю буфер ядра из драйвера, чтобы увидеть, правильно ли поступают данные, с запускаемая вручную программа Python.
Ожидание: я ожидаю увидеть те же данные (нули, единицы и т. д.) из программы Python. Я ожидаю, что время передачи примерно соответствует выбранной скорости шины (обычно 290 мкс или 145 мкс, в зависимости от скорости шины), плюс разумные накладные расходы на настройку DMA (до 10 мкс? Я готов принять большие числа, скажем, сотни мкс, если это то, что обычно нужно автобусу)
Результат:
- Иногда данные вообще не приходят, а время "передачи" ~2000 мкс.
- Иногда данные приходят надежно, но время передачи составляет ~98270 мкс или 98470 мкс, в зависимости от выбранной скорости шины.
Вопросы: Как я могу сделать передачу надежной и уменьшить эти ужасные задержки? В каком общем направлении мне следует искать дальше?
(Я хотел бы пометить VMEbus, если бы мог)
Большое спасибо