|
LPC11xx не стартует код из своего бутлоадера |
|
|
|
Oct 21 2010, 10:42
|

Частый гость
 
Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593

|
Использую LPC1114. По доке вроде все понятно. Свой бутлоадер код во флеш прописал. для старта делаю следующее: 1. копирую 48 векторов прерывания основной программы в ОЗУ с адреса 0x10000000 2. Делаю ремап LPC_SYSCON->SYSMEMREMAP = 0x01; т.е. отобрашаем вектора из ОЗУ в начало адресного простанства 3. инициализирую SP и PC данными из первых 8-ми байт моей проги. Все это выглядит так: Код __asm void boot_jump( uint32_t address ) { LDR R1, [R0] ;Load new stack pointer address MOV R13, R1 LDR R1, [R0, #4];Load new program counter address BX R1 }
void run(unsigned long address) { unsigned long *dst, size; const unsigned long *src; // Copy vectors table src = (unsigned long *)address; dst = (unsigned long *)0x10000000; size = VECTORS_TABLE_SIZE >> 2; do { *dst++ = *src++; } while (--size);
LPC_SYSCON->SYSMEMREMAP = 0x01; /* remap to SRAM */
boot_jump(address); } В результате поведение непредсказуемое. то висит, то попадает куда-то в середину бутлоадера. Если убрать ремап, то целевая прога запускается, но естественно с векторами из флеша. Что я забываю в этой схеме?
|
|
|
|
|
 |
Ответов
|
Oct 5 2012, 10:07
|
Частый гость
 
Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602

|
Дело близится к завершению))
"Программный загрузчик" при запуске слушает сеть, определяет есть ли устройства которые требуют обновления прошивки. Если таких нет передает управление "Рабочей программе". Если есть, то переводит это устройство в режим аппаратного загрузчика (заводской бутлоадер) и прошивает его. Дальше по идее нужно перезапустить прошитое устройство. Для этого у аппаратного загрузчика предусмотрена команда "GO". Но, она позволяет прыгать только по адресам кратным 0х10! А Reset_handler у меня находится по адресу, не кратному 0х10. Т.е. сейчас он у меня по адресу 0x01ad. Прыгнуть в него командой аппаратного загрузчика "GO" я смогу, только если он будет по адресу, например, 0x1b0.
Keil позволяет использовать атрибут __attribute__((at(0x10000))) расположения переменных по конкретному адресу, но, к сожалению на функции этот атрибут не распростаняется. Откусывать память в линкере могу только кусками кратными 4 байтам, что не выручает.
Есть ли другой способ "подвинуть" Reset_handler в памяти МК?
|
|
|
|
|
Oct 5 2012, 13:23
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Almaz1988 @ Oct 5 2012, 13:07)  "Программный загрузчик" при запуске слушает сеть, определяет есть ли устройства которые требуют обновления прошивки. Если таких нет передает управление "Рабочей программе". Если есть, то переводит это устройство в режим аппаратного загрузчика (заводской бутлоадер) и прошивает его. Не понимаю, зачем переводить устройство в режим заводского загрузчика, если есть свой? Цитата(Almaz1988 @ Oct 5 2012, 13:07)  Дальше по идее нужно перезапустить прошитое устройство. Для этого у аппаратного загрузчика предусмотрена команда "GO". Но, она позволяет прыгать только по адресам кратным 0х10! А Reset_handler у меня находится по адресу, не кратному 0х10. Т.е. сейчас он у меня по адресу 0x01ad. Прыгнуть в него командой аппаратного загрузчика "GO" я смогу, только если он будет по адресу, например, 0x1b0. Опять же зачем использовать Go и тп. Не проще ли подать буту команду reset и он запустит Reset_Handler по какому надо адресу, не глядя на выравнивание. Цитата(Almaz1988 @ Oct 5 2012, 13:07)  А Reset_handler у меня находится по адресу, не кратному 0х10. Т.е. сейчас он у меня по адресу 0x01ad. Это Reset_Handler бута или приложения? Цитата(Almaz1988 @ Oct 5 2012, 13:07)  Keil позволяет использовать атрибут __attribute__((at(0x10000))) расположения переменных по конкретному адресу, но, к сожалению на функции этот атрибут не распростаняется. Откусывать память в линкере могу только кусками кратными 4 байтам, что не выручает. Раз можно кратными по 4 байта, то можно и кратно 16 байтам откусывуть.
|
|
|
|
|
Oct 6 2012, 19:07
|
Группа: Новичок
Сообщений: 7
Регистрация: 3-10-12
Пользователь №: 73 792

