Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Remote Update для Cyclone 3
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
djhall
Здравствуйте,
хочу добавить функцию remote upgrate в свой проект, но возникло некоторое не допонимание. Если кто знает объясните, пожалуйста.
Задача - сделать возможность обновления прошивки в EPCS, т.е. простенький процессор в качестве Factory Configuration и уже нормальный
в качестве Application Configuration. В общем всё по описанию, как обычно.
А не понятно мне как найти сдвиг второй прошивки относительно первой? Ведь этот адрес нужно записывать в Remote Update Controller для переконфигурации.
Вторую прошивку (Application Configuration) я собираюсь передовать по USB сохранять в оперативной памяти и далее записывать во флэш память стандартными средствами. Но какой файл мне передовать .flash или какой-то другой?

Заранее благодарю.
Копейкин
Чтобы найти адрес смещения для второй страницы прошивки,
я использовал конвертер файлов программирования.
1) Q9.1sp2 File->Convert programming files. Открывается окно конвертера.
2) Выбираю тип выходного файла *.jic, ставлю галку Memory map file, выбираю конф. ПЗУ.
3) Задаю Flash loader, тип кристалла.
4) Подключаю SOF файл, т.е. прошивку загрузчика.
5) Генерирую файл прошивки.
Таким образом я получаю адрес конца прошивки в файле *.map и файл *.jic,
код загрузчика, который можно заливать простым программатором от Альтеры.
Дальнейшее будет зависеть от Вашего загрузчика,
какой он будет поддерживать формат.
Может стоит посмотреть формат *.hex или *.rbf?
djhall
Решил я сначала сделать по простому. Записать прогамматором две прошивки с Nios по разным адресам: factory в 0x00000000 и application в 0x000E0000. Причём это не две прошивки, а одна и таже только с программно изменённой частотой мигания светодиода.
Применил следующий скрипт для получения сдвига application прошивки:
sof2flash --epcs --input="factory_image.sof" --output="factory_image.flash"
elf2flash --epcs --after="factory_image.flash" --input="rsu_1.elf" --output="rsu_1.flash"
cat factory_image.flash rsu_1.flash > hw_sw_image.flash
nios2-elf-objcopy -I srec -O srec --change-addresses=0x000E0000 hw_sw_image.flash hw_sw_image_a.flash --srec-len=0x20 --srec-forceS3
nios2-flash-programmer --epcs --base=0x21800 "hw_sw_image_a.flash"

А factory прошивку с уменьшенной частотой мигания светодиода запрогамировал чарез Flash Programmer.

Включаю - работает прошивка factory. Через отладчик сменяю прошивку на application следующими командами:
IOWR( REMOTE_UPDATE_CYCLONEIII_0_BASE, 0x3, 0 );
IOWR( REMOTE_UPDATE_CYCLONEIII_0_BASE, 0x4, address >> 2);
IOWR( REMOTE_UPDATE_CYCLONEIII_0_BASE, 0x20, 0x1 );

Видно что происходит перепрошивка и вновь работает прошивка factory (по частоте мигания светодиода).

Решил вместо прошивки application с Nios, сделать обычный аппаратный счётчик чтобы моргал светодиодик.
Сделал, запрограммировал скриптом как в предыдущем случае (без программы ясное дело) по адресу 0x000E0000, переключил прошивку - работает. Светодиодик моргает так как должен.

Т.е. касательно предыдущего случая выходит что прошивка ПЛИС грузится, а программа для Nios нет.
Знает кто-нибудь как сделать переключение между двумя процессорами? Есть тут связь с boot_copier?
Konst_777
Цитата(djhall @ Nov 11 2012, 17:41) *
nios2-elf-objcopy -I srec -O srec --change-addresses=0x000E0000 hw_sw_image.flash hw_sw_image_a.flash --srec-len=0x20 --srec-forceS3

Попробуйте использовать --set-start вместо --change-addresses. Или преобразуйте "hw_sw_image.flash" в "hw_sw_image.bin". А затем используйте "bin2flash" и уже здесь задайте смещение в EPCS для приложения.
VG2903
Добрый день!
Хочу сделать аналогично. Имеется 2 конфигурации ПЛИС, и соответственно 2 программы для NIOS (для каждой из них). Но мне не понятен следующий момент.
Дело в том, что программный код для NIOS храню в EPCS, при этом сам код выполняется из On-Chip-памяти ПЛИС типа MRAM (не инициализируемая память, поэтому и приходится хранить программу в EPCS, а затем загрузчик копирует её во внутреннюю память и выполняет). Для Factory-прошивки всё понятно, загрузчик знает по какому адресу находится программа для NIOS. А как быть с Application-конфигурацией, где адрес расположения программы NIOS в EPCS будет другим? Каким образом можно этот адрес указать при компиляции или сборке проекта для модификации стандартного загрузчика NIOS?
Потому как думается мне, если оставить всё как есть, то для Application-конфигурации будет загружена программа NIOS, которая была для Factory-конфигурации. Как этот момент обойти?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.