Перейти к содержанию
    

MAX10, Одна из Image - в качестве бутлодера

Всем привет! давненько меня тут не было...)

В данный момент знакомлюсь с MAX 10-м. А конкретно разбираюсь как использовать одну области CFM в качестве бутлодера для перепрошивки второй области CFM. Идея, надеюсь, понятна :) реализовать возможность смены основной прошивки плис удаленно, не используя программатор...

На данный момент реализовал переключение между двумя образами командой по УАРТ, читаю Status и Control Register используя OnChip Flash IP-Core и соответственно стирать определенные области памяти UFM и CFM. Осталось реализовать запись по тому же УАРТ другой основной прошивки, но не могу разобраться какой из форматов образов нужно генерить и передавать - POF, SOF или RPD??? Насколько я понял, нужно что-то откуда генерить используя различные настройки, но что именно так и не разобрался...

Может кто-нить занимался данной проблемой

P.S. Ниос не перевариваю...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если dual image то в cfm 1 и 2 хранится pof, который вы генерируете совмещая 2 sof в quartus, по сути это 2 сжатых sof, но чем сжаты я не нашёл. Можно прочитать cfm и сравнить с pof. И самое главное в cfm байты перевернуты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

NIOS II Processor Booting Methods in MAX 10 Devices pdf страница 22 там написано как сгенерировать pof

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 hours ago, Вася0 said:

Если dual image то в cfm 1 и 2 хранится pof, который вы генерируете совмещая 2 sof в quartus, по сути это 2 сжатых sof, но чем сжаты я не нашёл. Можно прочитать cfm и сравнить с pof. И самое главное в cfm байты перевернуты.

Да, в CFM0 хранится один образ, а в CFM1 и 2 хранится второй. Естественно, когда я зашиваю первый раз через JTAG я так и делаю - из двух SOF генерю один POF и зашиваю. Но а что делать потом) Когда уже по не JTAG, а по какому-то основному интерфейсу, в моем случае, UART необходимо передать только один образ, в каком-то формате (вопрос в каком и как его сделать!) и правильно его запилить по нужному адресу.

Про то, что в CFM байты перевернуты я учту, спасибо.

18 hours ago, Вася0 said:

NIOS II Processor Booting Methods in MAX 10 Devices pdf страница 22 там написано как сгенерировать pof

Посмотрю, а по поводу чтения - я сейчас как раз и пишу прошивку и софт, чтобы по основному интерфейсу хотя бы прочитать CFMы... Дело идет не очень быстро из-за большой загруженности). Но результат обязательно опубликую

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наконец-то добился того, что удалось считать записанную область CFM0, соответствующую одному образу. 

Полученный файл очень похож на искусственно сгенерированный файл *.rpd. Но, чтобы его сгенерировать, необходимо каждый раз указывать второй образ CFM1, хотя какое он отношение имеет с независимому от него образу в CFM0 пока не разобрался... Буду копать дальше. Попробую данный сгенерированный *.rpd записать насильно в CFM0 используя свой УАРТ и OnFlashChip, и посмотрю что получится...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/13/2019 at 7:07 PM, dde29 said:

Наконец-то добился того, что удалось считать записанную область CFM0, соответствующую одному образу. 

Полученный файл очень похож на искусственно сгенерированный файл *.rpd. Но, чтобы его сгенерировать, необходимо каждый раз указывать второй образ CFM1, хотя какое он отношение имеет с независимому от него образу в CFM0 пока не разобрался... Буду копать дальше. Попробую данный сгенерированный *.rpd записать насильно в CFM0 используя свой УАРТ и OnFlashChip, и посмотрю что получится...

в том то и дело что сгенерированный файл *.rpd похож на область CFM1 но не идентичен. поэтому когда я заливаю cfm1.rpd в CFM1-2  сериально второй образ не поднимается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21.07.2019 в 11:35, jenya7 сказал:

в том то и дело что сгенерированный файл *.rpd похож на область CFM1 но не идентичен. поэтому когда я заливаю cfm1.rpd в CFM1-2  сериально второй образ не поднимается.

Здравствуйте. Столкнулся с похожей проблемой, что сгенерированный rpd файл не идентичен тому, что я получаю при считывании зашитого бластером pof файла.
Вы смогли сгенерировать рабочий rpd файл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 hours ago, v0idname said:

Здравствуйте. Столкнулся с похожей проблемой, что сгенерированный rpd файл не идентичен тому, что я получаю при считывании зашитого бластером pof файла.
Вы смогли сгенерировать рабочий rpd файл?

 у меня был баг в генерации записываемого слова. у вас галка Big Endian в Options/Boot info выставлена?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, jenya7 сказал:

 у меня был баг в генерации записываемого слова. у вас галка Big Endian в Options/Boot info выставлена?

 

После Вашего сообщения заметил, что сгенерированный rpd и считанная память, зашитая через pof, отличаются порядком байт в каждом 32-битном слове файла прошивки (я прошиваю flash побайтно). После перестановки байт и прошивки через UART всё заработало. Спасибо!
Перед этим попробовал опцию Big Endian в Options/Boot info и оказалось, что она делает реверс бит в каждом байте (!), а не меняет порядок байт, т.е. это не то, что нужно было для решения проблемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы не открывать новую тему по схожему вопросу, напишу здесь.

С ПЛИСами опыта мало, читаю документацию и статьи и наблюдаю противоречия. Написал конфигурацию для своей задачи - всё работает, возникла идея заложить возможность обновления конфигурации 10M04SCU с контроллера по любому доступному интерфейсу (UART, SPI, I2C). Судя по даташиту , версия Compact (как у меня) не поддерживает 2 образа, хотя по ссылке  https://embeddedfpgadesign.wordpress.com/2016/08/04/extending-effective-density-on-altera-max10-fpga-for-free/ пишут , что только 10M02 ограничена одним образом. Из таблицы 3 документа https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/max-10/ug_m10_config.pdf следует, что в compact только single image.

image.png.9ddfcbd3b30c8566b9d9dece23d69ac1.png

Когда полез в настройки Quartus, понял , что всё же только один образ мне доступен. Возможно ли как-то разбить конфигурацию на две части фиксированного размера, одна из которых будет загрузчиком , а вторая стираемая и обновляемая? Ведь у меня, судя по таблице 1 из https://www.intel.com/content/www/us/en/programmable/documentation/vgo1395753117436.html доступны все три CFM!

image.thumb.png.a2a41044e4c5c0eea4f88de57eaf363e.png

Для обращения к CFM, как я понял, мне нужно использовать On-Chip Flash Intel FPGA IP. На сайте Intel говорят, что IP в версии Quartus Lite платные, но, попробовав открыть IP из Tools->IP catalog всё получилось. Доступен он в Lite или при дальнейшем использовании (сборке проекта) у меня будут проблемы?

Для контроллеров загрузчики делал, а вот для ПЛИС ещё нет :) Заранее спасибо за советы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/9/2021 at 9:22 PM, Paramedic said:

Когда полез в настройки Quartus, понял , что всё же только один образ мне доступен. Возможно ли как-то разбить конфигурацию на две части фиксированного размера, одна из которых будет загрузчиком , а вторая стираемая и обновляемая? Ведь у меня, судя по таблице 1 из https://www.intel.com/content/www/us/en/programmable/documentation/vgo1395753117436.html доступны все три CFM!

On 4/9/2021 at 9:22 PM, Paramedic said:

Судя по даташиту , версия Compact (как у меня) не поддерживает 2 образа, хотя по ссылке  https://embeddedfpgadesign.wordpress.com/2016/08/04/extending-effective-density-on-altera-max10-fpga-for-free/ пишут , что только 10M02 ограничена одним образом. Из таблицы 3 документа https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/max-10/ug_m10_config.pdf следует, что в compact только single image.

Compact → базовое исполнение;

Flash → имеется возможность реализации двух конфигурационных схем с самообновлением и инициализация встроенной RAM при подаче питания;

Analog → все то же что и в варианте Flash, плюс встроенный блок АЦП.

Разбить в исполнении Campact не получится точно, но можно попробовать реализовать boot-модуль в основном проекте и перешивать как бы самого себя. Но я так не пробовал, интересная мысль, но я думаю Ква не даст скомпилить IP-корку... Будет время - попробую.

А вообще, я сейчас занимаюсь написанием статьи на тему бутлодера на 10м Максе... Там может быть данную тему затрону...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...