|
STM32: сброс всей периферии перед переходом из загрузчика в основную прошивку |
|
|
|
 |
Ответов
|
May 21 2014, 14:32
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Golikov A. @ May 21 2014, 20:21)  получается я могу сделать флаг в RAM, и переходить через ресет на бут если в флаге стоит кодовое слово, иначе уходить в основную прогу. И оставить EEPROM в покое, интересно... Не плодите сущностей. Вы сбрасываться как собираетесть? Программно? Вот и проверяйте флаг программного сброса в соответствующем регистре ядра. И не нужно ни EEPROM, ни ячейки в ОЗУ резервировать. А еще лучше сбрасываться после прошивки собакой и по отсутствию флага программного сброса делать проверку целостности прошивки и прыжок в нее. А по флагу программного сброса или при ошибке целостности уходить в загрузчик. Тогда вы получите возможность запуска загрузчика из основной программы программным сбросом и загрузчик при этом будет запускаться тоже со сброшенной периферией. Я делаю именно так и нахожу это очень простым и удобным.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 21 2014, 14:58
|

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

|
Цитата(Сергей Борщ @ May 21 2014, 13:42)  Не плодите сущностей. Вы сбрасываться как собираетесть? Программно? Вот и проверяйте флаг программного сброса в соответствующем регистре ядра. И не нужно ни EEPROM, ни ячейки в ОЗУ резервировать. А еще лучше сбрасываться после прошивки собакой и по отсутствию флага программного сброса делать проверку целостности прошивки и прыжок в нее. А по флагу программного сброса или при ошибке целостности уходить в загрузчик. Тогда вы получите возможность запуска загрузчика из основной программы программным сбросом и загрузчик при этом будет запускаться тоже со сброшенной периферией. Я делаю именно так и нахожу это очень простым и удобным. А зачем "сброс собакой"? Что, без сброса чтото изменится? В любом случае все теже самые регистры задействованы записи/чтения флаша. Залил, проверил и прыгнул. Тогда и уходить никуда не надо.. Цитата(scifi @ May 21 2014, 14:06)  Нужно пользоваться регистром, который показывает причину сброса. Можно совместно с ячейкой ОЗУ (и никаких случайных совпадений там уже быть не может), а можно и без неё, как отметил Сергей Борщ. Случайные совпадения в ОЗУ могут быть всегда.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 21 2014, 18:57
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(A. Fig Lee @ May 21 2014, 22:26)  2 никому не нужных движения: ресет Вам не нужны - не используйте. А я одним легким движением уверен, что у меня не продолжает молотить АЦП загаживая по DMA уже не свою память, мне не нужно затыкать таймера, генерящие прерывания с несуществующими в загрузчике обработчиками, что однократно запускаемая в LPC2xxx собака и в загрузчике и в приложении работает с разными настройками. Вы же можете все эти действия проводить вручную и на очередной версии приложения вдруг обнаружить, что не можете обновить прошивку потому что когда-то давно проектируя загрузчик, забыли заткнуть какую-то не использовавшуюся тогда периферию, а теперь, в новой версии, эта периферия мешает работать загрузчику. Пожалуйста! Каждый сам себе злобный Буратина.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 21 2014, 21:03
|

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

|
Цитата(Сергей Борщ @ May 21 2014, 18:07)  Вам не нужны - не используйте. А я одним легким движением уверен, что у меня не продолжает молотить АЦП загаживая по DMA уже не свою память, мне не нужно затыкать таймера, генерящие прерывания с несуществующими в загрузчике обработчиками, что однократно запускаемая в LPC2xxx собака и в загрузчике и в приложении работает с разными настройками. Вы же можете все эти действия проводить вручную и на очередной версии приложения вдруг обнаружить, что не можете обновить прошивку потому что когда-то давно проектируя загрузчик, забыли заткнуть какую-то не использовавшуюся тогда периферию, а теперь, в новой версии, эта периферия мешает работать загрузчику. Пожалуйста! Каждый сам себе злобный Буратина. А.. А я в бутлоадере не пользую АЦП и тому подобное. Канал для записи во флеш и обмена данными - один из USB/RS232 и так далее... Все. А! Собака! Вот оно где порылось. Вотчдог - зло, его использовать плохая привычка. Тем более в бутлоадере. Он должен быть прост и бронебоен. Если там нужен вотчдог, чтото не так.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 22 2014, 01:46
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(A. Fig Lee @ May 22 2014, 04:13)  А.. А я в бутлоадере не пользую АЦП и тому подобное. А для обновления прошивки вам нужно вручную выключить и включить устройство, или все же предусмотрена возможность запуска загрузчика по команде работающему приложению? Если предусмотрена - то где и как вы затыкаете периферию, которую перед запуском загрузчика использовало приложение? Цитата(A. Fig Lee @ May 22 2014, 04:13)  Канал для записи во флеш и обмена данными - один из USB/RS232 и так далее... Все. И их затыкать после окончания перепрошивки перед запуском приложения тоже не нужно? Цитата(A. Fig Lee @ May 22 2014, 04:13)  Тем более в бутлоадере. Он должен быть прост и бронебоен. Если там нужен вотчдог, что-то не так. Использование собаки для отслеживания таймаута в загрузчике - исключительно простое и бронебойное решение. Но вы можете строить свой велосипед по-своему.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 22 2014, 06:52
|

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

