Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/90: Рейтинг темы: голосов - 90, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
1

Перезагрузка МК командой по UART

08.12.2010, 14:29. Показов 16509. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пока сидел в оффлайне и отлаживал отладчик (!), пришла в голову интересная мысля.

Представьте ситуацию:
Есть устройство, связь с которым осуществляется через RS-232 (или UART). Команды подаются с ПК. Расстояние от устройства до ПК довольно большое, или есть другие причины, по которым мы не можем добраться до устройства (например, оно в другой комнате, а нам лень туда идти).

И вот, внезапно, потребовалось перезагрузить девайс. Возможно, из-за того, что он завис. Возможно, потому-что надо призвать boottooder, а он просыпается только от ресета. Как быть?
1) Подойти и... нет, подойти к нему мы не можем (Взять швабру и тыкнуть в кнопку RESIT, не вставая со стула - тоже лень).
2) Дернуть питание. Довольно спорный вариант. Во-первых устройство может питаться автономно, а во-вторых от этой-же линии могут питаться другие девайсы. А их перезагружать нежалательно.

Кажется вариантов не осталось.... можно, конечно, взорвать тактический ядерный заряд, электронигнитный импульс от которого наведёт ток на ножке RESIT и вызовет сброс МК. Но тогда, на нас могут подать в суд за радиационное загрязнение окружающей среды....

Хм... будем сочинять перезагружалку. Возьмём такую схему:


Пока всё спокойно, линия RX находится в высоком уровне (5В) и никак не влияет на RESIT.
Но, как только в сторону МК посылаются данные, линия начинает дергаться. При низком уровне на линии, конденсатор C1 разряжается через резистор R2. При высоком уровне - заряжается через R1, R2 и R3 (через диод D1). Таким образом заряжается он гораздо быстрее, чем разряжается.
Как только напряжение на конденсаторе упадёт ниже порога (обычно это 0.2*Vcc), МК перезагрузится.
Значит, если низкий уровень продержится достаточно долго, то МК сбросится.
Для того, чтобы надолго прижать линию к земле, я снизил частоту UART и передал 0.

Несколько осциллограмм:


<Изображение удалено>

Мы передаём 0 на обычной скорости - 9600 (2). При этом напряжение на ножке RESIT проседает до 2.8В.Это не приведёт к перезагрузке.
Даже, если передать подряд кучу нулей (1), то ничего страшного не случится.
А вот, если снизить скорость до 1200 и передать 0, то напряжение просядет до 0.67В, что вызовет сброс МК (3).

Вот таким-вот макаром можно удалённо перезагружать устройства.

З.Ы. Я вернулся =)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2010, 14:29
Ответы с готовыми решениями:

Можно ли закрыть приложение командой в консоле, если открыл командой system();?
Открыл system(&quot;roulette.JPG&quot;); А как закрыть?

Массив: Вводить строки командой (ADD) и выводить список на экран командой (SPISOK)...
Здравствуйте. Изучаю Java дошёл до массивов. В общем задача, следующая. Написать программу, в...

Конфигурация UART и просмотр файла, в который приходят данные с UART
Уважаемые коллеги! Подскажите, пожалуйста, как будет оптимальнее прочитать (скорее залогировать...

Сообщения для 2 UART выводятся в 1 UART, STM32F103C8T6
Почему может неправильно работать uart? Подключил 1 uart к пк через usb/uart переходник, а второй к...

Два TX UART на один RX. Мультиплексирование UART.
Привет, сообщество. Возник небольшой затык. Есть необходимость при одном UART на Atmego32 подавать...

27
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
08.12.2010, 14:36 2
Месье понимает толк в извращениях :)))))

