|
Remote update CycloneIII |
|
|
|
Jan 5 2011, 07:10
|

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

|
Цитата(Fynjisx @ Jan 5 2011, 15:46)  Привет Всем!Вопросы у меня по удаленной отладке. Что имеют в виду в документах, когда говорят об factory configuration? Всегда ли этот factory configuration file располагается по адресу 000?(во flash?) Я так понимаю что обновленная конфигурация называется у Alter'ы - aplication configuration. Короче хочу удаленно ообновить flash EPCS и не могу понять откуда(через какие пины поступает и в каком виде должна поступать новая конфигурация) приходит и каким образом записывается... адреса можно посмотреть в справочнике на циклон. ноги те же, что и в Active Serial. доступ через регистры, я пользовался такими макросами: CODE #ifndef ALTERA_AVALON_REMOTE_UPDATE_CYCLONEIII_REGS_H_ #define ALTERA_AVALON_REMOTE_UPDATE_CYCLONEIII_REGS_H_
#include "alt_types.h" #include "io.h"
#define IOADDR_ALTERA_REMUPD_CSTATE_CSM(base) __IO_CALC_ADDRESS_NATIVE(base, 0) #define IORD_ALTERA_REMUPD_CSTATE_CSM(base) IORD(base, 0) #define IOWR_ALTERA_REMUPD_CSTATE_CSM(base,data) IOWR(base, 0, data)
#define IOADDR_ALTERA_REMUPD_CSTATE_FCC(base) __IO_CALC_ADDRESS_NATIVE(base, 1) #define IORD_ALTERA_REMUPD_CSTATE_FCC(base) IORD(base, 1) #define IOWR_ALTERA_REMUPD_CSTATE_FCC(base,data) IOWR(base, 1, data)
#define IOADDR_ALTERA_REMUPD_CSTATE_WDT(base) __IO_CALC_ADDRESS_NATIVE(base, 2) #define IORD_ALTERA_REMUPD_CSTATE_WDT(base) IORD(base, 2) #define IOWR_ALTERA_REMUPD_CSTATE_WDT(base,data) IOWR(base, 2, data)
#define IOADDR_ALTERA_REMUPD_CSTATE_WDE(base) __IO_CALC_ADDRESS_NATIVE(base, 3) #define IORD_ALTERA_REMUPD_CSTATE_WDE(base) IORD(base, 3) #define IOWR_ALTERA_REMUPD_CSTATE_WDE(base,data) IOWR(base, 3, data)
#define IOADDR_ALTERA_REMUPD_CSTATE_BA(base) __IO_CALC_ADDRESS_NATIVE(base, 4) #define IORD_ALTERA_REMUPD_CSTATE_BA(base) IORD(base, 4) #define IOWR_ALTERA_REMUPD_CSTATE_BA(base,data) IOWR(base, 4, data)
#define IOADDR_ALTERA_REMUPD_CSTATE_FIOSC(base) __IO_CALC_ADDRESS_NATIVE(base, 6) #define IORD_ALTERA_REMUPD_CSTATE_FIOSC(base) IORD(base, 6) #define IOWR_ALTERA_REMUPD_CSTATE_FIOSC(base,data) IOWR(base, 6, data)
#define IOADDR_ALTERA_REMUPD_CSTATE_RTC(base) __IO_CALC_ADDRESS_NATIVE(base, 7) #define IORD_ALTERA_REMUPD_CSTATE_RTC(base) IORD(base, 7) #define IOWR_ALTERA_REMUPD_CSTATE_RTC(base,data) IOWR(base, 7, data)
#define IOADDR_ALTERA_REMUPD_P1STATE_CSM(base) __IO_CALC_ADDRESS_NATIVE(base, 8) #define IORD_ALTERA_REMUPD_P1STATE_CSM(base) IORD(base, 8)
#define IOADDR_ALTERA_REMUPD_P1STATE_FCC(base) __IO_CALC_ADDRESS_NATIVE(base, 9) #define IORD_ALTERA_REMUPD_P1STATE_FCC(base) IORD(base, 9)
#define IOADDR_ALTERA_REMUPD_P1STATE_WDT(base) __IO_CALC_ADDRESS_NATIVE(base, 0xA) #define IORD_ALTERA_REMUPD_P1STATE_WDT(base) IORD(base, 0xA)
#define IOADDR_ALTERA_REMUPD_P1STATE_WDE(base) __IO_CALC_ADDRESS_NATIVE(base, 0xB) #define IORD_ALTERA_REMUPD_P1STATE_WDE(base) IORD(base, 0xB)
#define IOADDR_ALTERA_REMUPD_P1STATE_BA(base) __IO_CALC_ADDRESS_NATIVE(base, 0xC) #define IORD_ALTERA_REMUPD_P1STATE_BA(base) IORD(base, 0xC)
#define IOADDR_ALTERA_REMUPD_P1STATE_FIOSC(base) __IO_CALC_ADDRESS_NATIVE(base, 0xE) #define IORD_ALTERA_REMUPD_P1STATE_FIOSC(base) IORD(base, 0xE)
#define IOADDR_ALTERA_REMUPD_P1STATE_RTC(base) __IO_CALC_ADDRESS_NATIVE(base, 0xF) #define IORD_ALTERA_REMUPD_P1STATE_RTC(base) IORD(base, 0xF)
#define IOADDR_ALTERA_REMUPD_P2STATE_CSM(base) __IO_CALC_ADDRESS_NATIVE(base, 0x10) #define IORD_ALTERA_REMUPD_P2STATE_CSM(base) IORD(base, 0x10)
#define IOADDR_ALTERA_REMUPD_P2STATE_FCC(base) __IO_CALC_ADDRESS_NATIVE(base, 0x11) #define IORD_ALTERA_REMUPD_P2STATE_FCC(base) IORD(base, 0x11)
#define IOADDR_ALTERA_REMUPD_P2STATE_WDT(base) __IO_CALC_ADDRESS_NATIVE(base, 0x12) #define IORD_ALTERA_REMUPD_P2STATE_WDT(base) IORD(base, 0x12)
#define IOADDR_ALTERA_REMUPD_P2STATE_WDE(base) __IO_CALC_ADDRESS_NATIVE(base, 0x13) #define IORD_ALTERA_REMUPD_P2STATE_WDE(base) IORD(base, 0x13)
#define IOADDR_ALTERA_REMUPD_P2STATE_BA(base) __IO_CALC_ADDRESS_NATIVE(base, 0x14) #define IORD_ALTERA_REMUPD_P2STATE_BA(base) IORD(base, 0x14)
#define IOADDR_ALTERA_REMUPD_P2STATE_FIOSC(base) __IO_CALC_ADDRESS_NATIVE(base, 0x16) #define IORD_ALTERA_REMUPD_P2STATE_FIOSC(base) IORD(base, 0x16)
#define IOADDR_ALTERA_REMUPD_P2STATE_RTC(base) __IO_CALC_ADDRESS_NATIVE(base, 0x17) #define IORD_ALTERA_REMUPD_P2STATE_RTC(base) IORD(base, 0x17)
#define IOADDR_ALTERA_REMUPD_CSR(base) __IO_CALC_ADDRESS_NATIVE(base, 0x20) #define IORD_ALTERA_REMUPD_CSR(base) IORD(base, 0x20) #define IOWR_ALTERA_REMUPD_CSR(base,data) IOWR(base, 0x20, data)
#define ALTERA_REMUPD_CSM_MSK (0x3) #define ALTERA_REMUPD_CD_MSK (0x1) #define ALTERA_REMUPD_WDT_MSK (0x1FFFFFFF) #define ALTERA_REMUPD_WDE_MSK (0x1) #define ALTERA_REMUPD_BARD_MSK (0xFFFFFF) #define ALTERA_REMUPD_BAWR_MSK (0x3FFFFF) #define ALTERA_REMUPD_FIOSC_MSK (0x1) #define ALTERA_REMUPD_RTC_MSK (0x1F)
#endif /*ALTERA_AVALON_REMOTE_UPDATE_CYCLONEIII_REGS_H_*/
собственно переключение из factory в application выглядит примерно так: Код #define EPCS_APP_OFFS 0x200000 ... IOWR_ALTERA_REMUPD_CSTATE_BA(REMOTE_UPDATE_CYCLONEIII_0_BASE,EPCS_APP_OFFS>>2); IOWR_ALTERA_REMUPD_CSR(REMOTE_UPDATE_CYCLONEIII_0_BASE,1); посмотрите AN521 и user guide на корку remote upgrade
|
|
|
|
|
Jan 5 2011, 07:22
|
студент
   
Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712

|
Цитата(vadimuzzz @ Jan 5 2011, 13:10)  ноги те же, что и в Active Serial Вы Nios используете, а без него как? 1.На сайте http://www.altera.com/products/devices/cyc...figuration.html видно, что от Development Location приходят на ПЛИС данные новой кофигурации (это какой-то файл созданный Квартусом?). 2.Эти данные приходят непонятно на какие ноги ПЛИС. Если приходят на ноги epcs, тогда зачем они показали стрелку на ПЛИС? Все таки через неё я думаю всё это хозяйство проходит.
--------------------
С Уважением...
|
|
|
|
|
Jan 5 2011, 07:28
|

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

|
Цитата(Fynjisx @ Jan 5 2011, 16:22)  Вы Nios используете, а без него как? ну через порты в корку каким-нибудь автоматом писать, там 2 регистра всего (в моем примере выше). Цитата 1.На сайте http://www.altera.com/products/devices/cyc...figuration.html видно, что от Development Location приходят на ПЛИС данные новой кофигурации (это какой-то файл созданный Квартусом?). 2.Эти данные приходят непонятно на какие ноги ПЛИС. Если приходят на ноги epcs, тогда зачем они показали стрелку на ПЛИС? Все таки через неё я думаю всё это хозяйство проходит. стрелки 1 и 3 - это SPI интерфейс флешки в вашем случае. т.е. в простейшем варианте 2 sof`а сконвертировать в бинарный формат и зашить программатором, а автомат в factory-прошивке попытается подгрузить application. некоторый трах будет с записью через SPI во флешку, но вы же без ниоса хотите, значит как настоящий джедай - через SPI- мастер
|
|
|
|
|
Jan 5 2011, 07:49
|
студент
   
Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712

