|
Стартовый загрузчик, с нуля |
|
|
|
Sep 2 2014, 09:34
|
Местный
  
Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085

|
Хочется понять, как работает эта штука? В моём представлении это маленькая программа, находящаяся где-то в хвосте флеш-памяти. При старте начинается выполнение программы с нулевого адреса, где проверяется выполнение какого-то условия, например, уровень на определённой ножке. Если условие выполняется, то следует инструкция вроде JMP Bootloader, т.е. переход в область флеш, содержащей команды загрузчика, которые выполняет ЦПУ. Загрузчик принимает данные в виде файла *.bin по какому-либо интерфейсу МК, эти данные он раскладывает во флеш-памяти, затирая старую версию прошивки. Причём в новой версии программы должна быть та же самая процедура перехода в область загрузчика на случай следующего обновления. Если в этом месте мысли правильные, то дальше имеются мысли по поводу организации самопального загрузчика: 1. Пишется программа загрузчика - процедуры приёма и раскладки данных в памяти, компилируется в виде файла *.bin. 2. Пишется программа для записи полученного файла куда-нибудь в дальний угол памяти, начиная с определённого адреса, допустим 0х1000000. Всё, загрузчик находится в памяти. 3. Пишем рабочую программу, которая в самом начале содержит условие с переходом вроде JMP 0x1000000. Размер прошивки должен быть всегда такой, чтобы не затёрся код загрузчика.
Примерно такие у меня измышления. Насколько они правильные? Если правильные, то имеются попутные вопросы: 1. Как организовать запись байта по определённому адресу флеш на С в IAR? 2. В MSP430 перед изменением флеш нужно предварительно настроить контроллер флеш-памяти. Как обстоит дело в LPC1778? 3. Если в LPC1778 прошивка записывается через UART0, то там уже есть загрузчик? Если он есть, то можно ли его случайно стереть?
Где можно подробнее почитать на эту тему с самого нуля с пошаговой инструкцией создания загрузчика?
P.S Вынтернете гуглил на эту тему ровно несколько минут, попадались всякие описания загрузчиков планшетов, смартфонов и прочих девайсов.
Сообщение отредактировал ДЕЙЛ - Sep 2 2014, 09:39
|
|
|
|
|
 |
Ответов
|
Sep 30 2014, 10:35
|
Местный
  
Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085

|
Пока в исходник загрузчика глубоко не влазил. Хочу попробовать что-либо записать во флеш из программы. т.е. если написать вот так: Код adres = (unsigned int*)0x20000200; //область оперативной памяти *adres = 0x12345678; то всё нормально - в ячейку с указанным адресом записывается число, а если написать вот так Код adres = (unsigned int*)0x1000; //область флеш-памяти *adres = 0x12345678; то ничего не записывается. Тут нужно предварительно какие-то настройки делать. В мануале что-то написано, но нет примеров. Хотелось бы увидеть самый простой пример включения возможности записи в ячейку флеш. МК LPC1778
|
|
|
|
|
Sep 30 2014, 12:50
|
Местный
  
Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085

|
Цитата(Сергей Борщ @ Sep 30 2014, 15:36)  У них нет возможности записи в ячейку. Вы можете записать только блок. Пример там писать не стали - вся запись сводится к загрузке 4 регистров и вызвове одной функции IAP. Читайте раздел Flash Memory до просветления. Но ведь хочется спросить и тут разжёваный ответ получить  Спасибо за направляющий ответ, буду копать. Как в общих чертах происходит запись блока? Какие шаги нужно проделать?
Сообщение отредактировал ДЕЙЛ - Sep 30 2014, 13:08
|
|
|
|
|
Sep 30 2014, 14:00
|
Знающий
   
Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245

