Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Xilinx bootloader
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Golikov A.
Всем привет!

Имею: Ксалинкс спартан 6, с микроблайзом, ДДР, и Езернетом

На данный момент программа работает из ДДР, чтобы ее туда запихать в плисину заливаю bootloop а потом через жетаг средой заливаю программку.

Хочу к этому всем приделать загрузчик, чтобы оно все могло из флеши само стартовать, а в лучшем случае чтобы еще по езернету можно было прошивку обновить.

Кто-то может схематично описать как это делается?

1. я так понимаю мне нужно в микроблайз запихать модуль чтения - записи конфигурационной флэши. Есть такие готовые? Или конфигурационная флэш доступна из микроблайза напрямую?

2. Потом мне надо сформировать файл для этой флэши, что мне надо взять, какие утилиты применить?

3. После того как у меня будет бутлоадер, можно ли как то сделать так чтобы софт отлаживался по старой схеме? То есть мне не надо было бы перезаписывать флэш для того чтобы стартануть проект. Или это делается только через бутлуп и жетаг, а в конце формируется файл прошивки для загрузчика?

Если отказаться от загрузки через езернет, такое чувство что должно быть стандартное решение. Ведь сделать проект работающий из ДДР можно просто иснтрументами среды, так же его можно туда запихать, неужели не предусмотрели стандартного загрузчика?
Дмитрий Мазунин
Посмотрите XAPP1140 и XAPP1146. По этому примеру можете сделать свою систему загрузки.
Пока Вы задаете слишком общие вопросы, изучите пример, если будут более тонкие проблемы - проконсультирую. У нас все это давно сделано и работает.
Corvus
В общем случае, так
http://www.xilinx.com/support/answers/43615.htm
Это простейший случай, без удалённого обновления. Для удалённого обновления готового, кажется, нет. Разве что примеры к отладочным платам поискать.
Golikov A.
Спасибо, да здорово что многое является стандартом, я так понимаю Linear Flash это как раз и есть интерфейс к конфигурационной флэшке...
AVR
Цитата(Golikov A. @ May 30 2013, 22:42) *
Спасибо, да здорово что многое является стандартом, я так понимаю Linear Flash это как раз и есть интерфейс к конфигурационной флэшке...

Скажите, на данный момент Вам удалось добиться загрузки из флэша? В общем, поставленная в первом посте темы - решена?

Мне тоже это предстоит, хочу оценить насколько много времени требуется для решения проблемы, чтобы разобраться.

Но вопрос:
А для этого процесса сколько надо иметь памяти для программ и данных? Можно ограничиться минимальными 8 Кб ОЗУ и 8 Кб для программы загрузчика?

P.S.
Просто обидно что эта память нужна лишь на секунду работы и более не используется. Неужели нет функции авто-инициализации памяти, ведь DDR2/3 контроллер все равно сам настраивается при старте и работает сразу сам, если я правильно понимаю. Ну ясно что нет такой функции sm.gif
Golikov A.
на данный момент возникли еще проблемы, так что попробовать не успел. Но по приведенному описанию все очень не сложно. Среда создает проект - загрузчик который пихается вместе с конфигурацией в начало флэши, как это происходит с обычным проектом если он влезает во внутреннюю память.
Этому проекту загрузчику сообщают где взять остальную программу и он ее из флэшки пихает в память и запускае.

Коды не разбирал еще, и езернет для обновления не прикручивал, это все в будущем. Но примитивный загрузчик выглядит не сложным.

У меня необходимость пихать программу во внешнюю память возникла из за использования LwIP, ему нужен нефиговый heap для работы, и он просто во внутреннюю память не влез, потому я все перенес в ДДР, подключил кэш и оно все работает воде как... сколько я потерял скорости на этом не знаю, я вообще что-то в микроблайзе разочаровался: запись в акси лайт 1 регистра 32 бита до 7 тактов, чтение тоже. И что-то у меня по дизасму не видно чтобы "практически все инструкции выполнялись за 1 такт", хотя может это связано с тем что я дебажу конфигурацию дебаг, а в релизе оно получшее будет...

Внутреннюю память ПЛИС умеет конфигурить сама при загрузке, в эти РАМы всякие таблицы часто пихают, потому можно сделать прожку для внутренней памяти которая сама собой загрузиться. Для внешней это увы невозможно, сама собой не загрузится...
Дмитрий Мазунин
Цитата(AVR @ Jun 4 2013, 03:02) *
Но вопрос:
А для этого процесса сколько надо иметь памяти для программ и данных? Можно ограничиться минимальными 8 Кб ОЗУ и 8 Кб для программы загрузчика?

Можно. Наш первичный загрузчик использует всего 8кб BRAM. Он грузит в ДДР вторичный, более умный и тяжелый загрузчик, который уже грузит боевую программу.
AVR
Цитата(Дмитрий Мазунин @ Jun 4 2013, 10:53) *
Можно. Наш первичный загрузчик использует всего 8кб BRAM. Он грузит в ДДР вторичный, более умный и тяжелый загрузчик, который уже грузит боевую программу.

Я правильно понимаю что DDRx в ПЛИС от Xilinx работает сразу, без каких либо ручных настраиваний со стороны пользователя? т.к. все параметры уже были даны ранее, не так как это для ARM процессоров, когда надо параметры при старте загрузчика контроллеру памяти указывать?

Второй вопрос... впрочем, сам процесс чтения из флэши с определенного адреса наверняка хорошо описан по тем ссылкам, которые я пока не удосужился прочитать sm.gif
Golikov A.
есть настройка по умолчанию которая почти подходит sm.gif У меня 2 банка ДДР3 и надо подключать оба контролера, и пришлось некоторые порты отвечающие за рефреши поправить, и по описанию ДДР немного времянку подрихтовал.

сам процесс чтения там не описан, надо исходник ковырять. Там надо еще модуль работы с флэшой подключать...
Дмитрий Мазунин
Цитата(AVR @ Jun 5 2013, 23:02) *
Я правильно понимаю что DDRx в ПЛИС от Xilinx работает сразу, без каких либо ручных настраиваний со стороны пользователя?

Да, верно.
AVR
Цитата(Golikov A. @ Jun 6 2013, 01:02) *
сам процесс чтения там не описан, надо исходник ковырять. Там надо еще модуль работы с флэшой подключать...
У кого-нибудь есть готовый код загрузчика?
Можете простой пример кода привести тут, чтобы всем заинтересованным было всё четко ясно что и как делается?

Есть ли необходимость утаивать код от халявщиков типа меня? sm.gif

Это что - обращение через несколько регистров? Или как? В каком конкретно файле или документе смотреть чтение из флэшки? Хотя бы имя того файла?..
Corvus
Цитата(AVR @ Jun 8 2013, 20:05) *
У кого-нибудь есть готовый код загрузчика?

Так он в SDK есть. Там где "создать новый проект - выбрать srec bootloader"
Golikov A.
http://www.xilinx.com/support/answers/43615.htm

вот там по шагам прям. Проект есть в СДК. Когда создаешь новый проект там есть закладка в конце с выборами типовых проектов (хеловорд, тест памяти и так далее... в конце и бутлоадер.
Дмитрий Мазунин
Цитата(AVR @ Jun 8 2013, 22:05) *
У кого-нибудь есть готовый код загрузчика?
Можете простой пример кода привести тут, чтобы всем заинтересованным было всё четко ясно что и как делается?

Есть ли необходимость утаивать код от халявщиков типа меня? sm.gif

Это что - обращение через несколько регистров? Или как? В каком конкретно файле или документе смотреть чтение из флэшки? Хотя бы имя того файла?..

Посмотрите XAPP1140 и XAPP1146.
Там есть все, что нужно для начала. И код загрузчика, и т.д.

PS Вроде писал уже ! В этой теме, сообщение №2
Golikov A.
1140
This application note discusses an in-the-field upgrade of the Virtex®-5 FXT bitstream, Linux
kernel, and loader flash images, using the presently running Linux kernel. Upgrade files are
obtained from a USB mass storage device using the XPS USB Host core or over the network
from an FTP server.

1146
This application note describes an in-the-field upgrade of the Spartan®-6 FPGA bitstream,
Linux kernel, and loader flash images, using the presently running Linux kernel. Upgrade files
are obtained from a CompactFlash storage device or over the network from an FTP server.

Слишком круто%) для начала.


