Easyelectronics.ru

Электроника для всех
Текущее время: 05 июн 2020, 15:54

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



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 105 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: STM32 bootloader Flash
СообщениеДобавлено: 10 фев 2012, 16:58 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Вопрос к тем, кто работал и кто шарит по вопросам загрузчиков для флеш!

Пишу загрузчик для контроллера чтобы записывать в произвольную область флеша свою прогу.

Имею некоторую прогу, использующую USART прерывания. Эта прога, будучи запрограммирована во флеш произвольно (адрес 0х08000000), а затем запущена после сброса контроллера, - работает прекрасно! Я сужу по правильному ответу USART от контроллера.

Столкнулся с проблемой:
когда загрузчик залил в свою флеш код этой проги и перешел по адресу 0х08040000 для ее выполнения, то теперь ответы USART стали НЕ ПРАВИЛЬНЫМИ!

Такое впечатление, что чего-то не хватает, или что-то осталось не подключенным програмно!
Копаюсь уже 2 недели, сил нет!

По настройкам все сделал как писалось в an2557_DOUPI. Должно работать, но нет.....

Помогите, пожалуйста!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 13 фев 2012, 10:47 
Старожил
Аватара пользователя

Зарегистрирован: 23 июл 2010, 09:54
Сообщения: 207
Откуда: Чебоксары
Я возможно не совсем вас понял... Загрузчик работает, сидит по адресу 0х08000000. Грузит прогу, которая написана для адреса с 0х08000000, а вы ее грузите в 0х08040000. Тогда естественно она не будет работать, т.к. исходник завязан обычно по абсолютным адресам. и еще когда после перехода в основное ПО вы должны перезаписать вектора прерывания с учетом смещения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 16 фев 2012, 17:57 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Немножко не поняли.
Если проверять прогу пользователя на адресе 08000000 то она работает, а если грузить загрузчиком в 08040000 и запускать отсюда, то УЖЕ НЕ РАБОТАЕТ! В этом все дело.
Сегодня...
написал тестовую версию упрощ. тестовой проги с USART для загрузки в 08040000. Залил загрузчиком. Работает!
Сделал вывод: если прога сложная и содержит многопоточную конфиг с буферами обмена по DMA, то возникают ошибки в обращении к регистрам даных в SRAm. Поэтому нужно каким-то способом правильно распределять работу с данными в памяти.
Может я и ошибаюсь....
Короче отследить этот баг у меня не вышло. KEIL не дает полноценной картины.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 16 фев 2012, 19:11 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 14 июл 2011, 01:36
Сообщения: 72
Откуда: Москва
Вывод правильный. Теперь осталось поправить скрипт сборки - *.ld , указав правильный (новый) адрес старта


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 19 фев 2012, 19:03 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
md5sum писал(а):
Вывод правильный. Теперь осталось поправить скрипт сборки - *.ld , указав правильный (новый) адрес старта


md5SUM, а насколько эта процедура необходима? Это неписанное правило?
Ведь адрес старта новой проги всегда подтверждается только смещением таблицы векторов в файле system_stm32f10x (можно еще указать прописав вручную в main() Vector Table Relocation...) и скомпилить любым KEIL, IAP и т.п. прогу по новому адресу в меню Target (для KEIl например...).

Предполагается, что этого достаточно для правильной работы проги.[/color]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 19 фев 2012, 19:16 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Мой ответ на мой вопрос в начале темы!

Копаясь с природой контроллера STM32f10x обнаружил достаточно банальную, на первый, взгляд вещь!

ВНИМАНИЕ! ВСЕМ ТЕМ, КТО РАБОТАЕТ С ПЕРЕНОСОМ ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ ПО ПРОСТРАНСТВУ ФЛЕША !

ЕСЛИ ПЕРЕД ПЕРЕХОДОМ НА ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ С БУТЛОАДЕРА ВЫ В НЕМ НЕ ЗАПРЕТИТЕ РАБОТУ ТОЙ ПЕРИФЕРИИ, КОТОРУЮ ИСПОЛЬЗУЕТЕ, ТО ПЕРЕЙДЯ НА НОВУЮ ПРОГУ ОНА НЕ БУДЕТ РАБОТАТЬ КОРРЕКТНО ИЛИ ВООБЩЕ НЕ БУДЕТ.. !


У меня остался работать TIM4 с прерываниями и я сиганул на прогу пользователя. Так этот таймер ТАК И ПРОДОЛЖАЛ РАБОТАТЬ!

Вообще лучше запретите все, что можно (особенно прерывания), а потом переходите со спокойной душой по нужному адресу новой проги.

Успехов!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 19 фев 2012, 20:43 
Заглядывает иногда

Зарегистрирован: 01 июн 2010, 11:04
Сообщения: 139
Ну, оно вроде как логично


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 19 фев 2012, 21:44 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
Удивительно, а с какой стати ей отключаться? Ну был переход и что такого. Так вообще везде сделано, вроде. И в авр и в стм8 тоже.
В моем бутлоадере для меги я перехожу в основную программу по сбросу строжевого таймера. Тогда периферия сама сбрасывается.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 19 фев 2012, 22:00 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
PRC писал(а):
Удивительно, а с какой стати ей отключаться? Ну был переход и что такого. Так вообще везде сделано, вроде. И в авр и в стм8 тоже.
В моем бутлоадере для меги я перехожу в основную программу по сбросу строжевого таймера. Тогда периферия сама сбрасывается.


Это у Вас по ходу флеша сначала идет прога пользователя, а затем бутлоадер?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 19 фев 2012, 22:06 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
Koder писал(а):
Это у Вас по ходу флеша сначала идет прога пользователя, а затем бутлоадер?

У авр, есть битик, в области аналогичный option bytes, где можно указать с какого адреса должна стартовать программа после сброса.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 19 фев 2012, 23:35 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
PRC писал(а):
Koder писал(а):
Это у Вас по ходу флеша сначала идет прога пользователя, а затем бутлоадер?

У авр, есть битик, в области аналогичный option bytes, где можно указать с какого адреса должна стартовать программа после сброса.


мммммм....На счет этого надо читать..

Во встроенном бутлоадере есть такая фича как определение битрейта для USART. Вещь полезная. Надо ее засунуть в проект.
ПРинцип работы сперва прост: sysTick определяет длительность одного фрейма, как тестового (типа 0xF9), а затем расчитывает битрейт. AN 2606 не дает более подробного описания этого алгоритма.
Сейчас у меня 2 варианта.
Можно сделать на EXTI прерываниях по событию на выводе и затем вычислить длительность фрейма.
Можно использовать строки

u16 i = 0;
u8 _ITfactor = 1;
u8 mask1 = 0;

while(_ITfactor)
{
while( ((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10) & mask1) != (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10) ^ mask1)) && (_ITfactor != FALSE) );
mask1 ^= 0;
Buff[i++] = TIM2->CNT;
}


// _ITfactor - когда таймер дойдет до значения CCR1 то _ITfactor = 0, цикл покидается, регистрация фрейма заверш.
//Значение mask1 меняется с 1 на 0 и наоборот для фиксации или спад. или нарост. фронта импульсов фрейма.
Каждое событие (1 или 0 на выводе Rx) провоцирует запись в массив значений счетчика. Затем по этим значениям вычисляется битрейт.

Это правильные пути реализации подобного механизма? Есть соображения?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 20 фев 2012, 00:33 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 14 июл 2011, 01:36
Сообщения: 72
Откуда: Москва
Koder писал(а):
ЕСЛИ ПЕРЕД ПЕРЕХОДОМ НА ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ С БУТЛОАДЕРА ВЫ В НЕМ НЕ ЗАПРЕТИТЕ РАБОТУ ТОЙ ПЕРИФЕРИИ, КОТОРУЮ ИСПОЛЬЗУЕТЕ, ТО ПЕРЕЙДЯ НА НОВУЮ ПРОГУ ОНА НЕ БУДЕТ РАБОТАТЬ КОРРЕКТНО ИЛИ ВООБЩЕ НЕ БУДЕТ.. !


Это как-бы само-собой подразумевалось - не думал, что Вы на эти грабли наступили.

Нормальный бутлоадер должен подчищать за собой все, что поменял. Очень много регистров периферии можно поменять только если данная периферия в состоянии disable.
По хорошему - грамотно написанный бутлоадер перед переходом на пользовательскую прогу вернет контроллер к состоянию "после сброса". Хорошо-бы даже источник тактов вернуть на внутренний генератор - пользовательская прога сама все настроит с нуля.

По USART autobaud - я просто измеряю минимальную длительность импульса 0 или 1 (например 100 импульсов). Правда такой подход возможен только если девайс подключенный к USART передает постоянно или регулярно. У меня так определяется скорость GPS модуля.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 26 фев 2012, 01:44 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
На счет авто определения битрейта USART решил написать с помощью EXTI прерываний и одного таймера.
Подумал, что это более надежнее, поскольку модуль EXTI является железом МК, тоесть обычным триггером. Изобретать этот триггер софтом как-то не хочется...
Тут, как говорится не стоит изобретать велосипед...

О результатах сообщу.
Всем спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 27 фев 2012, 14:11 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 янв 2012, 07:53
Сообщения: 51
чем не устроил встроенный загрузчик ?
чем не устроил загрузчик из апнота ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 27 фев 2012, 15:13 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
unkier писал(а):
чем не устроил встроенный загрузчик ?

Встроенный загрузчик не годится для коммерческих программ, например в нем нет шифрования.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 27 фев 2012, 15:39 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 янв 2012, 07:53
Сообщения: 51
о. актуальная тема ) можно узнать алгоритм такой защиты ? как шифруется, когда расшифровывается, как запускается ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 27 фев 2012, 17:24 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
unkier писал(а):
о. актуальная тема ) можно узнать алгоритм такой защиты ? как шифруется, когда расшифровывается, как запускается ?

Дык все просто. При заливке программы через встроенный загрузчик, ты отдаешь готовую прошивку, имея которую можно начать клепать копии твоего девайса, дизассемблировать ее или еще что. При использовании своего загрузчика ты отдаешь закодированный файл. Заливают его обычно через свою программу, но твоя программа его не раскодирует, а передает как есть. Может добавляя какую-то служебную инфу, типа контрольных сумм блоков. Декодирование же происходит в самом контроллере перед программированием. Так как свой загрузчик может перешивать даже если в контроллере установлены все виды защиты, то использовать твой файл не зная алгоритма шифрования не выйдет. Алгоритм же шифрования зависит от степени пароноидальности программиста - можно просто ксорить байты, можно использовать RC-4/5, можно и AES захреначить.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 27 фев 2012, 19:32 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Роль своего занрузчика очень значительна.
Во-первых если вы испльзуете свое устройство со своим протоколом передачи данных, то без собственного бутлоаджера не обойтись.
Функциональность встроенного не дает возможность сбросить устройство в любой момент, настроить свою скорость передачи для загрузки программы пользователя и т.п.
По большому счету, коммерческая непригодность всттроенного бутлоадера также налицо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 07 мар 2012, 14:22 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Кто знает как стереть флеш память размером значительно меньшего чем 1 страница?

Например, 1 слово в памяти?
Пробовал записать в память слово 0xFFFFFFFF - не выходит. Ошибка записи в память поскольку эта область флеша не стерта перед записью.

Вопрос тривиальный но все же важный...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 07 мар 2012, 14:50 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
Мне в стм8s писать в память получилось только стирая предварительно всю страницу.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 07 мар 2012, 15:24 
Старожил
Аватара пользователя

Зарегистрирован: 18 янв 2010, 21:22
Сообщения: 205
Откуда: SPb
Koder, никак. Стирание (перевод всех бит в единичное состояние) делается только постранично. Это технологическа особенность построения флеша и никак против неё не попрёшь.

_________________
Верный друг антарктической птицы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 07 мар 2012, 19:42 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Спасибо за ответ!
Обнадежили конечно.....))))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 07 мар 2012, 19:49 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
Koder писал(а):
Обнадежили конечно.....))))))

Это не мы,это технология такая:)

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 26 мар 2012, 11:59 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Есть вопрос!
Бегло прочитав инструкции по Option Bytes STM отметил для себя, что этот тип чипа не содержит таких фьюзов как в AVR.
Имеется в виду те фьюзы котрые закрывают контроллер наглухо. В stm получается, что можна всегда разблочить контроллер в случае чего с помощью фирменного прошивальщика ST-link или еще чего-нибудь.

Так ли это?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 26 мар 2012, 12:34 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
Koder писал(а):
stm получается, что можна всегда разблочить контроллер в случае чего с помощью фирменного прошивальщика ST-link или еще чего-нибудь.
Так ли это?

Если залочить stm32L на полную блокировку, то разлочить ее будет невозможно ничем.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 105 ]  На страницу 1, 2, 3, 4, 5  След.


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


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

Сейчас этот форум просматривают: Glebiys, Google [Bot]


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

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

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