|
Цитата(Сергей Борщ @ May 22 2014, 00:56)  А для обновления прошивки вам нужно вручную выключить и включить устройство, или все же предусмотрена возможность запуска загрузчика по команде работающему приложению? Нет. Есть комманда, по ней делается програмный ресет. И по ресету мы в бутлоадере. Если кнопка не была нажата при ресете, опять уходим в главную программу. Цитата(Сергей Борщ @ May 22 2014, 00:56)  Если предусмотрена - то где и как вы затыкаете периферию, которую перед запуском загрузчика использовало приложение? И их затыкать после окончания перепрошивки перед запуском приложения тоже не нужно? Использование собаки для отслеживания таймаута в загрузчике - исключительно простое и бронебойное решение. Но вы можете строить свой велосипед по-своему. Дык - програмный ресет, ничего не надо затыкать. А вот перед прыжком в программу USB затыкаем. И надо в главной программе explicitly сделать __enable_interrupt() Все, больше телодвижений не надо. Для таймаутов пользуюсь таймером обычным. Но в данном случае его не пользую. Таймаут это фактически "флэшу кирдык", а значит, микросхеме и устройству. Нет смысла обрабатывать такую ситуацию. Везите к нам. Будем разбиратся. Цитата(Golikov A. @ May 22 2014, 00:58)  Все же переход в загрузчик из основного приложения прыжком - реально зло... Надо в загрузчик переходить с чистого листа. Так же и в приложение хорошо бы перейти с чистого листа, ну мало ли что... мое ИМХО Правильно. Но в приложение не обязательно
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 22 2014, 07:34
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(A. Fig Lee @ May 22 2014, 14:02)  Нет. Есть комманда, по ней делается програмный ресет. То есть все-таки ресет? Цитата(A. Fig Lee @ May 22 2014, 14:02)  Если кнопка не была нажата при ресете, опять уходим в главную программу. Ага, то есть цена вашего велосипеда - необходимо присутствие вблизи устройства homo sapiens, нажимающего на кнопку. И необходимость у устройства иметь эту кнопку (снаружи или внутри, в последнем случае еще и корпус вскрывать надо). Понятно. Цитата(A. Fig Lee @ May 22 2014, 14:02)  Таймаут это фактически "флэшу кирдык", а значит, микросхеме и устройству. Нет смысла обрабатывать такую ситуацию. Везите к нам. Будем разбиратся. Понятно. У меня перепрошивка на лету, таймаут - сбой связи, он обрабатывается, в случае неудачи можно перепрошить снова и ничего никуда возить не надо.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 22 2014, 13:06
|

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

|
Цитата(Сергей Борщ @ May 22 2014, 06:44)  То есть все-таки ресет? В боотлоадер всегда по ресету, я никогда обратное не утверждал, а в главную программу просто прыжком. Цитата(Сергей Борщ @ May 22 2014, 06:44)  Ага, то есть цена вашего велосипеда - необходимо присутствие вблизи устройства homo sapiens, нажимающего на кнопку. И необходимость у устройства иметь эту кнопку (снаружи или внутри, в последнем случае еще и корпус вскрывать надо). Понятно. Да. Подсоединять то все равно ктото должен к компьютеру. Кстати, сегодня заказали сделать с переходом в бутлоадер по команде. Буду в главной программе писать 0xFE в EEPROM на старте, если там 0xFF. Перед рестартом в бутлоадер сотру на 0xFF. Бутлоадер при 0xFF прыгать не будет. При дисконнекте USB будет прыгать в главную. Но человек там все равно должен быть. Цитата(Сергей Борщ @ May 22 2014, 06:44)  Понятно. У меня перепрошивка на лету, таймаут - сбой связи, он обрабатывается, в случае неудачи можно перепрошить снова и ничего никуда возить не надо. У нас тоже в случае неудачи (удачи тоже) всегда можно перепрошить. Связь по USB, не вижу смысла обрабатывать обрыв связи. Таймаут возможен при плохой микросхеме. Тогда везти придется. Цитата(Allregia @ May 22 2014, 07:11)  Зачем? Достаточно обьявить переменную как __noinit и по абсолютному адресу.
В Ф4 я через backup SRAM передаю. Для перехода из основной программы в бутлоадер и обратно. Ух ты! Класс. Не знал про __no_init. Да, про SRAM бакапную тоже забыл, но аксесс к ней нетривиальный тоже. Так, что мы имеем? STM32 имеет SRAM, то бишь статик RAM. На триггерах, надо понимать. Если погуглить на "sram initial state" то выпадает множество статей на тему "Initial SRAM State as a Fingerprint and Source of True Random Numbers..." из чего можно сделать вывод, что как и следовало ожидать RAM на старте может быть в каком угодно состоянии. На ней rely нельзя. Буду делать через EEPROM.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 22 2014, 14:51
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(A. Fig Lee @ May 22 2014, 21:16)  из чего можно сделать вывод, что как и следовало ожидать RAM на старте может быть в каком угодно состоянии. На ней rely нельзя. Толстый намёк (уже третий раз в этом топике): есть регистр, показывающий причину сброса. Совсем-совсем толсто: если сброс программный, то есть гарантия, что в нужной ячейке ОЗУ не мусор, а то, что нужно. Почему? Потому что программа записала туда то, что нужно перед тем, как вызвать программный сброс. Народ совсем не сообразительный пошёл нынче... Я в печали :-(
|
|
|
|
Сообщений в этой теме
k000858 STM32: сброс всей периферии перед переходом из загрузчика в основную прошивку May 21 2014, 03:43 adnega Цитата(k000858 @ May 21 2014, 11:53) Дост... May 21 2014, 03:47 k000858 Цитата(adnega @ May 21 2014, 11:57) Есть ... May 21 2014, 03:52 scifi Самый кошерный способ - это сбросить МК полностью ... May 21 2014, 03:53 k000858 Цитата(scifi @ May 21 2014, 12:03) Самый ... May 21 2014, 03:58  scifi Цитата(k000858 @ May 21 2014, 12:08) тогд... May 21 2014, 04:00  A. Fig Lee Цитата(k000858 @ May 21 2014, 03:08) тогд... May 21 2014, 07:49   scifi Цитата(A. Fig Lee @ May 21 2014, 15:59) А... May 21 2014, 08:07    adnega Цитата(scifi @ May 21 2014, 16:17) Это же... May 21 2014, 08:13    A. Fig Lee Цитата(scifi @ May 21 2014, 07:17) Это же... May 21 2014, 09:02 Axel Отключение тактирования точно ничего не сбрасывает... May 21 2014, 03:56 k000858 а есть способ запретить все прерывания, а не одно ... May 21 2014, 04:07 Golikov A. глобальным флагом?
#define INTERRUPT_DISABLE_STOR... May 21 2014, 05:35 k000858 Цитата(Golikov A. @ May 21 2014, 13:45) г... May 21 2014, 05:43 Golikov A. не все, а только обычные
__disable_fiq() - остальн... May 21 2014, 07:16 scifi Цитата(Golikov A. @ May 21 2014, 15:26) _... May 21 2014, 07:19  _Артём_ Цитата(scifi @ May 21 2014, 15:29) Какой ... May 21 2014, 08:29   scifi Цитата(_Артём_ @ May 21 2014, 16:39) Как ... May 21 2014, 08:45    _Артём_ Цитата(scifi @ May 21 2014, 16:55) А это ... May 21 2014, 09:08     scifi Цитата(_Артём_ @ May 21 2014, 17:18) Поче... May 21 2014, 09:23 Golikov A. я просто не в курсе, неужели STM32 - это только ко... May 21 2014, 07:29 Golikov A. специальный флаг, целостность прошивки, и какие - ... May 21 2014, 08:16 ViKo Это какой-то "мудрец" переименовал fast_... May 21 2014, 09:06 Golikov A. поглядел доки на кортекс - м
http://infocenter.arm... May 21 2014, 09:07 _Артём_ Цитата(Golikov A. @ May 21 2014, 17:17) п... May 21 2014, 09:12 Golikov A. ЦитатаА при чем здесь reset?
Программа бутлоадер с... May 21 2014, 09:11 A. Fig Lee Цитата(Golikov A. @ May 21 2014, 08:21) а... May 21 2014, 09:25  scifi Цитата(A. Fig Lee @ May 21 2014, 17:35) Ф... May 21 2014, 09:31 Golikov A. все там
просто ссылки криво вставляются... я посто... May 21 2014, 09:21 adnega ЦитатаБиты состояния прерывания (I и F) были замен... May 21 2014, 09:22 Golikov A. вот хрень какая-то, что же их официальный сайт то... May 21 2014, 09:25 _Артём_ Цитата(Golikov A. @ May 21 2014, 17:35) н... May 21 2014, 09:40  A. Fig Lee Цитата(_Артём_ @ May 21 2014, 08:50) Обну... May 21 2014, 10:13   scifi Цитата(A. Fig Lee @ May 21 2014, 18:23) Э... May 21 2014, 10:20    A. Fig Lee Цитата(scifi @ May 21 2014, 09:30) Старта... May 21 2014, 10:22     scifi Цитата(A. Fig Lee @ May 21 2014, 18:32) А... May 21 2014, 10:30   _Артём_ Цитата(A. Fig Lee @ May 21 2014, 18:23) Э... May 21 2014, 10:23 Golikov A. ножка? Одна единственная на кнопке? Которая и в ос... May 21 2014, 09:27 A. Fig Lee Цитата(Golikov A. @ May 21 2014, 08:37) н... May 21 2014, 09:34 Golikov A. от ресета внутренне спокойно...
вот что кеил нап... May 21 2014, 09:36 ViKo Из User Guide на Cortex-M May 21 2014, 09:41 Golikov A. путано написано, в описании на проц LPC1768, в час... May 21 2014, 09:47 _Артём_ Цитата(Golikov A. @ May 21 2014, 17:57) п... May 21 2014, 10:08 A. Fig Lee Это не стартап, это ресет хэндлер.
Никто не спорит... May 21 2014, 10:43 _Артём_ Цитата(A. Fig Lee @ May 21 2014, 18:53) Э... May 21 2014, 10:48  A. Fig Lee Цитата(_Артём_ @ May 21 2014, 09:58) Мало... May 21 2014, 11:29   _Артём_ Цитата(A. Fig Lee @ May 21 2014, 19:39) Н... May 21 2014, 11:33 scifi Цитата(A. Fig Lee @ May 21 2014, 18:53) В... May 21 2014, 14:56            A. Fig Lee Цитата(scifi @ May 22 2014, 14:01) Толсты... May 22 2014, 16:17 Golikov A. Сбрасывать собакой - чтобы сброс был железным?
Ес... May 21 2014, 14:53 Golikov A. Все же переход в загрузчик из основного приложения... May 22 2014, 01:48 Сергей Борщ Цитата(Golikov A. @ May 22 2014, 08:58) Н... May 22 2014, 01:53 Allregia Цитата(A. Fig Lee @ May 21 2014, 16:23) Э... May 22 2014, 08:01 Golikov A. ну можно же не 8 бит, а 32 бита взять, да и положи... May 22 2014, 13:42 A. Fig Lee Цитата(Golikov A. @ May 22 2014, 12:52) н... May 22 2014, 14:48 Golikov A. Ну ваще не аргумент,...
то есть если вероятность т... May 22 2014, 14:56 Golikov A. Как вы победили вероятность сбоя из за попадания к... May 22 2014, 17:02 A. Fig Lee Цитата(Golikov A. @ May 22 2014, 16:12) К... May 22 2014, 19:20 Golikov A. так это ваша позиция что так жить нельзя, и надо б... May 23 2014, 02:53 A. Fig Lee Цитата(Golikov A. @ May 23 2014, 02:03) т... May 23 2014, 07:26 Terminator У меня переход делается если во внешней flash нет ... May 23 2014, 02:57 Golikov A. сильно опасно, можно сделать кирпич из прибора... May 23 2014, 03:05 Terminator Цитата(Golikov A. @ May 23 2014, 14:15) с... May 23 2014, 05:39 Golikov A. а... 2 флэшки... May 23 2014, 07:08 Terminator Я же сразу сказал про внешнюю flash May 23 2014, 07:26 vlad_new Я в своём загрузчике напоролся на проблемму с SysT... May 24 2014, 00:51 adnega Цитата(vlad_new @ May 24 2014, 09:01) Я в... May 24 2014, 05:11  jcxz Добавлю свои 5 копеек касательно сброса периферии:... May 25 2014, 08:24 andrewlekar ЦитатаЯ в своём загрузчике напоролся на проблемму ... May 26 2014, 00:07 jcxz Цитата(andrewlekar @ May 26 2014, 10:17) ... May 26 2014, 04:25  ViKo Цитата(jcxz @ May 26 2014, 11:35) ОС не ... May 26 2014, 08:00 andrewlekar Ну вам виднее. У меня с периферией проблем не было... May 26 2014, 06:24
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|