http://www.xilinx.com/support/answers/43615.htm
вот то что искалось в этой теме. Способ по шагам без велосипеда. Чтобы просто стартануть проект, бантики уже позже.
Дмитрий Мазунин
Да ничего крутого там нету. Все сделано как раз просто, дубово и без бантиков. Зато есть все почти пожелания из Вашего же первого поста, не в идеальном виде, но все же.
Просто загрузке, да, можно и по этому answer поучиться, конечно.
Golikov A.
Ну начнем с малого, а там разберемся):
в любом случае спасибо за ссылки.
AVR
Вопрос - кто пользуется асинхронной SRAM для кода и данных? Если да, какую шину Вы используете - AXI или PLB?

Я в соседней теме описал ошибку, никто не может мне с ней помочь, и я решил её тупо перейдя с AXI на PLB (что печально ибо legacy), и при этом в настройках я не изменил ни единого параметра - всё так же делал и заработало.

У меня серьезные подозрения что контроллер EMC для AXI багнутый при работе с async SRAM. Сколько времени убил, думал у меня руки растут ниже пояса...
Golikov A.
ща я какую то глупость напишу, наверноеsm.gif.

У меня ДДР3 висит на акси шине, на кешированой. Проблемы были когда включал кэш, дохла прожка. Оказалось из-за перегрева вис проц, чуть помогло добавить регистры на шину. Но сильнее всего спасло внешнее охлаждение. Насколько я понимаю все типы памяти включаются через один и тот же контроллер в плисе реализованный на железном уровне (он не собирается из вентилей, а прям отдельный блок) неужели он с багом? не верю...

была бы ссылка на тему почитали быsm.gif...

П.С. у меня прога в ДДР работает и с кешем и на прямую.
AVR
Цитата(Golikov A. @ Jun 12 2013, 11:13) *
Насколько я понимаю все типы памяти включаются через один и тот же контроллер в плисе реализованный на железном уровне (он не собирается из вентилей, а прям отдельный блок) неужели он с багом? не верю...

Те что DDR* они вроде да, сидят на встроенном готовом блоке. А вот у меня AXI_EMC, который вроде как на логике, очень даже с багом я так считаю. Так что Xilinx умеет делать баги sm.gif

По теме: я продвигаюсь с написанием своего загрузчика, пока осилил чтение из DataFlash, ибо после загрузки линии доступны для пользователя и там можно организовать SPI-интерфейс, что я и сделал, успешно научился читать данные.

Вопрос: как подготовить ELF файл, чтобы его можно было вычитать из флэшки и просто записать во внешнюю память, а затем передать управление?

Вот один из примеров:
Код
mb-objcopy  -O  binary  -R .vectors.reset -R .vectors.sw_exception -R .vectors.interrupt -R .vectors.debug_sw_break -R .vectors.hw_exception ./factory_test/executable.elf  ./flash_burn/app.bin
mb-objcopy  -O  binary  -j .vectors.reset -j .vectors.sw_exception -j .vectors.interrupt -j .vectors.debug_sw_break -j .vectors.hw_exception ./factory_test/executable.elf  ./flash_burn/vectors.bin


Отсюда следующий вопрос - это правильный способ? И если да, то что это за векторы и насколько они вообще нужны?

P.S.
Запускать программу из внешней памяти вроде как тупо так:
Код
int (*boot_app) (void);
boot_app = (int (*) (void)) APP_DESTINATION_ADDR;
boot_app();

Это я подсмотрел в одном из примеров кода загрузчика.

