shamray 0 19 марта, 2009 Опубликовано 19 марта, 2009 · Жалоба Добрый день. Есть плата с BF332, SPI флешой на 64КБ, паралельной флешой на 4МБ, и SDRAM. Хочется сделать следующее: BF при старте грузится с SPI флеши, выполняет некоторые действия в т.ч. проверяет целостность основной программы. После этого грузит основную программу из паралельной флеши и передает ей управление. Если целосность основной программы нарушена - восстанавливаем ее из резервной копии и передаем управление ей. Т.е. Имеется 2 программы (лодер и основная). В обоих хотелось бы писать на С (на АСМ-е не смогу реализовать намеченый функционал бутлодера). Как зарузить основную программу и передать ей управление - вот в чем вопрос. Подскажите в каком направлении копать. Сразу скажу - Uboot не предлагать. Буду благодарен любым советам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Supernaut 0 20 марта, 2009 Опубликовано 20 марта, 2009 · Жалоба Добрый день. Есть плата с 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 ни к чему не приводит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shamray 0 20 марта, 2009 Опубликовано 20 марта, 2009 · Жалоба Самое простое: 1. Пишете бутлоадер, с помощью bfin-elf-ldr (под Линукс) или VisualDSP получаете файлик в формате .ldr Уже написаны 2. Любым способом записываете этот лоадер в spi-флэш. Это понятно 3. Бутлоадер стартует, принимает рабочую программу по UART и кладет ее в SDRAM по нужному адресу (+ если надо, и в параллельную флэш). Вот тут пожалусто по подробнее. Как узнать/задать то самый "нужный" адрес. Дело в том, что функции бутлодера расположены как во внутренней памяти, так и в SDRAM. И если я буду записывать основную программу на их место - бутлодер затрется так и не окончив свою работу. 4. Передаете управление рабочей программе в SDRAM. Единственное, с чем пока еще сам не разобрался - п 4. Видимо, как-то надо специально разрешить блэкфину выбирать инструкции из SDRAM. Простой джамп на начало основной программы в SDRAM ни к чему не приводит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Supernaut 0 20 марта, 2009 Опубликовано 20 марта, 2009 · Жалоба Вот тут пожалусто по подробнее. Как узнать/задать то самый "нужный" адрес. Дело в том, что функции бутлодера расположены как во внутренней памяти, так и в SDRAM. И если я буду записывать основную программу на их место - бутлодер затрется так и не окончив свою работу. Можно посмотреть LdrViewer-ом структуру вашего бутлоадера - там видно, какой диапазон адресов в SDRAM занят под лоадер. И скопировать рабочую программу в заведомо свободную область памяти. А вообще бутлоадер удобно делать небольшой програмкой, целиком влезающей в кэш. SDRAM в таком случае останется полностью в распоряжении основной программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shamray 0 20 марта, 2009 Опубликовано 20 марта, 2009 · Жалоба Можно посмотреть LdrViewer-ом структуру вашего бутлоадера - там видно, какой диапазон адресов в SDRAM занят под лоадер. И скопировать рабочую программу в заведомо свободную область памяти. Коприровать нужно дату из LDR файла, я правильно понял? Его нужно как-то парсить? А вообще бутлоадер удобно делать небольшой програмкой, целиком влезающей в кэш. SDRAM в таком случае останется полностью в распоряжении основной программы. Да, забыл сказать что основная программа тоже юзает внутренний кэш. Решил еще уточнить что у меня сейчас есть. Есть бутлодер который загружается из SPI флеши (при соответствующей установке BMODE). Он может записывать прошивку в паралельную флеш. Проблема в том, что после этого надо перествлять перемычки BMODE. Вот это и надо обойти. Может как-то можно заставить запустится встоенный бутлодер так, что бы он думал что стоит режим загрузки из паралельной флеш? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Goblin_Nick 0 20 марта, 2009 Опубликовано 20 марта, 2009 · Жалоба Коприровать нужно дату из LDR файла, я правильно понял? Его нужно как-то парсить? Да, забыл сказать что основная программа тоже юзает внутренний кэш. Решил еще уточнить что у меня сейчас есть. Есть бутлодер который загружается из SPI флеши (при соответствующей установке BMODE). Он может записывать прошивку в паралельную флеш. Проблема в том, что после этого надо перествлять перемычки BMODE. Вот это и надо обойти. Может как-то можно заставить запустится встоенный бутлодер так, что бы он думал что стоит режим загрузки из паралельной флеш? А зачем вам вообще 2 флешки???, запишите и бутлоадер и основную программу в параллельную флеш и ненадо переключатели трогать... Коприровать нужно дату из LDR файла, я правильно понял? Его нужно как-то парсить? Да, забыл сказать что основная программа тоже юзает внутренний кэш. Решил еще уточнить что у меня сейчас есть. Есть бутлодер который загружается из SPI флеши (при соответствующей установке BMODE). Он может записывать прошивку в паралельную флеш. Проблема в том, что после этого надо перествлять перемычки BMODE. Вот это и надо обойти. Может как-то можно заставить запустится встоенный бутлодер так, что бы он думал что стоит режим загрузки из паралельной флеш? А зачем вам вообще 2 флешки???, запишите и бутлоадер и основную программу в параллельную флеш и ненадо переключатели трогать... (вообще их перемычками запаяйте )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shamray 0 20 марта, 2009 Опубликовано 20 марта, 2009 · Жалоба А зачем вам вообще 2 флешки???, запишите и бутлоадер и основную программу в параллельную флеш и ненадо переключатели трогать... (вообще их перемычками запаяйте )) SPI флешка програмируется при производстве (бутлодер) и впаивается на плату. Потом уже через нее пишется основная программа в паралельную флеш. Програмить паралельную вне платы - почти невозможно. Хорошо, допустим я запишу и бутлоадер и основную программу в параллельную флеш. Тогда как мне загрузить основную программу из бутлодера и передать ей управление? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Goblin_Nick 0 20 марта, 2009 Опубликовано 20 марта, 2009 · Жалоба Хорошо, допустим я запишу и бутлоадер и основную программу в параллельную флеш. Тогда как мне загрузить основную программу из бутлодера и передать ей управление? Вероятно у вашего процессора есть свои особенноти...(он умеет грузиться по UART?), но в любом случае, если это стандартный бутлоадер, то он размещает программму в SDRAM и передаёт ей управление (собственно сейчас он у вас занимается темже), так вот пусть он берёт программу по другому адресу флеш(исходя из того что начальные анреса будут заняты самим бутлоадером), а дальше вроде без изменений... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Supernaut 0 22 марта, 2009 Опубликовано 22 марта, 2009 · Жалоба Коприровать нужно дату из LDR файла, я правильно понял? Его нужно как-то парсить? Нет, основная программа - это обычный бинарный файл, не ldr. По идее, его нужно просто положить в SDRAM и передать ему управление. Да, забыл сказать что основная программа тоже юзает внутренний кэш. Решил еще уточнить что у меня сейчас есть. Есть бутлодер который загружается из SPI флеши (при соответствующей установке BMODE). Он может записывать прошивку в паралельную флеш. Проблема в том, что после этого надо перествлять перемычки BMODE. Вот это и надо обойти. Может как-то можно заставить запустится встоенный бутлодер так, что бы он думал что стоит режим загрузки из паралельной флеш? Можно ведь и основную программу также писать в spi-флэш. Тогда еще и место на плате сэкономите :) Ставите BMODE на загрузку по spi и вперед... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться