реклама на сайте
подробности

 
 
9 страниц V  « < 5 6 7 8 9 >  
Reply to this topicStart new topic
> Как программно загнать STM32 в бутлоадер?
Golikov A.
сообщение Mar 11 2015, 10:00
Сообщение #91


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



вот, так что кнопка нужна! sm.gif

Да те кто правит и пишет стартап перед каждым проектом, снимаю шляпу, вы вызываете уважение, я видать уже обленился, пользуюсь выданным)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 11 2015, 10:03
Сообщение #92


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Golikov A. @ Mar 11 2015, 13:00) *
вот, так что кнопка нужна! sm.gif

Нужна, но не для того, чтобы на неё нажимать. Только для нештатных ситуаций.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 11 2015, 10:46
Сообщение #93


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Цитата(aaarrr @ Mar 11 2015, 13:03) *
Нужна, но не для того, чтобы на неё нажимать. Только для нештатных ситуаций.


Но если очень хочется нажать, то можно)))
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Mar 11 2015, 13:26
Сообщение #94


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Golikov A. @ Mar 11 2015, 01:12) *
Это понятно, у меня вопрос вы когда последний раз писали или хотя бы правили startup? ...


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

...

А зачем его править? Я же написал английским по белому: __no_init объявление в С программе делает то, что надо.


У меня без CRC:
есть флажок в EEPROM: "программа годная, хорошая".
По старту всегда стартует бутлоадер, который
смотрит есть ли этот флаг, если есть, то делает проверку, хочет ли кто загрузить фирмварь, нет - прыгает на основную программу.
Если флага нет, никуда прыгать не будет.
Будет ждать аплоада фирмваря.
Аплоад фирмваря заключается в а) стирании флага; б) аплоада и в) прыжка на эту программу после аплоада.
Если аплоад не получился по какойто причине, прыжка не будет, будет опять пытатся сделать аплоад.

Главная программа стартует, инициализируется, проверяет че надо, и если флажок не стоит, записывает его.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Mar 11 2015, 20:23
Сообщение #95


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Salamander @ Mar 11 2015, 13:46) *
Но если очень хочется нажать, то можно)))



Если не боитесь программить - то ышо один вариант - хранить во флеше более одной рабочей прошивки.
Для AVR без проблем делается делением лапополам и вся недолга. С каждой заливкой чередуются верхняя половинка/нижняя.
Прошивка пишется с последнего сектора. Последним прошивается таблица векторов. Т.к. сектор записи больше чем таблица векторов
- то за таблицей можно расположить служебную инфу. Типа номер прошивки и иже. Чтоб не было камня - достаточно обеспечить
стабильность работы в течении записи одного всего сектора.

Для ARMов - ещё просче. Можно сделать весь софт сегментным и ввести логику фулл, диф, инкрементальной версии по модульно. Софт будет сам себя
писать и в добавок у вас в камне более одной рабочей прошивки. В случае сбоя - вы получаете кусок сбойной записи, которая при старте камня никак
не будет детектироватья (нет црц и иже). Если ошибка софта - то статистика успешных отработок даёт ответ на вопрос целесообразности работы в той
или иной конфигурации загрузки.

Почему "если не боитесь" - замороты с адресацией. везде косвенная. Что не всегда поддерживают на ура компиляторы. Особенно когда
кода больше чем ближний(оптимизированный) переход. Ослинные уши вылазят в основном на языках си и выше. На армах юзаю IAR -
грешен в нём так-же компилятор sm.gif Посему системы записи места краша программы - актуально выходит на первое место. Ну и скидывания причины в удобный вид.
Отсюда понятно - что в системе должен быть как минимум накопитель (к примеру микро сд).

Но можно sm.gif
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 12 2015, 06:56
Сообщение #96


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(kolobok0 @ Mar 11 2015, 23:23) *
Если не боитесь программить - то ышо один вариант - хранить во флеше более одной рабочей прошивки.


Да и зачем?? Если бутлодырь "правильный", то перезальет любую кривозалитую прошивку, а все эти дубли и пр, только усложняют прогу и уменьшают объем флешки... Если уж бутлодырь кривой, то и 3 копии не помогут, проверял на собственном опыте, лучше делать больше вариантов прошивки в буте, например, флешка, уарт, а если нужно удаленно - сеть...
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 14 2015, 07:23
Сообщение #97


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Хм... опять что-то нездравое творится.
Я залил бутлодер, предложенный ST, сделал все в соответствии с AN2557. Заливаю прошивку с помощью все того же HYperTerminal, предложенного в AN2557. Прошивка получена из проекта Keil, специально настроенного под задачу - перенесен адрес приложения, таблица векторов, в общем - если прошивать и бутлодер и основную программу с помощью Keil - они мирно сосуществуют, прыжки из бутлодера в программу и наоборот - без проблем.
Но стоит залить прошивку с помощью HyperTerminal - основная программа не запускается. Отладчиком выяснено, что до функции Jump_To_Application() бутлодер добирается, а дальше - если остановить отладчик - видно что программа висит в HardFault_Handler.
Господа, я не силен в отладке - чо мне делать дальше, как понять, что и почему не так пишется?
Вектора переношу вот так
Цитата
__set_PRIMASK(1);
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);
__set_PRIMASK(0);


Еще один момент, для понимания: предположив, что прошивка пишется не со смещением, а несколько затирает бутлодер, то бишь портит его - я прошиваю основную программу Keil'ом. По идее, если бутлодер битый, это не поможет. Ан нет - все становится на свои места. Значит битая основная программа. Но я тогда не пойму, почему отлоадчик остается в бутлодере? ПО идее дали пкоманду прыгнуть по адресу основной программы и все - отладчик из бутлодера ушел...

Прикрепляю бутлодер от ST

Сообщение отредактировал Salamander - Mar 14 2015, 07:01
Прикрепленные файлы
Прикрепленный файл  stsw_stm320081111.rar ( 3.62 мегабайт ) Кол-во скачиваний: 27
 
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 14 2015, 08:10
Сообщение #98


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Вот здесь почитайте, может, даст толчок.
http://electronix.ru/forum/index.php?showt...t&p=1317836
У меня все заработало.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 14 2015, 12:24
Сообщение #99


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Ну не знаю, я так понял, что у вас вообще не грузилась основная программа. А у меня она грузится, если прошить Keil и перезапустить. А если прошить bootloaderом - то не грузится.
Вопрос - Keil у меня грузит в контроллер файл axf. Бутлодеру я подсовываю hex. Есть предположение, что как-то неправильно генерируется hex. Чтобы проверить это - как мне заставить Keil отправить в контроллер hex файл?

Еще вопрос - окно Memory что показывает - Flash или Ram?


///////////////


Разобрался как подсунуть HEX - Keil шьет его нормально....

В настройках Keil есть пункт IROM - в нем 2 поля, первое эт старт - 0x8003000, с ним все понятно. ВТорое - size 0x80000. Что-то я не нашел в коде бутлодера, где было бы такое значение, значит оно не учитывается бутлодером?

Залил по очереди прошивки - кейлом и бутлодером. Скачал по очереди, в HEX редакторе сравнил. Идентичны до адреса 0x00007477 (это смещение от 0x800....)
Дальше каждый байт различен....

Сообщение отредактировал Salamander - Mar 14 2015, 11:24
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Mar 14 2015, 13:15
Сообщение #100


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Salamander @ Mar 14 2015, 02:23) *
видно что программа висит в HardFault_Handler.
Господа, я не силен в отладке - чо мне делать дальше, как понять, что и почему не так пишется?


Скорее всего чтото недоинициализированно. После бутлоадера осталось.

Вот смотреть адреса lr, pc - это откуда хард фолт случился.

CODE

void hard_fault_handler_c(unsigned int * hardfault_args)
{
unsigned int stacked_r0;
unsigned int stacked_r1;
unsigned int stacked_r2;
unsigned int stacked_r3;
unsigned int stacked_r12;

stacked_r0 = ((unsigned long) hardfault_args[0]);
stacked_r1 = ((unsigned long) hardfault_args[1]);
stacked_r2 = ((unsigned long) hardfault_args[2]);
stacked_r3 = ((unsigned long) hardfault_args[3]);

stacked_r12 = ((unsigned long) hardfault_args[4]);
stacked_lr = ((unsigned long) hardfault_args[5]);
stacked_pc = ((unsigned long) hardfault_args[6]);
stacked_psr = ((unsigned long) hardfault_args[7]);

while (1) ;

}


/*******************************************************************************
* Description : This function handles Hard Fault exception.
* Input : -
* Return : -
*******************************************************************************/
void HardFault_Handler(void)
{
// Go to infinite loop when Hard Fault exception occurs
asm("TST LR, #4");
asm("ITE EQ");
asm("MRSEQ R0, MSP");
asm("MRSNE R0, PSP");
asm("B hard_fault_handler_c");
while (1);
}


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 14 2015, 13:59
Сообщение #101


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Пока выяснил вот что - бутлодер от прошивки не портится. Но пишется во флеш совсем не то, что пишется, если программировать Keilом

Сообщение отредактировал Salamander - Mar 14 2015, 15:45
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 14 2015, 15:53
Сообщение #102


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Мне кто-нибудь может пояснить, что за ерунда?
Test_project.hex - то, что генерирует keil
Зашиваем keilом - работает, скачиваем с помощью FlashLoader - получаем right.hex - он отличается.
Зашиваем бутлодером получаем wrong.hex

Как понять логику, если записываем, все записывается правильно, но когда этот правильный код скачиваем - получаем другое...
P.S. скачивал не все, у нажные сектора, начиная с 0x08003000
Прикрепленные файлы
Прикрепленный файл  TEST_Project.rar ( 53.84 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 14 2015, 17:55
Сообщение #103


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



У меня мысли кончились...
Кто-нибудь работал именно с AN2577 ?
Получается грузить только встроенным бутлодером или через Keil.
Предложенный в AN2577 бутлодер грузит во флеш фигню.
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 14 2015, 19:19
Сообщение #104


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



А сама запись/чтение данных в/из флэша нормально работает? Может начать с этого?

Вообще, на первый взгляд, данные в файлах TEST_Project.hex и right.hex одинаковы, отличие только в разном количестве байт в строке, т.е. "скачиваем с помощью FlashLoader" то, что и залили программатором.

А вот right.hex и wrong.hex отличаются. Ищите ошибку где-то в записи во флэш загрузчиком, возможно в приёме данных или отправке с хоста.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 14 2015, 19:40
Сообщение #105


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Ваша правда, test и right одинаковы. Я просто сравнивал их средствами редактора, а в нем сравнение шло тупо побаитово, не вникая в суть записи.
Чуется мне, что собака где-то в привязке к железу зарыта, точнее к архитектуре памяти. В бутлодере полно дефайнов на разные случаи жизни, но возможео разработчики что-то и упустили. Бот кстати под сотую серию, у меня же 103ret6
Go to the top of the page
 
+Quote Post

9 страниц V  « < 5 6 7 8 9 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 01:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01509 секунд с 7
ELECTRONIX ©2004-2016