ДОБАВИЛ: Да, всё так, вышеуказанный mb-objcopy делает из ELF правильный bin-файл, его я сую в SPI-флэш (добавив в MCS файл) по определенному адресу, загрузчик из BRAMины вычитывает флэш и тупо приравняв к boot_app начальный адрес внешней памяти, запускаю свою программу boot_app();
Дмитрий Мазунин
Цитата(AVR @ Jun 12 2013, 18:38) *
Вопрос: как подготовить ELF файл, чтобы его можно было вычитать из флэшки и просто записать во внешнюю память, а затем передать управление?

ДОБАВИЛ: Да, всё так, вышеуказанный mb-objcopy делает из ELF правильный bin-файл, его я сую в SPI-флэш (добавив в MCS файл) по определенному адресу, загрузчик из BRAMины вычитывает флэш и тупо приравняв к boot_app начальный адрес внешней памяти, запускаю свою программу boot_app();


Все правильно, только я бы Вам советовал не разворачивать ELF в BIN файл. Причина - бинарь может получиться огромным (это же просто образ памяти). Отсюда трата места на флэше и длинное время загрузки.
Мы храним на флэше ELF, и разбираем его прямо при загрузке.
Если интересно, могу прислать исходник разборки ELF, на котором мы базировались, делая свой загрузчик. Ничего там сложного нет.
Golikov A.
как же может быть не интересноsm.gif...
AVR
Цитата(Дмитрий Мазунин @ Jun 13 2013, 11:40) *
Все правильно, только я бы Вам советовал не разворачивать ELF в BIN файл. Причина - бинарь может получиться огромным (это же просто образ памяти). Отсюда трата места на флэше и длинное время загрузки.
Мы храним на флэше ELF, и разбираем его прямо при загрузке.
Если интересно, могу прислать исходник разборки ELF, на котором мы базировались, делая свой загрузчик. Ничего там сложного нет.

Да, выложите пожалуйста, думаю многим будет интересно - как самому ТС, так и мне возможно в будущем потребуется.

Я полагал ELF это сложный формат, не хотелось с ним ковыряться, к тому же вероятно такой парсер ELF-а может не влезть в 8 Кб памяти вместе с загрузчиком, я хочу в будущем обойтись лишь минимально возможной памятью для загрузчика. Сейчас флэшка у меня огромная и я даже текущими успехами счастлив, но если можно сэкономить место храня просто ELF, то это плюс.
Flood
Цитата(Дмитрий Мазунин @ Jun 13 2013, 11:40) *
Все правильно, только я бы Вам советовал не разворачивать ELF в BIN файл.


В SREC обычно разворачивают. Но это ASCII. При желании можно сделать бинарный аналог SREC, что уменьшит размер файла почти в два раза.
Дмитрий Мазунин
Цитата(AVR @ Jun 14 2013, 00:21) *
Да, выложите пожалуйста, думаю многим будет интересно - как самому ТС, так и мне возможно в будущем потребуется.

Я полагал ELF это сложный формат, не хотелось с ним ковыряться, к тому же вероятно такой парсер ELF-а может не влезть в 8 Кб памяти вместе с загрузчиком, я хочу в будущем обойтись лишь минимально возможной памятью для загрузчика. Сейчас флэшка у меня огромная и я даже текущими успехами счастлив, но если можно сэкономить место храня просто ELF, то это плюс.


У нас сделана двухступенчатая загрузка. В BRAM загрузчик очень простой, влезает в 8К. На самом деле, он немного больше 4К, и при желании можно и в 4к утоптать.
Этот первичный загрузчик грузит в DDR вторичный загрузчик. Вторичный хранится в BIN образе для простоты первичного. А вот вторичный уже грузит боевую прогу, хранящуюся в ELF. И волки сыты, и овцы целы.

Код парсера, найденный в свое время на просторах интернета, прилагаю. Проверен, работает. В архиве еще описание формата.Нажмите для просмотра прикрепленного файла
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.