Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Свой загрузчик для lpc1766
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
poganoe_lamerishe
Заранее прошу прощения за свою тупость, тема вроде как не раз поднималась на форуме, но я так и не уловил один ключевой момент:
Возможно ли написать свой загрузчик, который бы не использовал дефолтный загрузчик 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).
zltigo
1)На форуме есть раздел для начинающих.
2)Не пользоваться функциями штатного загрузчика нет никаких причин. Процедуры записи во Flash не документированы, если делать совсем уж больше нечего стало - потрошите загрузчик. Не забудьте проделывать
эту процедуру для каждой новой партии чипов.
3)ничего мутного в вызове процедуры программирования нет.
scifi
Цитата(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. Просто в некоторых МК программирование флэш делается простой записью данных в адреса флэш, и они напоминают, что в этом МК не так.
poganoe_lamerishe
Цитата
Да, возможно.

Понимаю, что это глупый вопрос, но как это сделать?
Особенно вот в тот момент, когда придется переписывать память по адресам 0x00...0x400, где вроде как располагается таблица векторов прерываний - их нужно заблаговременно ремапить на какую-нибудь другую область или это не обязательно?

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

Цитата
1)На форуме есть раздел для начинающих.

Возможно мне там самое место, но раз уж я топик тут начал ._.

Цитата
2)Не пользоваться функциями штатного загрузчика нет никаких причин. Процедуры записи во Flash не документированы, если делать совсем уж больше нечего стало - потрошите загрузчик. Не забудьте проделывать
эту процедуру для каждой новой партии чипов.


Цитата
Это нисколько не тревожная строчка. Сказано, что программировать флэш нужно через IAP. Просто в некоторых МК программирование флэш делается простой записью данных в адреса флэш, и они напоминают, что в этом МК не так.

Вот в этом я как раз заблуждался, мне почему-то казалось, что к Flash можно обращаться просто по указателю. Спасибо за разъяснение.

Не знаю, прозвучит ли это слишком нагло, но может есть какой-нибудь мануал по написанию загрузчика?
Или просто лучше пойти изучать чужие реализации?
zltigo
QUOTE (poganoe_lamerishe @ Jul 4 2011, 23:03) *
Не знаю, прозвучит ли это слишком нагло, но может есть какой-нибудь мануал по написанию загрузчика?

За Вас никто не решит, что именно Вам нужно от загрузчика и чем Вас родной не устраивает. Какой-такой мануал в такой ситуации может Вам помочь? Посему в первую очередь голова. Потом документация на ядро и контроллер. Потом изучение ответов на этот-же вопрос заданный Вашими многочисленными предшественниками.


QUOTE (poganoe_lamerishe @ Jul 4 2011, 23:03) *
Возможно мне там самое место, но раз уж я топик тут начал ._.

Модератор перенес тему.
poganoe_lamerishe
Цитата
За Вас никто не решит, что именно Вам нужно от загрузчика и чем Вас родной не устраивает. Какой-такой мануал в такой ситуации может Вам помочь? Посему в первую очередь голова. Потом документация на ядро и контроллер. Потом изучение ответов на этот-же вопрос заданный Вашими многочисленными предшественниками.

Тут вы правы, конечно. Спасибо.
mempfis_
Цитата(poganoe_lamerishe @ Jul 4 2011, 16:58) *
Заранее прошу прощения за свою тупость, тема вроде как не раз поднималась на форуме, но я так и не уловил один ключевой момент:
Возможно ли написать свой загрузчик, который бы не использовал дефолтный загрузчик c этими его мутными командами?


(lpc1766 (cortex m3), Keil).


Используйте IAP - несколько простейших процедур - и вся flash-память процессора под Вашим контролем. Останется только вопрос как принимать прошивку (uart, usb etc.), где её хранить (если есть необходимость) или прошивать на лету. Недавно на форуме была тема по загрузчику LPC2378 - я там выкладывал процедуры работы с IAP которые один в один подходят для LPC17xx. Только нужно поменять адрес расположения IAP.
poganoe_lamerishe
Цитата
Используйте IAP - несколько простейших процедур - и вся flash-память процессора под Вашим контролем. Останется только вопрос как принимать прошивку (uart, usb etc.), где её хранить (если есть необходимость) или прошивать на лету. Недавно на форуме была тема по загрузчику LPC2378 - я там выкладывал процедуры работы с IAP которые один в один подходят для LPC17xx. Только нужно поменять адрес расположения IAP.


