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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Altera Remote Ststem Update
doom13
сообщение Jan 21 2015, 13:59
Сообщение #1


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Добрый день.
В проекте присутствует ядро Remote update, всё управление происходит с помощью Nios II. Есть две конфигурации: factory и application.
Factory заливается по адресам 0x0, application - 0xd00000. Включается питание запускается factory конфигурация, которая через Remote Update загружает конфигурацию application.
Алгоритм работы для factory следующий:
Код
rd_data = rsu_controller_rd_reconf_src_condition((void *)RSU_CONTROLLER_BASE);
if((rd_data == RECONF_SOURCE_POR) || (rd_data == RECONF_SOURCE_EXTERNAL_RST) || (rd_data == RECONF_SOURCE_LOGIC_TRIGGERED))
{
    rsu_controller_wr_config_mode((void *)RSU_CONTROLLER_BASE, CONFIG_MODE_APPLICATION);
    rsu_controller_wr_wdt_timeout((void *)RSU_CONTROLLER_BASE, RSU_WDT_TIMEOUT_VALUE);
    rsu_controller_write_param((void *)RSU_CONTROLLER_BASE, PARAM_WDT_ENABLE, 1);
    rsu_controller_write_param((void *)RSU_CONTROLLER_BASE, PARAM_PAGE_SELECT, APPLICATION_PAGE_START_ADDRESS);
    rsu_controller_reconfig((void *)RSU_CONTROLLER_BASE);
}


Алгоритм работы для application:
Код
rd_data = rsu_controller_rd_config_mode((void *)RSU_CONTROLLER_BASE);
if(rd_data == CONFIG_MODE_APPLICATION)
{
    rd_data = rsu_controller_read_param((void *)RSU_CONTROLLER_BASE, PARAM_WDT_ENABLE);
    if(rd_data)
    {
         rsu_controller_reset_timer((void *)RSU_CONTROLLER_BASE, 1); // сигнал разрешения сброса wdt, разрешает подачу меандра на вход reset_timer ядра Remote Update
    }
}


Для удобства перепрошивки довавлена функция реконфигурации, алгоритм которой:
Код
#if __REMOTE_SYSTEM_UPDATE_CONFIGURATION_MODE == CONFIG_MODE_FACTORY
    rsu_controller_wr_config_mode((void *)RSU_CONTROLLER_BASE, CONFIG_MODE_FACTORY);
    rsu_controller_write_param((void *)RSU_CONTROLLER_BASE, PARAM_WDT_ENABLE, 0);
    rsu_controller_wr_wdt_timeout((void *)RSU_CONTROLLER_BASE, 0);
    rsu_controller_write_param((void *)RSU_CONTROLLER_BASE, PARAM_PAGE_SELECT, FACTORY_PAGE_START_ADDRESS);
    rsu_controller_reconfig((void *)RSU_CONTROLLER_BASE);
#elif __REMOTE_SYSTEM_UPDATE_CONFIGURATION_MODE == CONFIG_MODE_APPLICATION
    rsu_controller_reconfig((void *)RSU_CONTROLLER_BASE);
#endif


Вопросы в следующем:
1) Заливаем factory, application, переключаем питание - всё работает, даём команду Reconfig - всё перезапускается.
2) Залит только factory. По включению питания запустилось, дали команду Reconfig - всё ок.
3) Проблемная ситуация 1: Находимся в режиме application и перезаливаем прошивку для application. Что-то легло - прошивка залилась неправильно/частично, даём команду Reconfig и FPGA уже не стартует (а должна была остаться конфигурация factory).
Сбрасываем питание, запускается factory и Reconfig для него уже работает.
4) Проблемная ситуация 2: Включаем питание. Для application залита какая-то ерунда - загружается конфигурация factory. Factory перезаливает прошивку для application, делаем Reconfig и всё опять дохнет (а должна была стартануть конфигурация application). По сбросу питания опять всё запускается, переходит в режим application и нормально работает.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 23 2015, 04:08
Сообщение #2


Гуру
******

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



посмотрел у себя в коде, все аналогично. возникли вопросы: 1) почему в factory не рассматривается как источник сброса wdt, 2) почему wdt отключен в функции реконфигурации?
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 23 2015, 06:38
Сообщение #3


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(vadimuzzz @ Jan 23 2015, 07:08) *
посмотрел у себя в коде, все аналогично. возникли вопросы: 1) почему в factory не рассматривается как источник сброса wdt?

Предполагаю, что factory надёжная (рабочая) конфигурация, а в ней я могу просто отключать wdt (в application такой возможности нет - использую сброс).

Цитата(vadimuzzz @ Jan 23 2015, 07:08) *
2) почему wdt отключен в функции реконфигурации?