|
Цитата(ДЕЙЛ @ Sep 30 2014, 16:50)  Но ведь хочется спросить и тут разжёваный ответ получить  Спасибо за направляющий ответ, буду копать. Как в общих чертах происходит запись блока? Какие шаги нужно проделать? Прочитать сраницу из flash, изменить байтик, (возможно очистить flash), записать станицу во flash. Все подробности в application note (а такой есть 99%) на ваш процессор.
|
|
|
|
Сообщений в этой теме
ДЕЙЛ Стартовый загрузчик Sep 2 2014, 09:34 smalcom Цитатанаходящаяся где-то в хвосте флеш-памяти
нет.... Sep 2 2014, 10:40 ДЕЙЛ Цитата(smalcom @ Sep 2 2014, 14:40) нет. ... Sep 2 2014, 11:43  adnega Цитата(ДЕЙЛ @ Sep 2 2014, 15:43) В начале... Sep 2 2014, 12:22 Lagman А если загрузчик и программа используют одно преры... Sep 2 2014, 11:47 ДЕЙЛ Цитата(Lagman @ Sep 2 2014, 15:47) А если... Sep 3 2014, 06:25  adnega Цитата(ДЕЙЛ @ Sep 3 2014, 10:25) Думаю, ч... Sep 3 2014, 06:29 AlexandrY Цитата(ДЕЙЛ @ Sep 2 2014, 12:34) 3. Если ... Sep 2 2014, 12:37 esaulenka Цитата(AlexandrY @ Sep 2 2014, 16:37) LPC... Sep 8 2014, 12:46 Сергей Борщ Справа вверху кнопка "Поиск", в выпадающ... Sep 2 2014, 13:10 ДЕЙЛ Цитата(Сергей Борщ @ Sep 2 2014, 17:10) В... Sep 3 2014, 06:47  adnega Цитата(ДЕЙЛ @ Sep 3 2014, 10:47) я свои и... Sep 3 2014, 07:53   ДЕЙЛ Цитата(adnega @ Sep 3 2014, 11:21) Дык, в... Sep 3 2014, 08:09 Сергей Борщ Цитата(ДЕЙЛ @ Sep 3 2014, 09:25) Думаю, ч... Sep 3 2014, 07:56 ДЕЙЛ Есть ещё вопрос по безусловному переходу.
если на... Sep 3 2014, 10:34 menzoda ЦитатаУже интереснее. Как это сделать в IAR?
Есть ... Sep 4 2014, 05:33  ДЕЙЛ Цитата(menzoda @ Sep 4 2014, 09:33) 2. Ес... Sep 5 2014, 10:08   menzoda Цитата(ДЕЙЛ @ Sep 5 2014, 14:08) А если у... Sep 5 2014, 10:45    ДЕЙЛ Цитата(menzoda @ Sep 5 2014, 14:45) Может... Sep 5 2014, 11:09     menzoda В кратце опишу, как я это вижу. Подробности поведе... Sep 5 2014, 13:25      ДЕЙЛ Покопался в настройках линкера, нашёл настройки ли... Oct 6 2014, 21:21       menzoda ЦитатаВ каком известном векторе прерывания находит... Oct 8 2014, 05:17        ДЕЙЛ Цитата(menzoda @ Oct 8 2014, 09:17) Во-пе... Oct 8 2014, 18:57 ДЕЙЛ Цитата(ДЕЙЛ @ Sep 3 2014, 14:34) Есть ещё... Sep 5 2014, 07:49 andrewlekar Вот исходники загрузчика для LPC178X. Практически ... Sep 8 2014, 06:39 toweroff ДЕЙЛ, я, конечно, ничего против не имею, но такая ... Oct 8 2014, 14:52 menzoda Не надо ничего сдвигать на 7 битов! Прочитай в... Oct 8 2014, 19:17 ДЕЙЛ Цитата(menzoda @ Oct 8 2014, 23:17) Не на... Oct 8 2014, 19:42 ДЕЙЛ Почему-то в пашаговом режиме после перехода по адр... Oct 8 2014, 20:55 menzoda Не так считаешь. Векторов прерываний 51, в байтах ... Oct 9 2014, 04:54 ДЕЙЛ насчёт перескока на 2кб на какой странице мануала ... Oct 9 2014, 06:47  menzoda Цитатанасчёт перескока на 2кб на какой странице ма... Oct 9 2014, 07:30   ДЕЙЛ Цитата(menzoda @ Oct 9 2014, 11:30) То ес... Oct 9 2014, 08:53 menzoda ЦитатаМошть ещё нужно указатель стека на нужное ме... Oct 9 2014, 10:15 ДЕЙЛ Железно заработало
дело было ещё и в указателе ... Oct 9 2014, 19:26 menzoda ЦитатаЖелезно заработало
Наконец! Всем миром з... Oct 10 2014, 04:59 ДЕЙЛ Оставлю тут свой код загрузчика на всякий случай, ... Feb 16 2015, 12:28
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|