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

 
 
> помогите с запуском Ethernet secondary ISP bootloader, LPC1768
politen
сообщение Sep 24 2010, 09:03
Сообщение #1





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



читаю AN10744 Ethernet secondary ISP bootloader Rev. 01 — 3 September 2008
описан процесс для серии LPC2000
в комплект поставки FlashMagic есть пример для серии LPC1700
подправил пример (в основном ссылки на хидер LPC17xx.h и добавил префикс LPC_ для системных переменных)
После компиляции и загрузки на MCB1700 все светодиоды горят. В дебагере видно, что программа уходит в бесконечный цикл
Код
HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler         [WEAK]
                B       .
                ENDP


уходит в цикл из процедуры
Код
unsigned user_code_present(void)
{    
    param_table[IAP_CMD_CODE] = BLANK_CHECK_SECTOR;
    param_table[IAP_PARAM_0] = USER_START_SECTOR;
    param_table[IAP_PARAM_1] = USER_START_SECTOR;
    iap_entry(param_table,result_table);
    if( result_table[IAP_STAT_CODE] == CMD_SUCCESS )
    {
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}

причем пошаговый режим F11 в проверку условия даже не заходит, т.е. после строки с if(..) после следующего нажатия F11 курсор исполнения программы прыгает на завершающую скобку функции user_code_present и потом на бесконечный цикл (см. выше)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
politen
сообщение Sep 24 2010, 12:14
Сообщение #2





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



Interrupt Program Status Register содержит 3 = Hard fault

смущает определение переменных
Код
unsigned param_table[NO_OF_IAP_PARAMS];
unsigned result_table[NO_OF_IAP_PARAMS];

и
Код
void iap_entry(unsigned param_tab[],unsigned result_tab[])
{
    void (*iap)(unsigned [],unsigned []);

    iap = (void (*)(unsigned [],unsigned []))IAP_ADDRESS;
    iap(param_tab,result_tab);
}


кроме как unsigned нет указания типа.

при выходе из функции user_code_present() в дизассемблере идет
Код
0x00000AF8 BD10      POP      {r4,pc}


в окне CallStack функция user_code_present() висит

так вот после вышеуказанного POP программа переходит по адресу 0 и после первого же шага вылетает с хард фаулт.

Нарушение стека?
подскажите, как отследить/предотвратить его нарушение?
Go to the top of the page
 
+Quote Post
igorsk
сообщение Sep 24 2010, 22:40
Сообщение #3


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

Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131



Цитата
32.3.2.8 RAM used by IAP command handler
Flash programming commands use the top 32 bytes of on-chip RAM. The maximum stack
usage in the user allocated stack space is 128 bytes and it grows downwards.

Проверьте, что у вас эта область свободна.
Просто unsigned это то же самое, что и unsigned int.
Go to the top of the page
 
+Quote Post
politen
сообщение Sep 27 2010, 11:20
Сообщение #4





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



Цитата(igorsk @ Sep 25 2010, 02:40) *
Проверьте, что у вас эта область свободна.

так и есть. спасибо. область RAM в исходнике начиналась с 4000.... для LPC1768 она должна начинаться с 1000.... + 0x40 нужно "забронировать" для бутлоадера, т.е. должно быть 0x10000040
Теперь бутлоадер запускается (назначенный светодиод мигает) если юзеркода нет.

Теперь приложение не хочет запускаться если его загрузить после загрузки бутлоадера.
Настройка карты памяти для приложения:
IROM1 0x2000 0x80000
IRAM1 0x10000040 0x7FC0
IRAM2 0x2007C000 0x8000

Flash magic показывает:
Flash Range 00002000~0001325F
Blocks used ,2,3,4...16

Ethernet Flash Utility в упор не видит устройство, но это может быть из за того, что в arp кэше коммутатора не прописан МАС. Его можно прописать, если юзеркод запустится, а он не запускается.

похоже необходимо подправить Vector table re-mapping in user application
(AN10835: http://www.embeddeddesignindia.co.in/STATI...URCES=DOWNLOAD)

Сообщение отредактировал politen - Sep 27 2010, 13:31
Go to the top of the page
 
+Quote Post
politen
сообщение Sep 28 2010, 13:23
Сообщение #5





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



готово. все запустилось.
пришлось править функцию запуска юзеркода.
в оригинале примера, шедшего вместе с FlashMagic было:
Код
void execute_user_code(void)
{
      void (*user_code_entry)(void);
      user_code_entry = (void (*)(void))(USER_START_SECTOR_ADDRESS | 0x00000001);
      user_code_entry();
}

в AN10866 LPC1700 secondary USB bootloader эта функция несколько другая ее с некоторыми изменениями удалось приладить к MCB1700
Код
__asm void boot_jump(uint32_t address){
    LDR R13,[R0]
    LDR R15,[R0,#4]
}

void execute_user_code(void)
{
    SCB->VTOR = USER_START_SECTOR_ADDRESS & 0x1FFFFF80;
    boot_jump(USER_START_SECTOR_ADDRESS);
}
Go to the top of the page
 
+Quote Post

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

 


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


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