|
Добрый День! Использую 11с24 и работаю с CAN. Необходимо организовать выдачу без подтверждения приема. То есть на приемной стороне может отсутствовать приемник. Смотрю пример "CAN on_chip" из примеров KEIL.
msg_obj.msgobj = 1; msg_obj.mode_id = 0x123 ; msg_obj.mask = 0xff; msg_obj.dlc = 5; msg_obj.data[0] = 'T'; msg_obj.data[1] = 'E'; msg_obj.data[2] = 'S'; //0x53 msg_obj.data[3] = 'T'; //0x54 (*rom)->pCAND->can_transmit(&msg_obj);
Что нужно добавить?
|
|
|
|
|
Oct 7 2012, 07:29
|
Группа: Новичок
Сообщений: 7
Регистрация: 3-10-12
Пользователь №: 73 792

|
Цитата(KRS @ Oct 7 2012, 00:13)  Если в сети только одно устройство (ACK выставить некому) то передатчик будет отправлять сообщение заново и увеличивать счетчик ошибок (пока не дойдет до ERROR PASSIVE), потом просто будет передавать пока не остановишь принудительно или не появится второе устройство.
Если реально надо выдавать разные фреймы (хотя принимать их все равно не кому) Надо сделать Disable Automatic Retransmission, тогда попытка отправки будет тольо одна! Или надо отменять посылку потом. Сделал DAR. Сначала долго не работало, я засылал посылку один раз и после инициализации типа так Код (*rom)->pCAND->can_transmit(&msg_obj); //послать один раз while (1); // бесконечный цикл. а теперь сделал Код while(1) { i++; if(i>1000000) { i=0; /* Send a simple CAN message */ msg_obj.msgobj = 0; msg_obj.mode_id = 0x500; msg_obj.mask = 0x0; msg_obj.dlc = 5; msg_obj.data[0] = 'T'; //0x54 msg_obj.data[1] = 'E'; //0x45 msg_obj.data[2] = 'S'; //0x53 msg_obj.data[3] = 'T'; //0x54 msg_obj.data[4] = 1; (*rom)->pCAND->can_transmit(&msg_obj); } } стало посылать с некой периодичностью. не понял почему но повторная посылка заработала
|
|
|
|
Сообщений в этой теме
zuy LPC11xx не стартует код из своего бутлоадера Oct 21 2010, 10:42 Alekseeey У меня та же проблема.
Пробую на отладке LPCXpres... Oct 21 2010, 12:12 zuy Цитата(Alekseeey @ Oct 21 2010, 15:12) Во... Oct 21 2010, 12:52  Alekseeey Цитата(zuy @ Oct 21 2010, 16:52) Если чес... Oct 21 2010, 13:01 DpInRock Вообще-то так и должно быть.
Как правильно (это м... Oct 21 2010, 12:38 DpInRock Reset - это место откуда программа стартует. Как б... Oct 21 2010, 12:58 zuy Цитата(DpInRock @ Oct 21 2010, 15:54) Res... Oct 21 2010, 13:01  Alekseeey Цитата(zuy @ Oct 21 2010, 17:01) Да, это ... Oct 21 2010, 13:41   zuy Цитата(Alekseeey @ Oct 21 2010, 16:41) По... Oct 21 2010, 17:28    zuy Нет, все равно решительно не понимаю, что делает р... Oct 21 2010, 19:14     Alekseeey Цитата(zuy @ Oct 21 2010, 23:14) Нет, все... Oct 21 2010, 20:30      zuy Цитата(Alekseeey @ Oct 21 2010, 23:09) Об... Oct 21 2010, 20:43       Alekseeey Цитата(zuy @ Oct 22 2010, 00:43) Отладчик... Oct 22 2010, 07:00        rezident Цитата(Alekseeey @ Oct 22 2010, 13:00) По... Oct 22 2010, 13:28 DpInRock Понятия не имею. Но для вас вряд ли имеет значение... Oct 21 2010, 13:13 rezident Возникло предположение, что ремапу подвергается Fl... Oct 21 2010, 20:55 zuy Цитата(rezident @ Oct 21 2010, 23:55) Воз... Oct 21 2010, 21:09 rezident Встречный вопрос. А сколько памяти у вас отведено ... Oct 21 2010, 21:48 zuy Цитата(rezident @ Oct 22 2010, 00:48) Вст... Oct 22 2010, 05:17 rezident Сегодня проэкспериментировал со своей платой и исх... Oct 22 2010, 20:51 Alekseeey Цитата(rezident @ Oct 23 2010, 00:51) Что... Oct 23 2010, 05:02 zuy Цитата(rezident @ Oct 22 2010, 23:51) Сег... Oct 23 2010, 09:18  rezident Цитата(zuy @ Oct 23 2010, 15:18) Поставьт... Oct 23 2010, 20:00 DpInRock За кортекс не скажу, но кроме векторов надо копиро... Oct 23 2010, 08:47 rezident Любопытство победило Со второй попытки создал в K... Oct 24 2010, 01:05 zuy Цитата(rezident @ Oct 24 2010, 04:05) Люб... Oct 24 2010, 15:20  rezident Цитата(zuy @ Oct 24 2010, 21:20) Т.о. на ... Oct 24 2010, 16:17   zuy Цитата(rezident @ Oct 24 2010, 19:17) Люб... Oct 24 2010, 16:56 KRS Тоже столкнулся с проблемой. Но при обычной отладк... Jun 16 2011, 14:20 Almaz1988 Вот код бутлоадера:
CODE#include "LPC11xx.h... Sep 24 2012, 08:46 _Артём_ Цитата(Almaz1988 @ Sep 24 2012, 11:46) Ра... Sep 24 2012, 11:18 Сергей Борщ QUOTE (Almaz1988 @ Sep 24 2012, 11:46) Во... Sep 24 2012, 12:45 _Артём_ Цитата(Almaz1988 @ Sep 24 2012, 11:46) Ра... Sep 24 2012, 15:09 KRS Т.к. у Cortex-M0 нет VTOR и переместить таблицу пр... Sep 24 2012, 11:41 Almaz1988 Наметился небольшой прогресс))
В "загрузчике... Sep 28 2012, 06:22 KRS Цитата(Almaz1988 @ Sep 28 2012, 10:22) Ещ... Sep 28 2012, 07:15 Сергей Борщ QUOTE (Almaz1988 @ Sep 28 2012, 09:22) и ... Sep 28 2012, 07:56 _Артём_ Цитата(Almaz1988 @ Sep 28 2012, 09:22) Ис... Sep 28 2012, 18:55 Almaz1988 Цитата(KRS @ Sep 28 2012, 11:15) Если вы ... Sep 28 2012, 08:10 Сергей Борщ QUOTE (Almaz1988 @ Sep 28 2012, 11:10) Ср... Sep 28 2012, 08:44 KRS Цитата(Almaz1988 @ Sep 28 2012, 12:10) Я ... Sep 28 2012, 10:45 Almaz1988 Цитата(Сергей Борщ @ Sep 28 2012, 12:44) ... Sep 28 2012, 09:06 Сергей Борщ QUOTE (Almaz1988 @ Sep 28 2012, 12:06) Та... Sep 28 2012, 09:26 alx2 Кажется, без ответа остался этот вопрос:
Цитата(Al... Oct 2 2012, 10:16 Almaz1988 Цитата(Сергей Борщ @ Sep 28 2012, 13:26) ... Sep 28 2012, 09:43 Almaz1988 Продолжаю штурм))
и в загрузчике и в рабочей прогр... Oct 1 2012, 11:34 Almaz1988 Продолжаю штурм))
и в загрузчике и в рабочей прогр... Oct 1 2012, 11:36 Almaz1988 Продолжаю штурм))
и в загрузчике и в рабочей прогр... Oct 1 2012, 11:36 Almaz1988 Продолжаю штурм))
и в загрузчике и в рабочей прогр... Oct 1 2012, 11:36 Almaz1988 Продолжаю штурм))
и в загрузчике и в рабочей прогр... Oct 1 2012, 11:38 Almaz1988 Добил бутлоадер)))
В бутлоадере использую только C... Oct 2 2012, 06:09 Сергей Борщ QUOTE (Almaz1988 @ Oct 2 2012, 09:09) Как... Oct 2 2012, 06:31 Almaz1988 Цитата(igor_mmm @ Oct 6 2012, 22:07) Добр... Oct 8 2012, 04:11 igor_mmm Цитата(Almaz1988 @ Oct 8 2012, 08:11) Вот... Oct 9 2012, 03:21 Almaz1988 Вопрос по примеру "NXP secondary bootloader... Oct 8 2012, 06:05 Сергей Борщ QUOTE (Almaz1988 @ Oct 8 2012, 09:05) Как... Oct 8 2012, 06:34 Almaz1988 Цитата(Сергей Борщ @ Oct 8 2012, 09:34) П... Oct 8 2012, 09:28 Сергей Борщ QUOTE (Almaz1988 @ Oct 8 2012, 12:28) Как... Oct 8 2012, 11:02 Almaz1988 В общем осталась последняя проблема.
Есть функция ... Oct 8 2012, 11:45 Сергей Борщ QUOTE (Almaz1988 @ Oct 8 2012, 14:45) Что... Oct 8 2012, 11:57 Almaz1988 Цитата(igor_mmm @ Oct 9 2012, 06:21) а гд... Oct 9 2012, 04:24 igor_mmm Цитата(Almaz1988 @ Oct 9 2012, 08:24) В п... Oct 9 2012, 05:53 Almaz1988 Цитата(Сергей Борщ @ Oct 8 2012, 14:57) Н... Oct 9 2012, 08:34
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|