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

 
 
> LPC11xx не стартует код из своего бутлоадера
zuy
сообщение Oct 21 2010, 10:42
Сообщение #1


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

Группа: Свой
Сообщений: 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);
}


В результате поведение непредсказуемое. то висит, то попадает куда-то в середину бутлоадера.
Если убрать ремап, то целевая прога запускается, но естественно с векторами из флеша.

Что я забываю в этой схеме?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Almaz1988
сообщение Oct 5 2012, 10:07
Сообщение #2


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

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Дело близится к завершению))

"Программный загрузчик" при запуске слушает сеть, определяет есть ли устройства которые требуют обновления прошивки. Если таких нет передает управление "Рабочей программе". Если есть, то переводит это устройство в режим аппаратного загрузчика (заводской бутлоадер) и прошивает его.
Дальше по идее нужно перезапустить прошитое устройство. Для этого у аппаратного загрузчика предусмотрена команда "GO". Но, она позволяет прыгать только по адресам кратным 0х10! А Reset_handler у меня находится по адресу, не кратному 0х10. Т.е. сейчас он у меня по адресу 0x01ad. Прыгнуть в него командой аппаратного загрузчика "GO" я смогу, только если он будет по адресу, например, 0x1b0.

Keil позволяет использовать атрибут __attribute__((at(0x10000))) расположения переменных по конкретному адресу, но, к сожалению на функции этот атрибут не распростаняется. Откусывать память в линкере могу только кусками кратными 4 байтам, что не выручает.

Есть ли другой способ "подвинуть" Reset_handler в памяти МК?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 5 2012, 13:23
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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 байтам откусывуть.
Go to the top of the page
 
+Quote Post
igor_mmm
сообщение Oct 6 2012, 19:07
Сообщение #4





Группа: Новичок
Сообщений: 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);

Что нужно добавить?

Go to the top of the page
 
+Quote Post
KRS
сообщение Oct 6 2012, 20:13
Сообщение #5


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(igor_mmm @ Oct 6 2012, 23:07) *
Необходимо организовать выдачу без подтверждения приема. То есть на приемной стороне может отсутствовать приемник.

Если в сети только одно устройство (ACK выставить некому) то передатчик будет отправлять сообщение заново и увеличивать счетчик ошибок (пока не дойдет до ERROR PASSIVE), потом просто будет передавать пока не остановишь принудительно или не появится второе устройство.

Если реально надо выдавать разные фреймы (хотя принимать их все равно не кому) Надо сделать Disable Automatic Retransmission, тогда попытка отправки будет тольо одна! Или надо отменять посылку потом.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - igor_mmm   Цитата(KRS @ Oct 7 2012, 00:13) Если в се...   Oct 7 2012, 07:29
- - 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


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 22:06
Рейтинг@Mail.ru


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