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

 
 
> MCUSR после бутлоадера, Или как определить, что запуск после прошивки
Spider
сообщение Jan 31 2011, 02:44
Сообщение #1


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Всем привет!

Встала задача определения факта "самопрошивки". Другими словами, надо из основной прошивки определить факт запуска ея "самостоятельно" или запуска после прошивки из бутлоадера.
т.к. после прошивки, бутлоадер просто делает jump на нулевой адрес, я решил, что MCUSR регистр не будет содержать флагов сброса. Так ли это?
ещё один попутный вопрос, а так же как способ определения, содержимое RAM и регистров I/O сохранится в таком случае (WinAVR)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
V_G
сообщение Jan 31 2011, 04:45
Сообщение #2


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(Alexey Belyaev @ Jan 31 2011, 12:44) *
Всем привет!
т.к. после прошивки, бутлоадер просто делает jump на нулевой адрес, я решил, что MCUSR регистр не будет содержать флагов сброса. Так ли это?
ещё один попутный вопрос, а так же как способ определения, содержимое RAM и регистров I/O сохранится в таком случае (WinAVR)?


2. Содержимое RAM и регистров I/O будет в том состоянии, в каком их оставит бутлоадер
1. Делайте в бутлоадере сброс флага Power-On-Reset, а в основной программе проверяйте этот флаг. Если при включении питания прошли мимо бутлоадера, этот флаг останется установленным. Только при отладке эмулятором это неудобно. Можно также в бутлоадере после прошивки записать какой-нибудь контрольный байтик в ОЗУ, а в основной программе его проверять. Можно взводить бит в EEPROM, а в основной программе его проверять и сбрасывать, тогда состояние запомнится при пропадании питания. В общем, вариантов море.
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jan 31 2011, 05:44
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Согласен с V_G. Я обычно делаю через обмен через EEPROM, по определенному адресу
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 31 2011, 07:38
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Достаточно в бутлоадере проинитить хотя бы один пин на вывод (CS-какой-либо к примеру).
Ну и в основной программе анализировать этот битик: если настроен на ввод - то ... если на вывод ...
То же самое можно провернуть и с битиком в MCUSR.
Использование не SFR области RAM черевато тем, что можно с большой долей вероятности попасть не в noinit область и тогда прощай...
Использование eeprom избыточно для этой задачи ИМХО.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 1 2011, 13:25
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Alexey Belyaev @ Jan 31 2011, 04:44) *
т.к. после прошивки, бутлоадер просто делает jump на нулевой адрес, я решил, что MCUSR регистр не будет содержать флагов сброса. Так ли это?

Нет это не так, если вы явно не потерли все флаги бутлоадером.

Обратите внимание что биты статуса в MCUSR "are R/W". Вы можете определить свою комбинацию сброса, которая будет устанавливаться в MCUSR бутлоадером. в аппликейшине используйте ее как признак запуска через бутлоадер.

Go to the top of the page
 
+Quote Post
xelax
сообщение Feb 3 2011, 15:44
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(defunct @ Feb 1 2011, 16:25) *
Нет это не так, если вы явно не потерли все флаги бутлоадером.

Обратите внимание что биты статуса в MCUSR "are R/W". Вы можете определить свою комбинацию сброса, которая будет устанавливаться в MCUSR бутлоадером. в аппликейшине используйте ее как признак запуска через бутлоадер.


Может они W только для того чтобы можно было сбрасывать записью нуля в битик?
И означает ли это что записав единицу в WDRF я автоматически запущу watchdog?
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 3 2011, 16:41
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(xelax @ Feb 3 2011, 17:44) *
Может они W только для того чтобы можно было сбрасывать записью нуля в битик?
И означает ли это что записав единицу в WDRF я автоматически запущу watchdog?

Читать их тоже можно, да и Д/Ш говорит - R/W, каких-либо противопоказаний писать туда "1" я в ДШ не вижу.
Wdt при записи в этот регистр не запустится и не остановится. На работу любой периферии reset status флаги никак не влияют.
Go to the top of the page
 
+Quote Post
xelax
сообщение Feb 4 2011, 07:54
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(defunct @ Feb 3 2011, 19:41) *
Wdt при записи в этот регистр не запустится и не остановится. На работу любой периферии reset status флаги никак не влияют.


Как же так? Вот из даташита:

Цитата
WDE is overridden by WDRF in MCUSR. This means that WDE is always set when WDRF is
set. To clear WDE, WDRF must be cleared first. This feature ensures multiple resets during conditions
causing failure, and a safe start-up after the failure.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:34
Рейтинг@Mail.ru


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