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

 
 
> 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
Ответов
Alekseeey
сообщение Oct 21 2010, 12:12
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-09-10
Пользователь №: 59 626



У меня та же проблема.

Пробую на отладке LPCXpresso, среда CodeRed. Процессор LPC1114.

Я взял проект blinky из примеров и попытался просто скопировать вектора в ОЗУ и сделать ремап.
(соотв. область озу зарезервирована в скрипте линкера).

Программа вылетает в HardFault exception.

Написал вопрос в LPCXpresso forum.

Жду ответа... У меня самого идеи кончились.

В дебаг режиме, при пошаговом выполнении, вылетает на команде bl.

Вот код функции Reset_Handler из примера с моими изменениями:

Код
void Reset_Handler(void)
{
    unsigned char *pulSrc, *pulDest;

    //
    // Copy the data segment initializers from flash to SRAM.
    //
    pulSrc = &_etext;
    for(pulDest = &_data; pulDest < &_edata; )
    {
        *pulDest++ = *pulSrc++;
    }

    //
    // Zero fill the bss segment.
    //
    for(pulDest = &_bss; pulDest < &_ebss; pulDest++)
      *pulDest = 0;

    // Copying the vector table to sram
    unsigned char i;
    unsigned char * vectDest;
    unsigned char * vectSrc;

    vectDest = (unsigned char *)(0x10000000);
    vectSrc  = (unsigned char *)(0x00000000);
    for (i = 0; i < 0xC0; i++)
    {
        *vectDest++ = *vectSrc++;
    };

    // Remap
    LPC_SYSCON->SYSMEMREMAP = 1;
    __DMB();

#ifdef __USE_CMSIS
    SystemInit();
#endif


    //
    // Call the application's entry point.
    // __main() is the entry point for redlib based applications (which calls main())
    // main() is the entry point for newlib based applications
    //
    if (__main)
        __main();
    else
        main();

    //
    // main() shouldn't return, but if it does, we'll just enter an infinite loop
    //
    while (1) {
    ;
    }
}



Go to the top of the page
 
+Quote Post
zuy
сообщение Oct 21 2010, 12:52
Сообщение #3


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

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



Цитата(Alekseeey @ Oct 21 2010, 15:12) *
Вот код функции Reset_Handler из примера с моими изменениями:


Если честно не совсем понял зачем это все в Reset_Handler.
Он от бутлоадера или от прошиваемой проги?
Какая у вас логика работы бутлоадера?

Цитата(DpInRock @ Oct 21 2010, 15:38) *
Вообще-то так и должно быть.

Как правильно (это мое имхо, но которое работает).

0. Компилируем программу и линковщику показываем реальные адреса.
1. Грузим программу с нужного адреса.
2. Копируем вектора, только если ремаповая область не совпадает с расположением программы (к примеру код находится SDRAM или FLASH). Т.е в этом случае копируем из области своей программы в область которая может содержать вектора и ремапится.
3. Далее запрещаем прерывания и JMP на начало своей программы: либо на реальное начало, либо на начальный адрес зоны векторов, которые ремапили (там одно и тоже будет - goto Startup).

Что характерно, не надо трогать стеки. Ибо стартап их настроит как вы в линкере укажите.


А почему оно так должно быть и как починить?

0. Основная прога собрана с адреса 0x2000. RAM использует с 0x100000C0.
1. Верно, бутлоадер прощивает основную прогу во флеш по адресу 0x2000.
2. Копируем таблицу векторов. Т.е. 0xC0 байт c адреса 0x2000 в 0x10000000.
3. Ну перед джампом надо же сделать ремап, чтобы вектора из ОЗУ появились с адреса 0x0. И вот тут у меня сразу улетает куда-то в середину бутлоадера.

А как это стеки трогать не надо? У Cortex M0 вершина стека хранится в самом начале векторов и проц после ресета сам ее оттуда берет. А т.к. мы скачем в основную прогу без ресета, а из своего бутлоадера, то надо самому правильно стек настроить. Стартап у кортексов стеки не настраивает.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zuy   LPC11xx не стартует код из своего бутлоадера   Oct 21 2010, 10:42
|- - 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   Дело близится к завершению)) "Программный за...   Oct 5 2012, 10:07
|- - _Артём_   Цитата(Almaz1988 @ Oct 5 2012, 13:07) ...   Oct 5 2012, 13:23
|- - igor_mmm   Добрый День! Использую 11с24 и работаю с CAN. ...   Oct 6 2012, 19:07
|- - KRS   Цитата(igor_mmm @ Oct 6 2012, 23:07) Необ...   Oct 6 2012, 20:13
|- - 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 - 15:56
Рейтинг@Mail.ru


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