|
Свой загрузчик для lpc1766 |
|
|
|
Jul 4 2011, 13:58
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 4-07-11
Пользователь №: 66 052

|
Заранее прошу прощения за свою тупость, тема вроде как не раз поднималась на форуме, но я так и не уловил один ключевой момент: Возможно ли написать свой загрузчик, который бы не использовал дефолтный загрузчик c этими его мутными командами?
Все примеры, которые мне попадались, его использовали (или я IAP это что-то другое?). И в даташите мне попалась тревожная строчка "If software executes a write directly to the flash memory, the flash accelerator will generate a Bus Fault exception. Flash programming must be accomplished by using the specified flash programming interface provided by the Boot Code."
Но хотелось бы убедиться.
(lpc1766 (cortex m3), Keil).
Сообщение отредактировал poganoe_lamerishe - Jul 4 2011, 14:01
|
|
|
|
|
Jul 4 2011, 14:13
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(poganoe_lamerishe @ Jul 4 2011, 17:58)  Возможно ли написать свой загрузчик, который бы не использовал дефолтный загрузчик c этими его мутными командами? Да, возможно. Цитата(poganoe_lamerishe @ Jul 4 2011, 17:58)  Все примеры, которые мне попадались, его использовали (или я IAP это что-то другое?). Да, IAP - это немного другое. IAP - это фактически набор функций, которые можно вызывать из своей программы, чтобы программировать флэш. Цитата(poganoe_lamerishe @ Jul 4 2011, 17:58)  И в даташите мне попалась тревожная строчка "If software executes a write directly to the flash memory, the flash accelerator will generate a Bus Fault exception. Flash programming must be accomplished by using the specified flash programming interface provided by the Boot Code." Это нисколько не тревожная строчка. Сказано, что программировать флэш нужно через IAP. Просто в некоторых МК программирование флэш делается простой записью данных в адреса флэш, и они напоминают, что в этом МК не так.
|
|
|
|
|
Jul 4 2011, 20:03
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 4-07-11
Пользователь №: 66 052

|
Цитата Да, возможно. Понимаю, что это глупый вопрос, но как это сделать? Особенно вот в тот момент, когда придется переписывать память по адресам 0x00...0x400, где вроде как располагается таблица векторов прерываний - их нужно заблаговременно ремапить на какую-нибудь другую область или это не обязательно? И сам загрузчик, я так понимаю, должен исполняться из RAM (чтобы себя не перезаписать случайно)? Цитата 1)На форуме есть раздел для начинающих. Возможно мне там самое место, но раз уж я топик тут начал ._. Цитата 2)Не пользоваться функциями штатного загрузчика нет никаких причин. Процедуры записи во Flash не документированы, если делать совсем уж больше нечего стало - потрошите загрузчик. Не забудьте проделывать эту процедуру для каждой новой партии чипов. Цитата Это нисколько не тревожная строчка. Сказано, что программировать флэш нужно через IAP. Просто в некоторых МК программирование флэш делается простой записью данных в адреса флэш, и они напоминают, что в этом МК не так. Вот в этом я как раз заблуждался, мне почему-то казалось, что к Flash можно обращаться просто по указателю. Спасибо за разъяснение. Не знаю, прозвучит ли это слишком нагло, но может есть какой-нибудь мануал по написанию загрузчика? Или просто лучше пойти изучать чужие реализации?
|
|
|
|
|
Jul 4 2011, 20:44
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (poganoe_lamerishe @ Jul 4 2011, 23:03)  Не знаю, прозвучит ли это слишком нагло, но может есть какой-нибудь мануал по написанию загрузчика? За Вас никто не решит, что именно Вам нужно от загрузчика и чем Вас родной не устраивает. Какой-такой мануал в такой ситуации может Вам помочь? Посему в первую очередь голова. Потом документация на ядро и контроллер. Потом изучение ответов на этот-же вопрос заданный Вашими многочисленными предшественниками. QUOTE (poganoe_lamerishe @ Jul 4 2011, 23:03)  Возможно мне там самое место, но раз уж я топик тут начал ._. Модератор перенес тему.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 4 2011, 20:56
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 4-07-11
Пользователь №: 66 052

