Easyelectronics.ru

Электроника для всех
Текущее время: 23 авг 2017, 01:37

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



    • JLCPCB for PCB Prototyping: 10 шт. 2-слоя 100*100mm 2$(около 140rub), изготовление за 24 часа.
    • Создание принципиальных схем и проектирование печатных плат
    • Крупнейший китайский онлайн магазин радиодеталей. Скидка 50%
    • Просмотр GERBER файлов

Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Bootloader на Cortex M0
СообщениеДобавлено: 19 апр 2017, 21:16 
Свой человек
Аватара пользователя

Зарегистрирован: 13 июн 2015, 02:09
Сообщения: 64
Хочу написать свой бутлоадер для stm32f030R8t6 (платка Discovery). На данном этапе бутлоадер должен просто передать управление программе. Помогите мне пожалуйста, не понимаю что делаю не так_((((( возможно подскажете как отладку проводить в таких случаях? зашиваю сначала программу, затем бутлоадер -- безрезультатно, ничего не происходит. По отдельности все работает (тоесть программа выполняется а бутлоадер доходит до джампа)

Был здесь:
https://community.st.com/thread/30718
viewtopic.php?f=35&t=27844
https://electronix.ru/forum/lofiversion ... 98111.html
http://stackoverflow.com/questions/2132 ... rnal-flash
смотрел на stm32f0_programming_usart.zip ...

Код програмы:
Show


Код бутлоадера:
Show


Код стартап-файла:
Show


Код system_stm32f0xx.c
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 10:57 
Старожил

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 398
Откуда: Германия
А покажи, что компилятор нагенерил в районе

Код:
    __set_MSP( *(__IO uint32_t*)FLASH_START_WORK_ADDR );  // Initialise app's Stack Pointer
    Jump_To_Application();


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 13:37 
Свой человек
Аватара пользователя

Зарегистрирован: 13 июн 2015, 02:09
Сообщения: 64
dev писал(а):
А покажи, что компилятор нагенерил в районе

Код:
    __set_MSP( *(__IO uint32_t*)FLASH_START_WORK_ADDR );  // Initialise app's Stack Pointer
    Jump_To_Application();


Дизассемблер? я правильно понял?
https://www.youtube.com/watch?v=V5gM4yc2Knc&t=3s


Вложения:
Новый точечный рисунок (2).png
Новый точечный рисунок (2).png [ 120.63 Кб | Просмотров: 1288 ]


Последний раз редактировалось Богдан 20 апр 2017, 13:54, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 13:48 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1160
Откуда: Харьков
В самой программе все сдвинуто? Я имею ввиду в настройках компилятора прописано что программа уже не с 0 адреса?
Вот мой работающий бут для F030:
https://github.com/saewave/RemoteSwitch ... der/main.c
И основная программа (может работать как самостоятельная, так и с бутлоадером):
https://github.com/saewave/RemoteSwitch ... Src/main.c


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 14:04 
Свой человек
Аватара пользователя

Зарегистрирован: 13 июн 2015, 02:09
Сообщения: 64
alexsam писал(а):
В самой программе все сдвинуто? Я имею ввиду в настройках компилятора прописано что программа уже не с 0 адреса?

Вы имеете в виду что в рабочей программе нужно в компиляторе указать что она будет лежать начиная с того адреса который я выбрал (не из 0x08000000 а с 0x08000800), да? А для bootloader указать начало (0x08000000), правильно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 14:15 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1160
Откуда: Харьков
Богдан писал(а):
alexsam писал(а):
В самой программе все сдвинуто? Я имею ввиду в настройках компилятора прописано что программа уже не с 0 адреса?

Вы имеете в виду что в рабочей программе нужно в компиляторе указать что она будет лежать начиная с того адреса который я выбрал (не из 0x08000000 а с 0x08000800), да? А для bootloader указать начало (0x08000000), правильно?

Да, все верно. А так же адрес RAM сдвинуть.
Вложение:
2017-04-20_1218.png
2017-04-20_1218.png [ 47.7 Кб | Просмотров: 1268 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 14:31 
Свой человек
Аватара пользователя

Зарегистрирован: 13 июн 2015, 02:09
Сообщения: 64
alexsam писал(а):
А так же адрес SRAM сдвинуть.

Это в рабочей программе? а на сколько минимум сдвигать в моем случае нужно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 14:35 
Свой человек
Аватара пользователя

Зарегистрирован: 13 июн 2015, 02:09
Сообщения: 64
сделаю сдвиг такой же как у вас, все равно тот же вектор копируется
А как Вы делаете .bin ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 14:58 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1160
Откуда: Харьков
Богдан писал(а):
сделаю сдвиг такой же как у вас, все равно тот же вектор копируется
А как Вы делаете .bin ?

У вас же вот такое указано:
#define FLASH_START_WORK_ADDR 0x8000800 //start of work program
Вот сюда и нужно зашивать вашу основную прошивку.
А адреса в RAM указывайте такие, чтоб они не пересеклись с бутлоадером. Полагаю что можно такие же как у меня оставить.
Я бинарник не делаю, я шью сразу из Кейла по этому адресу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 15:54 
Свой человек
Аватара пользователя

Зарегистрирован: 13 июн 2015, 02:09
Сообщения: 64
alexsam писал(а):
Богдан писал(а):
сделаю сдвиг такой же как у вас, все равно тот же вектор копируется
А как Вы делаете .bin ?

У вас же вот такое указано:
#define FLASH_START_WORK_ADDR 0x8000800 //start of work program
Вот сюда и нужно зашивать вашу основную прошивку.
А адреса в RAM указывайте такие, чтоб они не пересеклись с бутлоадером. Полагаю что можно такие же как у меня оставить.
Я бинарник не делаю, я шью сразу из Кейла по этому адресу.

Спасибо большое вам, все получилось!!!!!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 18:07 
Старожил

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 398
Откуда: Германия
alexsam писал(а):
А адреса в RAM указывайте такие, чтоб они не пересеклись с бутлоадером.


А зачем?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 20 апр 2017, 22:43 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 945
Всё зависит от того кто таблицу векторов приложения будет копировать.
А так хоть запересекайся.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 21 апр 2017, 11:01 
Старожил

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 398
Откуда: Германия
Я, кстати, к чему о листинге спрашивал. Коллеги написали тут бутлоадер строго по той же самой методичке

Код:
   __set_MSP(*(volatile unsigned int*) (APP_FLASH_START));
   Jump_To_Application();


и долго искали, почему оно работает только в определенной комбинации компиляторов, их флагов и прочего. Легенды говорят о полугоде, с обращением в поддержку Keil, IAR и ST (сам не видел, это было до моего прихода).

А вот что видим в листинге:

Код:
LDR       R0, [R1]
MSR       MSP, R0
LDR       R0, [R2, #0x4]
POP       {R4, R5}
BX        R0


Внимание на инструкцию POP. И ведь и компилятор в своем праве.

Я это безобразие поменял на (синтаксис IAR):

Код:
  volatile uint32_t* appBegin = (volatile uint32_t*)APP_FLASH_START;
  uint32_t stackPointer = *appBegin;
  uint32_t startProgram = *(appBegin+1);

  __asm volatile(
    "msr msp, %0\n\t"     // set stack pointer
    "bx %1\n\t"           // jump to program start
    :
    : "r"(stackPointer), "r"(startProgram)
  );


И никаких чудес больше.

Еще мне не нравится стандартная идея с инициализацией всей системы, потом ее частичной (что вспомнили) деинициализацией и прыжком в приложение. Я переделал на ресет. Но это уже другая история.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 21 апр 2017, 13:33 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 945
Чудес не бывает при наличии отладчика, глаз и рук. Даже ум не нужен. Смотришь и клацкаешь на Step In. Многие считают себя бесконечно умнее черных квадратиков с белым дымом внутри. Но это не так в большинстве случаев.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bootloader на Cortex M0
СообщениеДобавлено: 21 апр 2017, 17:25 
Свой человек
Аватара пользователя

Зарегистрирован: 13 июн 2015, 02:09
Сообщения: 64
dev писал(а):
А зачем?


там у alexsam в его топике об этом рассказывается:
http://forum.easyelectronics.ru/viewtop ... &view=next


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

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


Кто сейчас на конференции

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB