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

 
 
> BootLoader, Newbee наступает с вопросами!
Злодей
сообщение Feb 11 2009, 16:12
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142



Здравствуйте, ребята!

Написал бутлоадер, написал пользовательскую программу. Оба в WinAVR. Есть в результате два .elf (ну или просто два сишника с main), теперь надо их соединить, да ещё так, чтоб бутлоадер попадал в "Boot Loader Flash Section".
Направьте меня, в какую сторону копать. Есть ли что-то в MakeFile's, что должно быть подправлено?

Ещё есть несколько конкретных впросов:

В даташите на мегу уделено много внимания "Read-While-Write Section" и "No Read-While-Write Section", я не очень с ними разобрался, вообще это важно?

Я сомниваюсь при выборе алгоритма обновления прошивки, сейчас в голове такая картина:
1. Пользовательская программа, решив обновиться, произносит заклинание asm{ jmp $3F00 }, где - $3F00 - Boot Loader Flash Section. (хоть это я правильно понял? Начнёт работать бутлоадер?)
2. Бутлоадер обновляет флэш и делает asm{ jmp $02A }, запуская тем самым пользовательскую программу (или она не там?)
Но почему-то хочется сделать всё через перезагрузку, вроде:
1. пользовательская программа ставит в EEPROM флаг "обновиться" и перезагружает МК
2. бутлоадер видит флаг, обновляет, снимает флаг, перезагружает МК
3. бутлоадер видит - флага нет, и запускает пользовательскую программу.
Но есть ли в этом смысл, и будет ли разница между была перезагрузка - не было?

Помогите, пожалуйста, у меня очень большое желание сделать красиво :)

Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Feb 11 2009, 20:51
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Злодей @ Feb 11 2009, 18:12) *
да ещё так, чтоб бутлоадер попадал в "Boot Loader Flash Section".
Делайте загрузчик отдельным приложением. При линковке задайте параметр -Wl,-section-start=.text=адрес, где адрес - начало области загрузчика (в байтах!)
Цитата(Злодей @ Feb 11 2009, 18:12) *
Бутлоадер обновляет флэш и делает asm{ jmp $02A }, запуская тем самым пользовательскую программу (или она не там?)
Вектор сброса находится по адресу 0. Вот туда и передавайте управление. Не забывайте перед этим вернуть периферию в исходное состояние, а в приложении явно проинициализировать всю использованную периферию.
Цитата(Злодей @ Feb 11 2009, 18:12) *
Но почему-то хочется сделать всё через перезагрузку, вроде:
Я использую одну из ножек, при нормальной работе настроенную на вывод. Если загрузчик видит ее настроенной на ввод - было включение питания, работа штатная. Если при этом нога притянута снаружи не туда, куда ее тянет внешняя подтяжка - это сигнал принудительной перепрошивки. Если нога притянута куда надо - проверка приложения и если все хорошо - его запуск. Если нога настроена на вывод - значит приложение передало управление загрузчику и надо сразу идти на перепрошивку.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 12 2009, 08:20
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Сергей Борщ @ Feb 11 2009, 21:51) *
Не забывайте перед этим вернуть периферию в исходное состояние, а в приложении явно проинициализировать всю использованную периферию

Ух, как сложно и ненадежно. Переход в приложение должен быть выполнен практически сразу после входа в загрузчик (после сброса), тогда голова об инициализации болеть не будет. А сброс, конечно же, выполняется по собаке.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 13 2009, 01:27
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Огурцов @ Feb 12 2009, 10:20) *
Ух, как сложно и ненадежно. Переход в приложение должен быть выполнен практически сразу после входа в загрузчик (после сброса)

Запускать битый аппликейшн сразу, это похоже ваш стиль... И он должно быть "чертовски" надежен...

Я предпочитаю так:
CODE
/***********************************************
* RunApplication() *
* This routine shuts-off peripherals used *
* by the bootloader and performs jump to 0x0 *
* address *
* *
***********************************************/
void RunApplication(void)
{
V32 tmp = 500000;
pgm_print("trying to run application...\n");
if (brmContext.appChanged)
{
iap_Finalize(); // make sure all flash operations are completed and RWW section re-enabled
// rebuild app section CRC
brmContext.appSectionCRC = iap_CheckCRC();
brmContext.appChanged = FALSE;
}

if (brmContext.appSectionCRC)
{
// Wrong CRC! (section corrupted)
pgm_print("app section CRC error detected, can't leave bootloader\n");
return;
}

while(tmp--); // wait while queues being flushed

cli(); // disable interrupts

// stop timers
ETIMSK = 0; // disable Extended timers int sources
TIMSK = 0; // disable timers int sources

TCCR3B = 0; // stop timer3
TCCR2 = 0; // stop timer2
TCCR1B = 0; // stop timer1
TCCR0 = 0; // stop timer0

// stop uarts
UCSR1B = 0; // stop UART1
UCSR0B = 0; // stop UART0

// stop SPIs
SPCR = 0; // stop SPI0

// stop TWI bus
TWCR = 0; // stop TWI module

// reset used ports
DDRF = 0;
PORTF = 0;

DDRE = 0;
PORTE = 0;

DDRB = 0;
PORTB = 0;

// switch interrupt vector table to app section
MCUCR = (1 << IVCE);
MCUCR = (0 << IVSEL);

// jump to zero address
((void(*)(void))0x0)();
}
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 13 2009, 05:42
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(defunct @ Feb 13 2009, 01:27) *
Запускать битый аппликейшн сразу, это похоже ваш стиль... И он должно быть "чертовски" надежен...