|
Цитата За Вас никто не решит, что именно Вам нужно от загрузчика и чем Вас родной не устраивает. Какой-такой мануал в такой ситуации может Вам помочь? Посему в первую очередь голова. Потом документация на ядро и контроллер. Потом изучение ответов на этот-же вопрос заданный Вашими многочисленными предшественниками. Тут вы правы, конечно. Спасибо.
|
|
|
|
|
Jul 5 2011, 11:50
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 4-07-11
Пользователь №: 66 052

|
Цитата Используйте IAP - несколько простейших процедур - и вся flash-память процессора под Вашим контролем. Останется только вопрос как принимать прошивку (uart, usb etc.), где её хранить (если есть необходимость) или прошивать на лету. Недавно на форуме была тема по загрузчику LPC2378 - я там выкладывал процедуры работы с IAP которые один в один подходят для LPC17xx. Только нужно поменять адрес расположения IAP. Значит примерно последовательность действий такая: 1) Загрузчик и вся его требуха (вроде функций, принимающих прошивку) сидят в RAM. 2) Когда загрузчик начинает работать, прерывания запрещаются 3) Допустим, принял кусок прошивки и запихал в Flash. 4) Когда закончил - перезагрузился. Если я правильно понимаю, сам загрузчик потом может быть обновлен (если вдруг понадобиться) остальной программой - прямой записью в RAM. А вот если в процессе прошивания питание пропадет?
|
|
|
|
|
Jul 5 2011, 11:58
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (poganoe_lamerishe @ Jul 5 2011, 14:50)  1) Загрузчик и вся его требуха (вроде функций, принимающих прошивку) сидят в RAM. Незачем. QUOTE 2) Когда загрузчик начинает работать, прерывания запрещаются Возможны варианты. Для начала нужно вообще КРЕПКО подумать, зачем загрузчику прерывания. QUOTE 3) Допустим, принял кусок прошивки и запихал в Flash. Допустим. QUOTE 4) Когда закончил - перезагрузился. Достаточно просто передать управление. QUOTE Если я правильно понимаю, сам загрузчик потом может быть обновлен (если вдруг понадобиться) остальной программой - прямой записью в RAM. Может быть все, но кое-что делать смысла не имеет. QUOTE А вот если в процессе прошивания питание пропадет? Если напишите через анус, в анусе и окажитесь. Если напишите нормально, то после появления питания окажетесь, как минимум, в загрузчике и начнете заново.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 5 2011, 12:25
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 4-07-11
Пользователь №: 66 052

|
Цитата(zltigo @ Jul 5 2011, 15:58)  Незачем. Ну, чтобы случайно самого себя не перезаписать, не? Цитата Если напишите через анус, в анусе и окажитесь. Если напишите нормально, то после появления питания окажетесь, как минимум, в загрузчике и начнете заново. Резонно.
|
|
|
|
|
Jul 5 2011, 13:44
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 4-07-11
Пользователь №: 66 052

|
Цитата Загрузчик должен знать, по каким адресам можно записывать, а по каким нет. Если новая прошивка слишком большая и не помещается в допустимый диапазон адресов - это не совместимая прошивка! Да, вы правы. Цитата Загрузчик должен знать, по каким адресам можно записывать, а по каким нет. Простите за тупой вопрос, но как это узнать? Есть какой-то способ разместить код самого загрузчика начиная с определенного адреса? Или как?
|
|
|
|
|
Jul 5 2011, 15:11
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 4-07-11
Пользователь №: 66 052

|
Цитата(zltigo @ Jul 5 2011, 18:03)  Любые прошивки, в том числе и загрузчик, размещаются во Flash по совершенно определенным адресам. И никак иначе. Я дико извиняюсь, но не могли бы вы поподробнее объяснить или послать меня куда-нибудь, где я мог бы сам про это прочесть?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|