Это он отключён во втором варианте работы, где перезагрузка должна произойти с адресов factory. Изначально было так:
Код
#if __REMOTE_SYSTEM_UPDATE_CONFIGURATION_MODE == CONFIG_MODE_FACTORY
    rsu_controller_wr_config_mode((void *)RSU_CONTROLLER_BASE, CONFIG_MODE_APPLICATION);
    rsu_controller_wr_wdt_timeout((void *)RSU_CONTROLLER_BASE, RSU_WDT_TIMEOUT_VALUE);
    rsu_controller_write_param((void *)RSU_CONTROLLER_BASE, PARAM_WDT_ENABLE, 1);
    rsu_controller_write_param((void *)RSU_CONTROLLER_BASE, PARAM_PAGE_SELECT, APPLICATION_PAGE_START_ADDRESS);
    rsu_controller_reconfig((void *)RSU_CONTROLLER_BASE);
#elif __REMOTE_SYSTEM_UPDATE_CONFIGURATION_MODE == CONFIG_MODE_APPLICATION
    rsu_controller_reconfig((void *)RSU_CONTROLLER_BASE);
#endif

Но оба варианта не работают.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 23 2015, 06:56
Сообщение #4


Гуру
******

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



Цитата(doom13 @ Jan 23 2015, 12:38) *
Предполагаю, что factory надёжная (рабочая) конфигурация, а в ней я могу просто отключать wdt (в application такой возможности нет - использую сброс).

но если app-прошивка сбойная, то wdt вернет к factory. если же вы не включите wdt, то после перехода в application со сбойной прошивкой, ПЛИС повиснет. вот мне и непоятно - откуда 2 варианта функции реконфигурации для factory?
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 23 2015, 07:07
Сообщение #5


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



С Ваших слов возникло предположение по поводу необходимости сброса wdt для factory. Счас буду пробовать.
Цитата(vadimuzzz @ Jan 23 2015, 09:56) *
но если app-прошивка сбойная, то wdt вернет к factory. если же вы не включите wdt, то после перехода в application со сбойной прошивкой, ПЛИС повиснет. вот мне и непоятно - откуда 2 варианта функции реконфигурации для factory?

По поводу вариантов реконфигурации. Сначала пробовал для factory перенаправлять на application, а потом ещё было предположение перезагружать сам factory который уже и будет стартовать application (эти переходы только если всё запустилось и даём команду на реконфигурацию - внешняя команда).

UPP:
Но как тогда работает пункт №2 (залит factory и кривой application)? Включаю питание, а он остаётся в режиме factory. Или после переполнения wdt он сбросит FPGA (в factory) и далее остановится? Ведь если он не остановится, то в данном случае должен быть постоянный реконфиг (factory не сбрасывает wdt).
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 23 2015, 08:06
Сообщение #6


Гуру
******

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



Цитата
UPP:
Но как тогда работает пункт №2 (залит factory и кривой application)? Включаю питание, а он остаётся в режиме factory. Или после переполнения wdt он сбросит FPGA (в factory) и далее остановится? Ведь если он не остановится, то в данном случае должен быть постоянный реконфиг (factory не сбрасывает wdt).

я так понимаю собственно в factory он не нужен: wdt включается только перед попыткой загрузки application. кстати, мне кажется, что переписывать factory не стоит в принципе. т.к. если что-то отвалится при обновлении, вернуться будет не к чему.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 23 2015, 08:30
Сообщение #7


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(vadimuzzz @ Jan 23 2015, 11:06) *
я так понимаю собственно в factory он не нужен: wdt включается только перед попыткой загрузки application. кстати, мне кажется, что переписывать factory не стоит в принципе. т.к. если что-то отвалится при обновлении, вернуться будет не к чему.

Так вот и получаем, что при переходе на application wdt всегда включен (код для factory - всё включено и делаем переход; функция реконфигурации (вариант с переходом на адреса application) - так же всё включено).
Переделал немного код. Старт программы:
Код
#if __REMOTE_SYSTEM_UPDATE_CONFIGURATION_MODE == CONFIG_MODE_FACTORY

    rsu_controller_reset_timer((void *)RSU_CONTROLLER_BASE, 1); // разрешение периодического сброса wdt

    rd_data = rsu_controller_rd_reconf_src_condition((void *)RSU_CONTROLLER_BASE);
    if((rd_data == RECONF_SOURCE_POR) || (rd_data == RECONF_SOURCE_EXTERNAL_RST) || (rd_data == RECONF_SOURCE_LOGIC_TRIGGERED))
    {
        rsu_controller_wr_config_mode((void *)RSU_CONTROLLER_BASE, CONFIG_MODE_APPLICATION);
        rsu_controller_wr_wdt_timeout((void *)RSU_CONTROLLER_BASE, RSU_WDT_TIMEOUT_VALUE);
        rsu_controller_write_param((void *)RSU_CONTROLLER_BASE, PARAM_WDT_ENABLE, 1);
        rsu_controller_write_param((void *)RSU_CONTROLLER_BASE, PARAM_PAGE_SELECT, APPLICATION_PAGE_START_ADDRESS);
        rsu_controller_reconfig((void *)RSU_CONTROLLER_BASE);
    }

#elif __REMOTE_SYSTEM_UPDATE_CONFIGURATION_MODE == CONFIG_MODE_APPLICATION

    rsu_controller_reset_timer((void *)RSU_CONTROLLER_BASE, 1); // разрешение периодического сброса wdt

#endif