Я этого не говорил, речь идет про недопустимую инициализацию железа в загрузчике между ресетом и переходом в приложение.

Цитата(defunct @ Feb 13 2009, 01:27) *
Я предпочитаю так

Вот-вот, именно так и не надо.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 13 2009, 07:00
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Огурцов @ Feb 13 2009, 07:42) *
Я этого не говорил, речь идет про недопустимую инициализацию железа в загрузчике между ресетом и переходом в приложение.
AT91SAM7 стартует от RC на 32КГц. Приложение может быть до 512К (минус загрузчик). Вы представляете, сколько времени займет подсчет целостности этого приложения при 32КГц тактовой? Разрешите хоть PLL включить, а? У MSP430 после включения питания запущена собака. Если ее не отключить, через 32768 тактов она сбросит процессор. Разрешите отключить ее на время проверки целостности? defunct выводит диагностические сообщения в консоль. Разрешите ему UART настроить, а то не видно ничего? Нужные порты разрешите настроить на вывод, что б не болтались?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Злодей   BootLoader   Feb 11 2009, 16:12
- - Dog Pawlowa   Цитата(Злодей @ Feb 11 2009, 19:12) 1. По...   Feb 11 2009, 16:21
|- - Злодей   Спасибо большое, значит поставлю фьюз, чтоб первым...   Feb 11 2009, 16:28
|- - Dog Pawlowa   Цитата(Сергей Борщ @ Feb 13 2009, 10:00) ...   Feb 13 2009, 07:26
|- - Злодей   Цитата(Сергей Борщ @ Feb 13 2009, 10:00) ...   Feb 13 2009, 09:53
||- - defunct   Цитата(Злодей @ Feb 13 2009, 11:53) Так в...   Feb 13 2009, 10:10
||- - Dog Pawlowa   Цитата(defunct @ Feb 13 2009, 14:10) Я со...   Feb 13 2009, 10:50
|- - Огурцов   Цитата(Сергей Борщ @ Feb 13 2009, 07:00) ...   Feb 13 2009, 19:46
|- - defunct   Цитата(Огурцов @ Feb 13 2009, 21:46) Есть...   Feb 14 2009, 00:13
|- - smac   Цитата(defunct @ Feb 14 2009, 03:13) Резе...   Feb 14 2009, 06:56
|- - Огурцов   Цитата(defunct @ Feb 14 2009, 00:13) - Ес...   Feb 14 2009, 10:17
|- - defunct   Цитата(Огурцов @ Feb 14 2009, 12:17) Очен...   Feb 14 2009, 20:57
|- - Огурцов   Цитата(defunct @ Feb 14 2009, 21:57) Еще ...   Feb 14 2009, 21:43
|- - defunct   Цитата(Огурцов @ Feb 14 2009, 23:43) И эт...   Feb 14 2009, 22:42
|- - Огурцов   Цитата(defunct @ Feb 14 2009, 23:42) Непр...   Feb 14 2009, 23:03
|- - defunct   Цитата(Огурцов @ Feb 15 2009, 01:03) Разб...   Feb 14 2009, 23:16
|- - Огурцов   Цитата(defunct @ Feb 15 2009, 00:16) AVR1...   Feb 15 2009, 00:02
|- - defunct   Цитата(Огурцов @ Feb 15 2009, 02:02) Вот ...   Feb 15 2009, 01:27
|- - Огурцов   Цитата(defunct @ Feb 15 2009, 02:27) Да н...   Feb 15 2009, 02:01
|- - defunct   Цитата(Огурцов @ Feb 15 2009, 04:01) Аха,...   Feb 15 2009, 02:11
|- - Огурцов   Цитата(defunct @ Feb 15 2009, 03:11) Меша...   Feb 15 2009, 02:25
- - Злодей   Спасибо за советы, я скопирую сюда уже тысячу раз ...   Feb 13 2009, 06:16
- - defunct   Цитататак я ж сказал, как сделать правильно С этим...   Feb 15 2009, 02:31
- - Огурцов   Цитата(defunct @ Feb 15 2009, 03:31) С эт...   Feb 15 2009, 02:51


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

 


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


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