Радиотехнический сайт RADIOTRACT

Радиотехника и электроника для разработчиков и радиолюбителей

Информация

 

 

Справочные данные на радиоэлектронные компоненты, приборы, средства связи и измерений. Радиотехническая литература.

Общая

Микроконтроллеры

ПЛИС

Измерения

Радиостанции

Библиотека

Справочники

Доска объявлений

Объявления о покупке и продаже радиокомпонентов. Спрос и предложение на различные радиодетали и приборы.

Куплю

Продам

Магазин

Программы

Полезные программы для радиолюбителей и разработчиков радиоэлектроники.

Радиотехника

Интернет

Калькуляторы

Другие

Мы в соцсетях

  

ПЛИС

ПЛИС\Удаленная прошивка ПЛИС\Программная реализация

Программная реализация удалённой прошивки ПЛИС

Осталось написать библиотеку функций или драйвер для реализации основных функциональных возможностей, а именно:

  • Определение типа загруженной конфигурации в ПЛИС (базовая или рабочая)
  • Попытка загрузки рабочей версии программного обеспечения в ПЛИС, если текущая конфигурация является базовой
  • Определение статуса загрузки рабочей конфигурации в ПЛИС (успешно или с ошибкой, определение типа ошибки)
Можно, конечно, организовать доступ к регистрам модуля s2_remote_update через функции записи/чтения порта IOWR(...) и IORD(...), однако лучше оформить в виде законченных функций. При этом при изменении аппаратной реализации, можно будет ограничиться изменением драйвера, не затрагивая код основной программы.

В памяти EEPROM будут храниться признак, занимающий 1 байт адресного пространства. Признак может принимать следующие значения :

  • 0xFF - Application-конфигурация отсутствует
  • 0x00 - Application-конфигурация имеется, но ещё не запускалась ни разу (не проверена на работоспособность)
  • 0x01 - Application-конфигурация имеется и уже успешно запускалась (работоспособна)
  • 0x02 - Application-конфигурация имеется, но не работоспособна (была неуспешная попытка запуска) - код может быть замененн на 0xFF
При этом последовательность действий по обновлению этого признака будет такой. Перед началом записи в EPCS-конфигуратор новой Application-конфигурации, в EEPROM по адресу eeprom_status_config_addr записывается код 0xFF. Далее производится запись в EPCS-конфигуратор новой Application-конфигурации. После успешной записи в EEPROM по адресу eeprom_status_config_addr записывается код 0x00. После этого, если требуется загрузка новой конфигурации, выполняется команда сброса.
Функция Ru_CheckAndLoadApplication проверяет тип текущей конфигурации. Если текущая конфигурация - рабочая и это её первый запуск, то в байт-признак записывается значение 0x01, указывая на то, что имеется рабочая конфигурация. Если текущая конфигурация - базовая и загружена в результате ошибки реконфигурации, то в байт-признак записывается значение 0xFF, указывая на то, что рабочая конфигурация отсутствует и не следует при следующем включении пытаться её загрузить. В этом случае будет функционировать только базовая конфигурация, которая может выполнять все функции рабочей конфигурации, как было оговорено ранее.

В любом случае, после включения будет загружена базовая конфигурация, в которой менеджер конфигураций (функция Ru_CheckAndLoadApplication из примера) выберет и выполнит загрузку рабочей конфигурации, если такая имеется. В случае ошибки загрузки рабочей конфигурации будет загружена снова базовая конфигурация, а в дальнейшем не будет производиться попыток загрузить рабочую конфигурацию до тех пор, пока на её место не будет записана новая рабочая конфигурация (до тех пор, пока байт-признак в памяти EEPROM не будет сброшен в 0xFF).
Данный алгоритм позволяет обезопаситься от загрузки некорректной прошивки и автоматически вернуться к базовой прошивке, которая всегда остаётся работоспособной, так как не подлежит изменению. Тем самым устройство остаётся работоспособным в любом случае. Текст программы драйвера с примерами написан на языке С.

По поводу адресов хранения конфигураций в памяти EPCS. Адреса должны быть кратны границам секторов, так как перед записью в память FLASH необходимо очистить весь сектор целиком. Базовая конфигурация будет располагаться по адресу 0x000000. Объём, занимаемый конфигурационным файлом для ПЛИС Stratix II EP2S60 равен 16951824 бит (2118978 байт). Размер конфигурационного файла зависит от ПЛИС. Для ПЛИС семейства Stratix II эти размеры указаны в таблице.

Объём конфигурационного файла Stratix II

Размер сектора конфигуратора EPCS64 равен 65536 байт, количество секторов 128. Отсюда следует, что конфигурационный файл занимает в памяти EPCS64 33 сектора (при расчётах необходимо округлять в большую сторону). Так как после конфигурационных данных располагается программа для процессора NIOS, то необходимо учесть и её размер. В нашем случае программа для NIOS не превышает по объёму 64 КБайт, то есть 1 сектор. Итого, полный объём, занимаемый конфигурационными данными и программой для NIOS составляет 33+1=34 сектора. При этом, начиная с сектора 35 можно размещать рабочую конфигурацию. При этом всего можно разместить 128 / 34 = 3 различных конфигурации и ещё останется немного свободного места. 34 сектора по 65536 байт соответствуют размеру итогового файла прошивки 34*65536=2228224 байт (2,125 МБайт). Ниже в таблице приведены диапазоны адресов для некоторых секторов. Нумерация секторов начинается от 0. Более подробную информацию можно найти в документации на микросхему EPCS64.
Диапазоны адресов для секторов в EPCS64


Комментарии

comments powered by Disqus