Easyelectronics.ru

Электроника для всех
Текущее время: 25 май 2017, 17:31

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



    • Изготовление печатных плат. Примерные цены: 10 штук 2-слоя 100*100mm 8.21$ или около ~470 рублей
    • Создание принципиальных схем и проектирование печатных плат
    • Симуляция работы на spice моделях
    • Просмотр GERBER файлов

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

Зарегистрирован: 13 июн 2015, 02:09
Сообщения: 57
Хочу написать свой бутлоадер для 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
Сообщения: 364
Откуда: Германия
А покажи, что компилятор нагенерил в районе

Код:
    __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
Сообщения: 57
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 Кб | Просмотров: 711 ]


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

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1094
Откуда: Харьков
В самой программе все сдвинуто? Я имею ввиду в настройках компилятора прописано что программа уже не с 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
Сообщения: 57
alexsam писал(а):
В самой программе все сдвинуто? Я имею ввиду в настройках компилятора прописано что программа уже не с 0 адреса?

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


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

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

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

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


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

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

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


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

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


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

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

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


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

Зарегистрирован: 13 июн 2015, 02:09
Сообщения: 57
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
Сообщения: 364
Откуда: Германия
alexsam писал(а):
А адреса в RAM указывайте такие, чтоб они не пересеклись с бутлоадером.


А зачем?


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

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


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

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

Код:
   __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
Сообщения: 777
Чудес не бывает при наличии отладчика, глаз и рук. Даже ум не нужен. Смотришь и клацкаешь на Step In. Многие считают себя бесконечно умнее черных квадратиков с белым дымом внутри. Но это не так в большинстве случаев.


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

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


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


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

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


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

Сейчас этот форум просматривают: h4lf


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

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

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