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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Remote update CycloneIII
Fynjisx
сообщение Jan 5 2011, 06:46
Сообщение #1


студент
****

Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712



Привет Всем!Вопросы у меня по удаленной отладке.
Что имеют в виду в документах, когда говорят об factory configuration?
Всегда ли этот factory configuration file располагается по адресу 000?(во flash?)
Я так понимаю что обновленная конфигурация называется у Alter'ы - aplication configuration. Короче хочу удаленно ообновить flash EPCS и не могу понять откуда(через какие пины поступает и в каком виде должна поступать новая конфигурация) приходит и каким образом записывается...



--------------------
С Уважением...
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 5 2011, 07:10
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Fynjisx
сообщение Jan 5 2011, 07:22
Сообщение #3


студент
****

Группа: Свой
Сообщений: 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, тогда зачем они показали стрелку на
ПЛИС? Все таки через неё я думаю всё это хозяйство проходит.



--------------------
С Уважением...
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 5 2011, 07:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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- мастер sm.gif
Go to the top of the page
 
+Quote Post
Fynjisx
сообщение Jan 5 2011, 07:49
Сообщение #5


студент
****

Группа: Свой
Сообщений: 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.


--------------------
С Уважением...
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 5 2011, 09:42
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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 или еще какую) для всей прошивки, при необходимости (ошибка при передаче, например) - повторить процедуру. далее контроль за целостностью прошивки берет на себя сам циклон.
Go to the top of the page
 
+Quote Post
Fynjisx
сообщение Jan 5 2011, 11:54
Сообщение #7


студент
****

Группа: Свой
Сообщений: 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 на выходе


--------------------
С Уважением...
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 5 2011, 20:50
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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, с него данные и снимайте.
Go to the top of the page
 
+Quote Post
Fynjisx
сообщение Jan 7 2011, 05:38
Сообщение #9


студент
****

Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712



Цитата(vadimuzzz @ Jan 6 2011, 02:50) *
только все равно не понятно, на фиг UART

Вы правы. UART лишний. я там немного спутал.
Цитата(vadimuzzz @ Jan 6 2011, 02:50) *
заводите Host Interface, с него данные и снимайте.

А как потом этими данными прошивать флэш?
Можете неписать краткий алгоритм этой работы?


--------------------
С Уважением...
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 7 2011, 05:59
Сообщение #10


Гуру
******

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



Цитата(Fynjisx @ Jan 7 2011, 14:38) *
А как потом этими данными прошивать флэш?
Можете неписать краткий алгоритм этой работы?

там же обычный SPI, что там описывать-то? команд тоже с десяток примерно, можно в доках на EPCS (или другую аналогичную память, Spansion, Micron) посмотреть. можно использовать эту мегафункцию http://www.altera.com/literature/ug/ug_altasmi_parallel.pdf
Go to the top of the page
 
+Quote Post
Fynjisx
сообщение Jan 14 2011, 16:15
Сообщение #11


студент
****

Группа: Свой
Сообщений: 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 узнает, что он должен законфигурироваться с определенного адреса?


--------------------
С Уважением...
Go to the top of the page
 
+Quote Post
Alex11
сообщение Jan 14 2011, 18:03
Сообщение #12


Гуру
******

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



Сдается мне, что эти красивые разговоры про две прошивки в EPCS в данном случае невозможны. Это с nios'ом еще можно повыпендриваться, и то не сразу, а так циклон по включению всегда грузится с адреса 0. Я нигде не видел, чтобы можно было его переопределить.
Go to the top of the page
 
+Quote Post
Fynjisx
сообщение Jan 14 2011, 20:43
Сообщение #13


студент
****

Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712



Цитата(Alex11 @ Jan 15 2011, 01:03) *
Сдается мне, что эти красивые разговоры про две прошивки в EPCS в данном случае невозможны. Это с nios'ом еще можно повыпендриваться, и то не сразу, а так циклон по включению всегда грузится с адреса 0. Я нигде не видел, чтобы можно было его переопределить.

ну и хорошо, пусть будет с 0х0. У меня там будет хранится только одна прошивка


--------------------
С Уважением...
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 14 2011, 23:52
Сообщение #14


Гуру
******

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



Цитата(Alex11 @ Jan 15 2011, 03:03) *
Сдается мне, что эти красивые разговоры про две прошивки в EPCS в данном случае невозможны. Это с nios'ом еще можно повыпендриваться, и то не сразу, а так циклон по включению всегда грузится с адреса 0. Я нигде не видел, чтобы можно было его переопределить.

здесь посмотрите:
http://www.altera.com/literature/ug/ug_altremote.pdf
чтобы можно было менять адреса загрузки, надо в настройках девайса в квартусе включить режим Remote Update

ниос тут ортогонален, он использует ту же мегафункцию, только в авалоновской обертке для доступа к регистрам. прошивок может быть куча.
Go to the top of the page
 
+Quote Post
Fynjisx
сообщение Jan 15 2011, 07:36
Сообщение #15


студент
****

Группа: Свой
Сообщений: 571
Регистрация: 3-07-08
Из: Russia
Пользователь №: 38 712



Цитата(vadimuzzz @ Jan 7 2011, 12:59) *
там же обычный SPI, что там описывать-то

это понятно что обычный, но через какие линии прошивать EPCS "удаленными данными": через DCLK, DATA0,DATA1, nCS0 или же дополнительно от CycloneIII выделять четыре IO и цеплять их к EPCS?


--------------------
С Уважением...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th June 2025 - 15:46
Рейтинг@Mail.ru


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