Например TDA7294

Форум РадиоКот • Просмотр темы - Проблема с Bootloader
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Сб сен 26, 2020 01:40:07

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Проблема с Bootloader
СообщениеДобавлено: Пн мар 23, 2020 10:34:35 
Встал на лапы

Зарегистрирован: Сб янв 11, 2014 21:25:55
Сообщений: 113
Рейтинг сообщения: 0
Доброго времени суток!
Всё ПО пишу в Keil.
Есть самописный Bootloader, функция джампа на пользовательское ПО стандартная, адрес начала пользовательского ПО 0x08002000:

Код:
void GoToUserApp(void){
   uint32_t appJumpAddress;
   void (*GoToApp)(void);
       
   appJumpAddress = *(__IO uint32_t*)(FLASH_DISK_START_ADDRESS + 4);
   GoToApp = (void (*)(void))appJumpAddress;
     
   SCB->VTOR = FLASH_DISK_START_ADDRESS;
     
   __set_MSP(*(__IO uint32_t*) FLASH_DISK_START_ADDRESS); //stack pointer (to RAM) for USER app in this address
       
   GoToApp();
}


1) Есть пользовательское ПО со стоп-режимом, заливаю обычным ST-Linkом, всё работает, как часы
2) Шью через бутлоадер:
а) та же самая прошивка не работает как надо. МК не просыпается от RTC,
б) выключаю стоп-режим, прошивка начинает работать.

Т.е. явно нарушена адресация таблицы векторов прерываний

В файле system_STM32L1xx.c указал адрес смещения таблицы векторов

#define VECT_TAB_OFFSET 0x00002000U

в Target IROM1 указал 0x8002000 соответственно
на вкладке Linker поставил птицу в Use Memory Layout from Target Dialog

Что я упускаю?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблема с Bootloader
СообщениеДобавлено: Сб мар 28, 2020 07:32:04 
Встал на лапы
Аватар пользователя

Карма: 5
Рейтинг сообщений: 17
Зарегистрирован: Пн июл 04, 2016 16:51:22
Сообщений: 89
Откуда: Россия, Омск
Рейтинг сообщения: 0
Проверьте, что вы возвращаете ВСЕ регистры в их исходное состояние перед переходом в секцию кода.
Была у меня схожая проблема со своим загрузчиком, в итоге причина оказалось именно в разрешённом прерывании и не восстановленых регистрах.
При прыжке в код приложения могло случайно сработать прерывание. В этот момент таблица векторов могла указывать как на загрузчик, так и на приложение - неопределённое поведение.
Либо прерывание возникало до его разрешения приложением - тоже неопределённое поведение (в случае SysTick + RTOS до запуска самой RTOS).
И прочие неявные мелочи.


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Проблема с Bootloader
СообщениеДобавлено: Чт апр 09, 2020 08:30:59 
Встал на лапы
Аватар пользователя

Карма: 4
Рейтинг сообщений: 13
Зарегистрирован: Вт апр 02, 2013 10:03:29
Сообщений: 84
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
2) Шью через бутлоадер:
а) та же самая прошивка не работает как надо. МК не просыпается от RTC,
б) выключаю стоп-режим, прошивка начинает работать.

Т.е. явно нарушена адресация таблицы векторов прерываний

В файле system_STM32L1xx.c указал адрес смещения таблицы векторов

#define VECT_TAB_OFFSET 0x00002000U

в Target IROM1 указал 0x8002000 соответственно
на вкладке Linker поставил птицу в Use Memory Layout from Target Dialog


А в самой программе Вы меняете таблицу векторов? У Вас первой строчкой должно быть либо
Код:
#define NVIC_VectTab_FLASH           ((uint32_t)0x08000000)
NVIC_SetVectorTable( NVIC_VectTab_FLASH, VECT_TAB_OFFSET );

либо
Код:
SCB->VTOR = NVIC_VectTab_FLASH | (VECT_TAB_OFFSET & (uint32_t)0x1FFFFF80);

_________________
Для связи email: info собака qbit.su


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Шестое юбилейное мероприятие в процессе
Не в сети
 Заголовок сообщения: Re: Проблема с Bootloader
СообщениеДобавлено: Чт апр 09, 2020 09:12:31 
Встал на лапы

Зарегистрирован: Сб янв 11, 2014 21:25:55
Сообщений: 113
Рейтинг сообщения: 0
Да починилось всё само уже, спасибо) А на счёт
qbit писал(а):
2) Шью через бутлоадер:
а) та же самая прошивка не работает как надо. МК не просыпается от RTC,
б) выключаю стоп-режим, прошивка начинает работать.

Т.е. явно нарушена адресация таблицы векторов прерываний

В файле system_STM32L1xx.c указал адрес смещения таблицы векторов

#define VECT_TAB_OFFSET 0x00002000U

в Target IROM1 указал 0x8002000 соответственно
на вкладке Linker поставил птицу в Use Memory Layout from Target Dialog


А в самой программе Вы меняете таблицу векторов? У Вас первой строчкой должно быть либо
Код:
#define NVIC_VectTab_FLASH           ((uint32_t)0x08000000)
NVIC_SetVectorTable( NVIC_VectTab_FLASH, VECT_TAB_OFFSET );

либо
Код:
SCB->VTOR = NVIC_VectTab_FLASH | (VECT_TAB_OFFSET & (uint32_t)0x1FFFFF80);


я в загрузчике табличку векторов ещё меняю. Что мешало завестись программе, в итоге, так и не понял. Заработало и хорошо, больше подобных сбоев не было.


Вернуться наверх
 
Драйверы MOSFET/IGBT Infineon – силой нужно управлять!

Специалисты Infineon усовершенствовали традиционные кремниевые MOSFET и IGBT и выпустили компоненты на базе принципиально иных материалов – нитрида галлия и карбида кремния. Мы создали подборку полезных материалов, чтобы вы разобрались во всех тонкостях и стали экспертом по управлению силовыми приборами нового поколения CoolMOS, CoolGaN, CoolSiC!

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y