0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
|
1 | |
Перезагрузка МК командой по UART08.12.2010, 14:29. Показов 16509. Ответов 27
Метки нет (Все метки)
Пока сидел в оффлайне и отлаживал отладчик (!), пришла в голову интересная мысля.
Представьте ситуацию: Есть устройство, связь с которым осуществляется через 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
|
08.12.2010, 14:29 | |
Ответы с готовыми решениями:
27
Можно ли закрыть приложение командой в консоле, если открыл командой system();? Массив: Вводить строки командой (ADD) и выводить список на экран командой (SPISOK)... Конфигурация UART и просмотр файла, в который приходят данные с UART Сообщения для 2 UART выводятся в 1 UART, STM32F103C8T6 Два TX UART на один RX. Мультиплексирование UART. |
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
Сообщение от Orsymus Orso
0
|
08.12.2010, 18:33 | |
08.12.2010, 18:33 | |
Помогаю со студенческими работами здесь
20
Командой char stroka[100]; объявляется символьный массив из 100 элементов а командой cin >> stroka; с клавиатуры читает Командой char stroka[100]; объявляется символьный массив из 100 элементов, а командой cin >> stroka; с клавиатуры читает Пример 5. Командой char stroka[100]; объявляется символьный массив из 100 элементов, а командой cin >> stroka; с клавиат Запрос с командой Like Вывести командой Процедура с командой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |