реклама на сайте
подробности

 
 
> Обновить прошивку Nios2 Gen2, Если процессор исполняет код прямо из флэшки
DmitryR
сообщение May 12 2016, 08:47
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Доброго дня,

есть проект на MAX10. Планируется исполнять код прямо из onchip_flash (так как в память код не помещается по объёму), обновление тоже получает Nios через некоторый канал связи, реализовать протокол которого аппаратно довольно сложно. Вопрос, как красиво реализовать обновление флэшки? У меня крутятся всякие идеи, но все они какие-то проблемные или кривые:
- как-то заставить линкер куски программы, отвечающие за программирование флешки, разместить компактно, и вручную копировать из в ОЗУ в нужный момент расчитывая, что драйвер флэшки написан как позиционно-независимый
- сделать отдельный процессор с программой только под программирование, код которого сразу будет размещён в ОЗУ
- написать аппаратный блок, который будет заниматься программированием

Идеально было бы конечно, если бы можно бы было приказать линкеру нужный код сразу слиновать по адресам ОЗУ, и закинуть его туда при старте (типа как это делает опция enable_alt_load). Однако уме не приложу, как заставить эту опцию работать только для некоторой части программы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Stewart Little
сообщение May 12 2016, 09:12
Сообщение #2


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Изучайте мануалы на предмет Remote System Upgrade


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
DmitryR
сообщение May 12 2016, 09:34
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Я не понимаю, какое отношение это решение имеет к моей проблеме. Там описано, как обновить конфигурацию FPGA, а не программу NIOS.
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение May 12 2016, 09:39
Сообщение #4


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(DmitryR @ May 12 2016, 12:34) *
Я не понимаю, какое отношение это решение имеет к моей проблеме. Там описано, как обновить конфигурацию FPGA, а не программу NIOS.

И конфигурация, и исполняемый код живут во флэше. Вот как обновлять содержимое флэша Вы там и посмотрите.
Понятное дело, это только один из вариантов. Зато проверенный sm.gif


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
DmitryR
сообщение May 12 2016, 09:53
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Stewart Little @ May 12 2016, 13:39) *
И конфигурация, и исполняемый код живут во флэше. Вот как обновлять содержимое флэша Вы там и посмотрите.
Понятное дело, это только один из вариантов. Зато проверенный sm.gif

В указанном проекте код NIOS лежит в QSPI flash, а описан процесс обновления CFM. Мне этот случай предельно ясен, но это не мой случай.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение May 12 2016, 23:39
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(DmitryR @ May 12 2016, 15:53) *
В указанном проекте код NIOS лежит в QSPI flash, а описан процесс обновления CFM. Мне этот случай предельно ясен, но это не мой случай.

а там разницы почти нет, немного адреса различаются. в доке на RU это д.б. расписано
Go to the top of the page
 
+Quote Post
DmitryR
сообщение May 13 2016, 09:53
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(vadimuzzz @ May 13 2016, 03:39) *
а там разницы почти нет, немного адреса различаются. в доке на RU это д.б. расписано

Разница заключается в том, что в указанном примере NIOS исполняется из одного места, а обновляет другое. Мне же надо обновить флешку, из которой непосредственно исполняется NIOS.
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение May 13 2016, 11:06
Сообщение #8


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(DmitryR @ May 13 2016, 12:53) *
Разница заключается в том, что в указанном примере NIOS исполняется из одного места, а обновляет другое. Мне же надо обновить флешку, из которой непосредственно исполняется NIOS.
Подсказываю - у MAX 10 флэш организован посекторно, сектора делятся на страницы. У qsys'овского модуля OnChip Flash есть режим записи.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
DmitryR
сообщение May 13 2016, 12:50
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Stewart Little @ May 13 2016, 15:06) *
Подсказываю - у MAX 10 флэш организован посекторно, сектора делятся на страницы. У qsys'овского модуля OnChip Flash есть режим записи.

Программа NIOS находится в странице 0 сектора 0 UFM0. При стирании этой страницы NIOS перестаёт работать, так как пропадает программа, которую он в данный момент исполняет. Так понятнее суть проблемы?

Цитата(gridinp @ May 13 2016, 14:58) *
по моему, чтобы разместить функцию в другом сегменте памяти, надо указать в BSP editor в Linker script
новую секцию и назвать её например .text2

потом в C в прототипе функции указать имя секции через атрибут
void func_name() __attribute__ ((section (".text2")));

Спасибо, это вроде то, что мне и надо. Однако остаётся ещё одна проблема: как заставить линкер сгенерить код, который скопирует это в ОЗУ? Опция enable_alt_load копирует только секции данных, а секции кода всё равно оставляет во флэш.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01449 секунд с 7
ELECTRONIX ©2004-2016