Например TDA7294

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





Текущее время: Вт апр 16, 2024 22:59:32

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


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

Карма: 4
Рейтинг сообщений: 13
Зарегистрирован: Вт апр 02, 2013 10:03:29
Сообщений: 100
Откуда: Санкт-Петербург
Рейтинг сообщения: 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 + Услуги 3D печати
Не в сети
 Заголовок сообщения: 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);


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


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

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

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


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

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


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

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


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