Например TDA7294

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





Текущее время: Вт апр 23, 2024 17:16:56

Часовой пояс: 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);


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


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

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

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


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

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


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

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


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