Всем добрый день!
Предлагается обсудить возможность изменить прошивку ПЛИС, подключенной к компьютеру с ОС Windows XP по шине PCIe (интерфейс PCIe построен также на ПЛИС) без перезагрузки системы. Прошивка загружается в ПЛИС через интерфейс JTAG.
Возникающие вопросы:
1. Надо ли вносить изменения в функциональный драйвер устройства (WDM драйвер, полностью поддерживающий Plug and Play)?
2. Необходимо ли предусматривать какие-либо дополнительные аппаратные средства?
3. Какова может быть процедура отключения устройства, обновления прошивки, включения устройства?
Скажу сразу, что обновление прошивки без перезагрузки оказывается возможным, если новая прошивка не меняет PCIe конфигурацию устройства (или просто требует те же ресурсы, что и старая). В этом случае достаточно просто disable устройство, обновить прошивку, сделать enable. Если же устройство с новой прошивкой будет требовать другие ресурсы, то необходима будет перезагрузка, что не устраивает.
Я обратил внимание, что изменение прошивки имеет много общего с процедурой Hot Plug например ExpressCard. В этом случае при подключении ExpressCard хост контроллер PCIe выдает прерывание Link Train Detected, которое передается Windows через интерфейс ACPI. Обработчик прерывания ACPI инициирует процесс перечисления устройств на шине, находит новое подключенное устройство и загружает его драйвер.
Таким образом, при изменении прошивки необходимо каким-либо образом инициировать процесс перечисления устройств на шине, чтобы система могла выделить новые ресурсы. А отсюда возникает новый вопрос:
4. Как это сделать? ))