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

Да ничего крутого там нету. Все сделано как раз просто, дубово и без бантиков. Зато есть все почти пожелания из Вашего же первого поста, не в идеальном виде, но все же.

Просто загрузке, да, можно и по этому answer поучиться, конечно.

 

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


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

Вопрос - кто пользуется асинхронной SRAM для кода и данных? Если да, какую шину Вы используете - AXI или PLB?

 

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

 

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

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


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

ща я какую то глупость напишу, наверное:).

 

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

 

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

 

П.С. у меня прога в ДДР работает и с кешем и на прямую.

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


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

Насколько я понимаю все типы памяти включаются через один и тот же контроллер в плисе реализованный на железном уровне (он не собирается из вентилей, а прям отдельный блок) неужели он с багом? не верю...

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

 

По теме: я продвигаюсь с написанием своего загрузчика, пока осилил чтение из 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();

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


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

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

 

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

 

Все правильно, только я бы Вам советовал не разворачивать ELF в BIN файл. Причина - бинарь может получиться огромным (это же просто образ памяти). Отсюда трата места на флэше и длинное время загрузки.

Мы храним на флэше ELF, и разбираем его прямо при загрузке.

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

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


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

Все правильно, только я бы Вам советовал не разворачивать ELF в BIN файл. Причина - бинарь может получиться огромным (это же просто образ памяти). Отсюда трата места на флэше и длинное время загрузки.

Мы храним на флэше ELF, и разбираем его прямо при загрузке.

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

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

 

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

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


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

Все правильно, только я бы Вам советовал не разворачивать ELF в BIN файл.

 

В SREC обычно разворачивают. Но это ASCII. При желании можно сделать бинарный аналог SREC, что уменьшит размер файла почти в два раза.

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


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

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

 

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

 

У нас сделана двухступенчатая загрузка. В BRAM загрузчик очень простой, влезает в 8К. На самом деле, он немного больше 4К, и при желании можно и в 4к утоптать.

Этот первичный загрузчик грузит в DDR вторичный загрузчик. Вторичный хранится в BIN образе для простоты первичного. А вот вторичный уже грузит боевую прогу, хранящуюся в ELF. И волки сыты, и овцы целы.

 

Код парсера, найденный в свое время на просторах интернета, прилагаю. Проверен, работает. В архиве еще описание формата.elf.rar

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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