А что, WDT не проще ли?
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
08.12.2010, 14:37 3
Схемотехнически эта проблема давно решена в Ардуино, посмотри как там разведен COM-port и догадаешься как они перезагружают контроллер чтобы добраться до своего бутлоадера.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
08.12.2010, 14:40 4
А если в МК собачий таймер не используется, а поправить прошивку мы не можем. Например, если это какое-нибудь промышленное устройство, которое частенько зависает.
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
08.12.2010, 14:47 5
Я считал, что как раз в промышленности оборудование зависать не должно.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
08.12.2010, 14:55 6
В Ардуино дёргают ресет дополнительными ножками COM порта. А у меня используются всё те-же RX и TX
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
08.12.2010, 15:03 7
Т.е. у тебя нет возможности подключить дополнительную лапу с ком-порта? Тогда действительно очень грустно. Я обычно стараюсь все лапы от кабеля довести до девайса. А в Ардуине мне сильно понравилась эта перезагрузка подачей сигнала на неиспользуемую линию.
0
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
08.12.2010, 15:04 8
А это не только в Ардуине, я точно такое же решение видел и в других платах. Например от ETT.
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
08.12.2010, 15:06 9
okotimiv, увидишь такое решение в самоделках, то обрати внимание нет ли там в подписях моего сайта, может быть это моя очередная безделушка.
0
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
08.12.2010, 15:08 10
Идея хороша в том случае, когда обмен происходит без проводов. Если по проводам- то всегда найдется 1 свободный, с чьей помощью обычной кнопкой можно прижать ресет к земле).
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
08.12.2010, 15:11 11
STT, там могла быть давно проложенная проводка в которую нельзя вмешиваться. Хотя при глючности железа, то лучше вмешаться и в проводку.
0
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 880
08.12.2010, 15:15 12
Лучше оставь ресет с кнопочкой. Кнопочка - лишняя мотивация писать неглючащий код, не создающий ситуаций, при которых этой кнопочкой надо будет воспользоваться.
0
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 598
08.12.2010, 16:52 13
а в AVR разве нет внутреннего флага ресета? по-моему был какой-то. посмотреть не могу сейчас. пишем туда единичку и контроллер ресетится
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
08.12.2010, 16:55 14
Так задача-то не в том, чтобы перезагрузить Мк программно, а в том, чтобы сбросить его командой по UART (RS-232) с другого устройства.
0
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 598
08.12.2010, 17:33 15
а в чем разница? перезагрузить его дожно некоторое управляющее устройство (частный случай - комп) - не фотокамера же его перезагружать будет. стало быть перезагружаемое устройство - управляемое, т.е. может принимать команды и данные. стало быть делаем команду перезагрузки, обработчик которой делает софт ресет
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
08.12.2010, 17:42 16
Перезагружать обычно надо, если устройство зависло. Следовательно оно не может принимать команды или данные.
0
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 598
08.12.2010, 18:01 17
Ха! и то верно, не подумал. Но для таких случаев все-таки лучше Watchdog, okotimiv прав. Заложить в программу сброс оного, а в случае сбоя МК сбросится сам. То, что при этом надо менять прошивку - не аргумент. Для того, чтобы работала схема из первого поста, нужно также иметь специально спроектированную плату. Вот если бы оно работало для любого устройства - это другой разговор. А перешить прошивку через бутлоадер при наличии уарт-соединения - дело трех минут, благо в "труднодоступные" устройства бутлоадер надо делать обязательно
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
08.12.2010, 18:12 18
Вот если бы оно работало для любого устройства - это другой разговор.
Вчера тестировал эту схему на своей отладочной плате. Сделал вот такой модуль:

https://www.cyberforum.ru/savedimages/2010/12/08/ytwrsvvhaqbmtdxx4.jpg

И что мешает прицепить его к любому устройству, где есть RESIT?
0
omx
08.12.2010, 18:18 19
Если устройство во время работы регулярно дрыгает ногами - ставит аппаратную собаку и не изобретаем велосипед.
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
08.12.2010, 18:33 20
Цитата Сообщение от dsodir
Перезагружать обычно надо, если устройство зависло. Следовательно оно не может принимать команды или данные.
Тем более. 7 бед- один ресет)
Цитата Сообщение от Orsymus Orso
STT, там могла быть давно проложенная проводка в которую нельзя вмешиваться. Хотя при глючности железа, то лучше вмешаться и в проводку.
Это как? Если нельзя вмешиваться, то и разъем не припаяешь. А если припаяешь- значит и свободный проводок найдешь, т.к. для RS232 достаточно 3 проводков.
0
08.12.2010, 18:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2010, 18:33
Помогаю со студенческими работами здесь

Командой char stroka[100]; объявляется символьный массив из 100 элементов а командой cin >> stroka; с клавиатуры читает
int main() { setlocale(LC_ALL, &quot;Russian&quot;); char stroka; cout &lt;&lt; &quot;Введите любую строку текста:...

Командой char stroka[100]; объявляется символьный массив из 100 элементов, а командой cin >> stroka; с клавиатуры читает
int main() { setlocale(LC_ALL, &quot;Russian&quot;); char stroka; cout &lt;&lt; &quot;Введите любую строку текста:...

Пример 5. Командой char stroka[100]; объявляется символьный массив из 100 элементов, а командой cin >> stroka; с клавиат
int main() { setlocale(LC_ALL, &quot;Russian&quot;); char stroka; cout &lt;&lt; &quot;Введите любую строку текста:...

Запрос с командой Like
Добрый день друзья! У меня к Вам такой вопрос: &quot;Напишите запрос, выводящий названия книг, где...

Вывести командой
1. Отобрать сегменты TCP, пересылаемые между локальным ПК и сервером, содержащие в заголовке...

Процедура с командой
У меня есть Ini файлик и куча обращений к нему в программе, обращения разные: запись, чтение....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru