Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MCUSR после бутлоадера
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Spider
Всем привет!

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


2. Содержимое RAM и регистров I/O будет в том состоянии, в каком их оставит бутлоадер
1. Делайте в бутлоадере сброс флага Power-On-Reset, а в основной программе проверяйте этот флаг. Если при включении питания прошли мимо бутлоадера, этот флаг останется установленным. Только при отладке эмулятором это неудобно. Можно также в бутлоадере после прошивки записать какой-нибудь контрольный байтик в ОЗУ, а в основной программе его проверять. Можно взводить бит в EEPROM, а в основной программе его проверять и сбрасывать, тогда состояние запомнится при пропадании питания. В общем, вариантов море.
alexeyv
Согласен с V_G. Я обычно делаю через обмен через EEPROM, по определенному адресу
demiurg_spb
Достаточно в бутлоадере проинитить хотя бы один пин на вывод (CS-какой-либо к примеру).
Ну и в основной программе анализировать этот битик: если настроен на ввод - то ... если на вывод ...
То же самое можно провернуть и с битиком в MCUSR.
Использование не SFR области RAM черевато тем, что можно с большой долей вероятности попасть не в noinit область и тогда прощай...
Использование eeprom избыточно для этой задачи ИМХО.
defunct
Цитата(Alexey Belyaev @ Jan 31 2011, 04:44) *
т.к. после прошивки, бутлоадер просто делает jump на нулевой адрес, я решил, что MCUSR регистр не будет содержать флагов сброса. Так ли это?

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

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

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

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


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

Читать их тоже можно, да и Д/Ш говорит - R/W, каких-либо противопоказаний писать туда "1" я в ДШ не вижу.
Wdt при записи в этот регистр не запустится и не остановится. На работу любой периферии reset status флаги никак не влияют.
xelax
Цитата(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.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.