Значит примерно последовательность действий такая:
1) Загрузчик и вся его требуха (вроде функций, принимающих прошивку) сидят в RAM.
2) Когда загрузчик начинает работать, прерывания запрещаются
3) Допустим, принял кусок прошивки и запихал в Flash.
4) Когда закончил - перезагрузился.

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

А вот если в процессе прошивания питание пропадет?
zltigo
QUOTE (poganoe_lamerishe @ Jul 5 2011, 14:50) *
1) Загрузчик и вся его требуха (вроде функций, принимающих прошивку) сидят в RAM.

Незачем.
QUOTE
2) Когда загрузчик начинает работать, прерывания запрещаются

Возможны варианты. Для начала нужно вообще КРЕПКО подумать, зачем загрузчику прерывания.
QUOTE
3) Допустим, принял кусок прошивки и запихал в Flash.

Допустим.
QUOTE
4) Когда закончил - перезагрузился.

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

Может быть все, но кое-что делать смысла не имеет.
QUOTE
А вот если в процессе прошивания питание пропадет?

Если напишите через анус, в анусе и окажитесь. Если напишите нормально, то после появления питания окажетесь, как минимум, в загрузчике и начнете заново.
poganoe_lamerishe
Цитата(zltigo @ Jul 5 2011, 15:58) *
Незачем.

Ну, чтобы случайно самого себя не перезаписать, не?

Цитата
Если напишите через анус, в анусе и окажитесь. Если напишите нормально, то после появления питания окажетесь, как минимум, в загрузчике и начнете заново.

Резонно.
zltigo
QUOTE (poganoe_lamerishe @ Jul 5 2011, 15:25) *
Ну, чтобы случайно самого себя не перезаписать, не?

Незачем, потому, что никакого смысла размещать загрузчик в RAM нет.
sonycman
Цитата(poganoe_lamerishe @ Jul 5 2011, 16:25) *
Ну, чтобы случайно самого себя не перезаписать, не?

Как это - случайно?
Загрузчик должен знать, по каким адресам можно записывать, а по каким нет.
Если новая прошивка слишком большая и не помещается в допустимый диапазон адресов - это не совместимая прошивка!
poganoe_lamerishe
Цитата
Загрузчик должен знать, по каким адресам можно записывать, а по каким нет.
Если новая прошивка слишком большая и не помещается в допустимый диапазон адресов - это не совместимая прошивка!

Да, вы правы.

Цитата
Загрузчик должен знать, по каким адресам можно записывать, а по каким нет.

Простите за тупой вопрос, но как это узнать?
Есть какой-то способ разместить код самого загрузчика начиная с определенного адреса?
Или как?
zltigo
QUOTE (poganoe_lamerishe @ Jul 5 2011, 16:44) *
Или как?

Любые прошивки, в том числе и загрузчик, размещаются во Flash по совершенно определенным адресам. И никак иначе.
poganoe_lamerishe
Цитата(zltigo @ Jul 5 2011, 18:03) *
Любые прошивки, в том числе и загрузчик, размещаются во Flash по совершенно определенным адресам. И никак иначе.


Я дико извиняюсь, но не могли бы вы поподробнее объяснить или послать меня куда-нибудь, где я мог бы сам про это прочесть?
zltigo
QUOTE (poganoe_lamerishe @ Jul 5 2011, 18:11) *
где я мог бы сам про это прочесть?

Что такое линкер и с чем его едят. Потом уже документация на конкретный линкер.
poganoe_lamerishe
Цитата(zltigo @ Jul 5 2011, 19:22) *
Что такое линкер и с чем его едят. Потом уже документация на конкретный линкер.

Спасибо, пойду просвещаться!
mempfis_
Цитата(poganoe_lamerishe @ Jul 5 2011, 19:48) *
Спасибо, пойду просвещаться!


Посмотрите здесь - может чем-то поможет Вам.
http://electronix.ru/forum/index.php?showtopic=91470

poganoe_lamerishe
Цитата(mempfis_ @ Jul 6 2011, 11:19) *
Посмотрите здесь - может чем-то поможет Вам.
http://electronix.ru/forum/index.php?showtopic=91470


Большое спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.