|
Цитата(vadimuzzz @ Jan 5 2011, 13:28)  в простейшем варианте 2 sof`а сконвертировать в бинарный формат и зашить программатором, зачем 2 sof? Цитата(vadimuzzz @ Jan 5 2011, 13:28)  а автомат в factory-прошивке попытается подгрузить application. factory-прошивку я же готовлю? Если я, то как она записывается? Совместно с двумя или тремя sof'ами? Вы меня извините у меня вопросы действительно могут показаться глупыми, но я всё это спрашиваю, чтобы как то понять как мне сделать такую схему: к примеру готовлю новые прошиви на компе далее отправляю их по Ethernet, затем на принимающей стороне Ethernet переводится в UART ну а далее мне нужно как-то записать данные с UART в EPCS.
--------------------
С Уважением...
|
|
|
|
|
Jan 5 2011, 09:42
|

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

|
Цитата(Fynjisx @ Jan 5 2011, 16:49)  зачем 2 sof? 1 - factory, 2 и т.д - application Цитата factory-прошивку я же готовлю? Если я, то как она записывается? Совместно с двумя или тремя sof'ами? Вы меня извините у меня вопросы действительно могут показаться глупыми, но я всё это спрашиваю, чтобы как то понять как мне сделать такую схему: к примеру готовлю новые прошиви на компе далее отправляю их по Ethernet, затем на принимающей стороне Ethernet переводится в UART ну а далее мне нужно как-то записать данные с UART в EPCS. factory зашивается программатором и впоследствии не должна меняться. ее функции - зашивать application (если его нет) и передавать управление application. это минимум. application тоже должен уметь зашивать application (в т.ч. и переписывать себя), но не factory. я не знаю, зачем вам промежуточный UART, мне eth для всех нужд хватает. а функций - принять пакет (часть прошивки), зашить эту часть во флеш, посчитать контрольную сумму (CRC или еще какую) для всей прошивки, при необходимости (ошибка при передаче, например) - повторить процедуру. далее контроль за целостностью прошивки берет на себя сам циклон.
|
|
|
|
|
Jan 5 2011, 11:54
|
студент
   
Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712

|
Цитата(vadimuzzz @ Jan 5 2011, 15:42)  factory зашивается программатором factory я же пишу на VHDL, Verilog? Цитата(vadimuzzz @ Jan 5 2011, 15:42)  я не знаю, зачем вам промежуточный UART, мне eth для всех нужд хватает. а функций - принять пакет (часть прошивки), зашить эту часть во флеш, посчитать контрольную сумму (CRC или еще какую). я собираюсь в проект воткнуть cp2200. Это контроллер Ethernet. ОТсюда и UART на выходе
--------------------
С Уважением...
|
|
|
|
|
Jan 5 2011, 20:50
|

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

|
Цитата(Fynjisx @ Jan 5 2011, 20:54)  factory я же пишу на VHDL, Verilog? какая разница на чем пишете. просто factory и application - это 2 абсолютно независимых проекта (и прошивки, sof). я к тому, что содержимое factory-раздела на флешке должно прошиваться только в лабораторных условиях. она нужна в т.ч. на случай сбоя в application. если же будет повреждена factory прошивка (например, криво написанной утилитой) - есть неплохие шансы получить мертвое железо в труднодоступном месте. Цитата я собираюсь в проект воткнуть cp2200. Это контроллер Ethernet. ОТсюда и UART на выходе нормальный вариант, если 30 Мбит хватает. только все равно не понятно, на фиг UART. заводите Host Interface, с него данные и снимайте.
|
|
|
|
|
Jan 7 2011, 05:38
|
студент
   
Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712

|
Цитата(vadimuzzz @ Jan 6 2011, 02:50)  только все равно не понятно, на фиг UART Вы правы. UART лишний. я там немного спутал. Цитата(vadimuzzz @ Jan 6 2011, 02:50)  заводите Host Interface, с него данные и снимайте. А как потом этими данными прошивать флэш? Можете неписать краткий алгоритм этой работы?
--------------------
С Уважением...
|
|
|
|
|
Jan 14 2011, 16:15
|
студент
   
Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712

|
Цитата(vadimuzzz @ Jan 7 2011, 12:59)  там же обычный SPI, что там описывать-то? команд тоже с десяток примерно, можно в доках на EPCS (или другую аналогичную память, Spansion, Micron) посмотреть. можно использовать эту мегафункцию http://www.altera.com/literature/ug/ug_altasmi_parallel.pdfпоправьте если не правильно мыслю: принимаю весь образ по ethernet, далее сохраняю его в RAM CycloneIII, а потом последовательно через SPI прошиваю EPCS, начинаю с любого адреса? Как CycloneIII узнает, что он должен законфигурироваться с определенного адреса?
--------------------
С Уважением...
|
|
|
|
|
Jan 14 2011, 20:43
|
студент
   
Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712

|
Цитата(Alex11 @ Jan 15 2011, 01:03)  Сдается мне, что эти красивые разговоры про две прошивки в EPCS в данном случае невозможны. Это с nios'ом еще можно повыпендриваться, и то не сразу, а так циклон по включению всегда грузится с адреса 0. Я нигде не видел, чтобы можно было его переопределить. ну и хорошо, пусть будет с 0х0. У меня там будет хранится только одна прошивка
--------------------
С Уважением...
|
|
|
|
|
Jan 15 2011, 07:36
|
студент
   
Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712

|
Цитата(vadimuzzz @ Jan 7 2011, 12:59)  там же обычный SPI, что там описывать-то это понятно что обычный, но через какие линии прошивать EPCS "удаленными данными": через DCLK, DATA0,DATA1, nCS0 или же дополнительно от CycloneIII выделять четыре IO и цеплять их к EPCS?
--------------------
С Уважением...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|