реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Свой загрузчик для lpc1766
poganoe_lamerish...
сообщение Jul 4 2011, 13:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 4 2011, 14:10
Сообщение #2


Гуру
******

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



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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 4 2011, 14:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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. Просто в некоторых МК программирование флэш делается простой записью данных в адреса флэш, и они напоминают, что в этом МК не так.
Go to the top of the page
 
+Quote Post
poganoe_lamerish...
сообщение Jul 4 2011, 20:03
Сообщение #4


Участник
*

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



Цитата
Да, возможно.

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

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

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

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

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


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

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

Не знаю, прозвучит ли это слишком нагло, но может есть какой-нибудь мануал по написанию загрузчика?
Или просто лучше пойти изучать чужие реализации?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 4 2011, 20:44
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
poganoe_lamerish...
сообщение Jul 4 2011, 20:56
Сообщение #6


Участник
*

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



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

Тут вы правы, конечно. Спасибо.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 5 2011, 07:42
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



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


(lpc1766 (cortex m3), Keil).


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

Сообщение отредактировал mempfis_ - Jul 5 2011, 07:43
Go to the top of the page
 
+Quote Post
poganoe_lamerish...
сообщение Jul 5 2011, 11:50
Сообщение #8


Участник
*

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



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


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

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

А вот если в процессе прошивания питание пропадет?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 11:58
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
poganoe_lamerish...
сообщение Jul 5 2011, 12:25
Сообщение #10


Участник
*

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



Цитата(zltigo @ Jul 5 2011, 15:58) *
Незачем.

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

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

Резонно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 12:37
Сообщение #11


Гуру
******

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



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

Незачем, потому, что никакого смысла размещать загрузчик в RAM нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jul 5 2011, 13:11
Сообщение #12


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



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

Как это - случайно?
Загрузчик должен знать, по каким адресам можно записывать, а по каким нет.
Если новая прошивка слишком большая и не помещается в допустимый диапазон адресов - это не совместимая прошивка!
Go to the top of the page
 
+Quote Post
poganoe_lamerish...
сообщение Jul 5 2011, 13:44
Сообщение #13


Участник
*

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



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

Да, вы правы.

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

Простите за тупой вопрос, но как это узнать?
Есть какой-то способ разместить код самого загрузчика начиная с определенного адреса?
Или как?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 14:03
Сообщение #14


Гуру
******

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



QUOTE (poganoe_lamerishe @ Jul 5 2011, 16:44) *
Или как?

Любые прошивки, в том числе и загрузчик, размещаются во Flash по совершенно определенным адресам. И никак иначе.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
poganoe_lamerish...
сообщение Jul 5 2011, 15:11
Сообщение #15


Участник
*

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



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


Я дико извиняюсь, но не могли бы вы поподробнее объяснить или послать меня куда-нибудь, где я мог бы сам про это прочесть?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 03:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.03296 секунд с 7
ELECTRONIX ©2004-2016