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

Бут лодер в Blackfin для осеновного приложения

Добрый день. Есть плата с BF332, SPI флешой на 64КБ, паралельной флешой на 4МБ, и SDRAM. Хочется сделать следующее:

 

BF при старте грузится с SPI флеши, выполняет некоторые действия в т.ч. проверяет целостность основной программы. После этого грузит основную программу из паралельной флеши и передает ей управление. Если целосность основной программы нарушена - восстанавливаем ее из резервной копии и передаем управление ей.

 

Т.е. Имеется 2 программы (лодер и основная). В обоих хотелось бы писать на С (на АСМ-е не смогу реализовать намеченый функционал бутлодера).

 

Как зарузить основную программу и передать ей управление - вот в чем вопрос. Подскажите в каком направлении копать.

 

Сразу скажу - Uboot не предлагать.

 

Буду благодарен любым советам.

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


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

Добрый день. Есть плата с BF332, SPI флешой на 64КБ, паралельной флешой на 4МБ, и SDRAM. Хочется сделать следующее:

 

BF при старте грузится с SPI флеши, выполняет некоторые действия в т.ч. проверяет целостность основной программы. После этого грузит основную программу из паралельной флеши и передает ей управление. Если целосность основной программы нарушена - восстанавливаем ее из резервной копии и передаем управление ей.

 

Т.е. Имеется 2 программы (лодер и основная). В обоих хотелось бы писать на С (на АСМ-е не смогу реализовать намеченый функционал бутлодера).

 

Как зарузить основную программу и передать ей управление - вот в чем вопрос. Подскажите в каком направлении копать.

 

Сразу скажу - Uboot не предлагать.

 

Буду благодарен любым советам.

 

Самое простое:

1. Пишете бутлоадер, с помощью bfin-elf-ldr (под Линукс) или VisualDSP получаете файлик в формате .ldr

2. Любым способом записываете этот лоадер в spi-флэш.

3. Бутлоадер стартует, принимает рабочую программу по UART и кладет ее в SDRAM по нужному адресу (+ если надо, и в параллельную флэш).

4. Передаете управление рабочей программе в SDRAM.

 

Единственное, с чем пока еще сам не разобрался - п 4. Видимо, как-то надо специально разрешить блэкфину выбирать инструкции из SDRAM. Простой джамп на начало основной программы в SDRAM ни к чему не приводит.

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


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

Самое простое:

1. Пишете бутлоадер, с помощью bfin-elf-ldr (под Линукс) или VisualDSP получаете файлик в формате .ldr

Уже написаны

 

2. Любым способом записываете этот лоадер в spi-флэш.

Это понятно

 

3. Бутлоадер стартует, принимает рабочую программу по UART и кладет ее в SDRAM по нужному адресу (+ если надо, и в параллельную флэш).

 

Вот тут пожалусто по подробнее. Как узнать/задать то самый "нужный" адрес. Дело в том, что функции бутлодера расположены как во внутренней памяти, так и в SDRAM. И если я буду записывать основную программу на их место - бутлодер затрется так и не окончив свою работу.

4. Передаете управление рабочей программе в SDRAM.

 

Единственное, с чем пока еще сам не разобрался - п 4. Видимо, как-то надо специально разрешить блэкфину выбирать инструкции из SDRAM. Простой джамп на начало основной программы в SDRAM ни к чему не приводит.

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


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

Вот тут пожалусто по подробнее. Как узнать/задать то самый "нужный" адрес. Дело в том, что функции бутлодера расположены как во внутренней памяти, так и в SDRAM. И если я буду записывать основную программу на их место - бутлодер затрется так и не окончив свою работу.

 

Можно посмотреть LdrViewer-ом структуру вашего бутлоадера - там видно, какой диапазон адресов в SDRAM занят под лоадер. И скопировать рабочую программу в заведомо свободную область памяти.

 

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

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


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

Можно посмотреть LdrViewer-ом структуру вашего бутлоадера - там видно, какой диапазон адресов в SDRAM занят под лоадер. И скопировать рабочую программу в заведомо свободную область памяти.

 

Коприровать нужно дату из LDR файла, я правильно понял? Его нужно как-то парсить?

 

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

 

 

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

 

Решил еще уточнить что у меня сейчас есть.

 

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

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


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

Коприровать нужно дату из LDR файла, я правильно понял? Его нужно как-то парсить?

 

 

 

 

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

 

Решил еще уточнить что у меня сейчас есть.

 

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

 

А зачем вам вообще 2 флешки???, запишите и бутлоадер и основную программу в параллельную флеш и ненадо переключатели трогать...

 

Коприровать нужно дату из LDR файла, я правильно понял? Его нужно как-то парсить?

 

 

 

 

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

 

Решил еще уточнить что у меня сейчас есть.

 

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

 

А зачем вам вообще 2 флешки???, запишите и бутлоадер и основную программу в параллельную флеш и ненадо переключатели трогать... (вообще их перемычками запаяйте ))

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


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

А зачем вам вообще 2 флешки???, запишите и бутлоадер и основную программу в параллельную флеш и ненадо переключатели трогать...

(вообще их перемычками запаяйте ))

 

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

 

Хорошо, допустим я запишу и бутлоадер и основную программу в параллельную флеш. Тогда как мне загрузить основную программу из бутлодера и передать ей управление?

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


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

Хорошо, допустим я запишу и бутлоадер и основную программу в параллельную флеш. Тогда как мне загрузить основную программу из бутлодера и передать ей управление?

 

Вероятно у вашего процессора есть свои особенноти...(он умеет грузиться по UART?), но в любом случае, если это стандартный бутлоадер, то он размещает программму в SDRAM и передаёт ей управление (собственно сейчас он у вас занимается темже), так вот пусть он берёт программу по другому адресу флеш(исходя из того что начальные анреса будут заняты самим бутлоадером), а дальше вроде без изменений...

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


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

Коприровать нужно дату из LDR файла, я правильно понял? Его нужно как-то парсить?

 

Нет, основная программа - это обычный бинарный файл, не ldr. По идее, его нужно просто положить в SDRAM и передать ему управление.

 

 

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

 

Решил еще уточнить что у меня сейчас есть.

 

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

 

Можно ведь и основную программу также писать в spi-флэш. Тогда еще и место на плате сэкономите :) Ставите BMODE на загрузку по spi и вперед...

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


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

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

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

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

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

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

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

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

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

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