Функция реконфигурации:
Код
#if __REMOTE_SYSTEM_UPDATE_CONFIGURATION_MODE == CONFIG_MODE_FACTORY
    rsu_controller_wr_config_mode((void *)RSU_CONTROLLER_BASE, CONFIG_MODE_APPLICATION);
    rsu_controller_wr_wdt_timeout((void *)RSU_CONTROLLER_BASE, RSU_WDT_TIMEOUT_VALUE);
    rsu_controller_write_param((void *)RSU_CONTROLLER_BASE, PARAM_WDT_ENABLE, 1);
    rsu_controller_write_param((void *)RSU_CONTROLLER_BASE, PARAM_PAGE_SELECT, APPLICATION_PAGE_START_ADDRESS);
    rsu_controller_reconfig((void *)RSU_CONTROLLER_BASE);
#elif __REMOTE_SYSTEM_UPDATE_CONFIGURATION_MODE == CONFIG_MODE_APPLICATION
    rsu_controller_reconfig((void *)RSU_CONTROLLER_BASE);
#endif

Результат тот же. По включению питания работает всегда (не зависит от наличия и корректности application, т.е. либо загрузит application, либо останется в factory). Если был залит битый application, a factory перезаливает новый правильный application во флэш и пытается его стартануть, то всё виснет. Если всё стартануло, application пишет во флэш битый application а потом переходит на factory, чтобы перезапустить новую прошитую прошивку, - всё повиснет.

Ещё накопал вот это, но не могу понять относится оно или нет к моему случаю.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 23 2015, 09:00
Сообщение #8


Гуру
******

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



Цитата(doom13 @ Jan 23 2015, 14:30) *
Ещё накопал вот это, но не могу понять относится оно или нет к моему случаю.

если это оно, должна дергаться нога nSTATUS
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 23 2015, 09:22
Сообщение #9


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(vadimuzzz @ Jan 23 2015, 12:00) *
если это оно, должна дергаться нога nSTATUS


Для обоих ситуаций
Цитата
Если был залит битый application, a factory перезаливает новый правильный application во флэш и пытается его стартануть, то всё виснет. Если всё стартануло, application пишет во флэш битый application а потом переходит на factory, чтобы перезапустить новую прошитую прошивку, - всё повиснет.

nSTATUS дёргается (после сброса питания всё восстанавливается). Что думать, что это их баг, пытаться задействовать pof checking? Но ситуация отлична от описанной в указанных доках, одинаково только поведение nSTATUS.

UPP: из их доки понял, что без pof checking вообще ничего работать не должно?!
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 23 2015, 10:36
Сообщение #10


Гуру
******

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



Цитата(doom13 @ Jan 23 2015, 15:22) *
nSTATUS дёргается (после сброса питания всё восстанавливается). Что думать, что это их баг, пытаться задействовать pof checking? Но ситуация отлична от описанной в указанных доках, одинаково только поведение nSTATUS.

хз, но проверить стоит
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 23 2015, 10:51
Сообщение #11


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Нашёл ещё одну глючную ситуацию, работает application (работа начиналась с включения питания factory запускал application) и посылается новая прошивка для application (прошивка правильная). Прошивка записывается во флэш. После перепрошивки конфигурационной флэшки пытаюсь сделать RECONFIG, а оно опять дохнет. После переключения питания возобновляет работу. Т.е. получается, что RECONFIG не работает именно после перепрошивки конфигурационной флэшки (для описанных выше ситуаций везде присутствовала перезапись флэша!!!).
Если перезаписи флэша не было. Выполняем RECONFIG для factory с битым application, то работает правильно - остаётся в factory. Если выполнять RECONFIG для аpplication (без записи флэшки), так же работает - сбрасывается на factory, который опять же запустит application.
Очень похоже на какую-то проблему с интерфейсом конфигурационной флэшки. Для прошивки используется EPCS/EPCQx1 flash controller, может быть проблема в нём, что-то не могут поделить c Remote Update?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 23 2015, 11:35
Сообщение #12


Гуру
******

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



Цитата(doom13 @ Jan 23 2015, 16:51) *
Очень похоже на какую-то проблему с интерфейсом конфигурационной флэшки. Для прошивки используется EPCS/EPCQx1 flash controller, может быть проблема в нём, что-то не могут поделить c Remote Update?

а сигналы с/на флешку идут, когда nSTATUS дергается?
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 23 2015, 11:40
Сообщение #13


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(vadimuzzz @ Jan 23 2015, 14:35) *
а сигналы с/на флешку идут, когда nSTATUS дергается?

Да идут.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 23 2015, 12:06
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



может сократить пути и уменьшить число вариантов загрузок или задача решить именно в таком раскладе?
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 23 2015, 12:10
Сообщение #15


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Golikov A. @ Jan 23 2015, 15:06) *
может сократить пути и уменьшить число вариантов загрузок или задача решить именно в таком раскладе?

Задача сделать две прошивки в конфигурационной флэшке (нестираемый или стираемый c запросом прав доступа factory и стираемый при обновлении ПО application).
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:55
Рейтинг@Mail.ru


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