Решил поделиться своим опытом реанимации Wi-Fi роутера TP-LINK 3020.
Началось все с того, что от вынужденного безделья решил я поиграться с прошивками CyberWRT. И это плохо кончилось. Я даже сам не совсем понял, что произошло. Скорее всего дело было в том, что с роутером я работал через WiFi, который раздавался точно таким же роутером с заводской прошивкой и дефолтными настройками. Видимо в какой-то момент произошел сброс настроек испытуемого, соответственно конфликт IP адресов, и получил я красивый кирпич, моргающий всеми светодиодами в циклическом ребуте.
Не надо так делать.
Погоревал и полез в Гугл.
Минусы в моем положении были такие: Я находился на работе в дикой глуши, никаких переходников с USB на UART, у меня не было. До магазина радиодеталей около 565 километров по прямой. Да и не факт, что там продавалось то, что надо.
Плюсы: на роутере уже был распаян UART. Распаять его, кстати, две минуты под стандартную гребенку 2.54. И была в наличии плата Freeduino с USB портом. Только вот что-то примеров использования ее в качестве USB-UART моста я в инете не встретил. В основном напирали на платы с несколькими аппаратными UART, а тут один только. Ну и я не такой уж специалист большой. Однако время свободное было, роутер уже полутруп — терять практически нечего. Был риск убить роутер полностью, был вариант подождать возвращения домой (через месяц) и заняться роутером там, поискав нормальный переходник. Но месяц без этого роутера означал для меня потерю впустую кучи времени, которое я планировал потратить как раз на потрошение этого роутера. Второй роутер мучить было жалко и страшно.
Ну и поехало. Достал фридуину, присобачил к компу. Нашел в интернете хитрый скетч:
void setup() {
pinMode(0, INPUT);
pinMode(1, INPUT);
}
void loop() {
}
И все. Что там инпут, куда инпут — непонятно. Смутно представляя себе предстоящие мучения с софтварным serial или еще с чем, пока непонятным, стал подключать роутер. RX-TX, TX-RX. Где-то советовали резистор для согласования напряжений, у меня его не было. Кто-то советовал закоротить RESET на землю, что тоже казалось мне подозрительным. Решил, что полтора вольта разницы пофиг. Роутер подключил к сетевой карте ноутбука и сдуру включил… И увидел повторяющееся в такт мигающим светодиодам каждые две секунды:
U-Boot 1.1.4 (Nov 28 2011 - 09:34:00)
AP121 (ar9330) U-boot
DRAM:32 MB
..........
.......
..
eth0, eth1
Autobooting in 1 seconds...
И где я это увидел? В окне ардуиновского serial монитора. А вверху окна ненавязчиво маячило поле ввода и кнопка с чисто русским «Послать». Я подумал, посомневался, набрал там «tpl», выждал появления «Autobooting in 1 seconds» и послал. Без всяких там дополнительных терминалов, Putty и тому подобного. И оно остановилось!
Это просто не могло быть правдой.
Набрал «printenv» — работает!
Я был в шоке. Дальше все как по маслу:
— скачал tftpd32, всунул в его папку прошивку.
— Установил IP сетевой карты ноутбука 192.168.1.100.
— запуск tftpd32, IP — 192.168.1.100, Show Dir — путь к прошивке — Copy.
— tftpboot 0x80000000 CyberWrt-v1.4.bin — готово
— erase 0x9f020000 +0x3c0000 — готово
— cp.b 0x80000000 0x9f020000 0x3c0000 — готово
— bootm 0x9f020000 — готово!
— вернул сетевухе получение IP автоматом…
И все это из serial монитора от Ардуино…
И все! В результате — живой роутер. Причем что интересно — я даже «землю» забыл соединить между роутером и фридуиной. Заметил это уже после прошивки. Просто роутер питание получал от USB того же ноута, что и Freeduino, видимо оно само там где-то соединилось.
Так что все оказалось гораздо проще, чем я предполагал. Глаза боятся, а руки делают. Удачи всем, кто будет повторять.
Комментарии (25)
Keroro
06.04.2015 09:13+1Полтора вольта — это более чем достаточно, чтобы убить порт процессора\контроллера (или их самих). Да, некоторые порты у них могут быть «5V tolerant» (и похоже, что RX и TX пины как раз таковы, по крайней мере в Ардуинах на ATMega), но я самолично убил одну ESP8266, подключив ее RESET к порту 5-ти вольтовой Ардуины напрямую (при этом RX таки был подключен по фен шую, через делитель).
DarkByte
06.04.2015 10:50+3Попробуйте включить MR3020 с зажатой кнопкой Reset и смотрите через ардуину лог загрузки. Увиденная магия поможет в следующий раз восстановить прошивку роутера не распаивая uart.
POS_troi
06.04.2015 10:52Скорее всего дело было в том, что с роутером я работал через WiFi, который раздавался точно таким же роутером с заводской прошивкой и дефолтными настройками.
к счастью, конфликт ip не убивают роутеры, а вот флэша мрёт часто — так что вполне возможно что следующий сброс будет таким-же проблемным.
SantaClaus16
06.04.2015 11:12+2Конечно, зачем юзать копеечные USB to COM ttl, когда есть ардуина и желание заграфоманить?
Извините, но хабр не торт…
r00tGER
06.04.2015 11:19Причем что интересно — я даже «землю» забыл соединить между роутером и фридуиной. Заметил это уже после прошивки. Просто роутер питание получал от USB того же ноута, что и Freeduino, видимо оно само там где-то соединилось.
Вот это надо вообще выкинуть из топика.imwode
06.04.2015 12:00Но месяц без этого роутера означал для меня потерю впустую кучи времени, которое я планировал потратить как раз на потрошение этого роутера.
Надо весь топик целиком выкинуть
woddy
06.04.2015 12:02Тебе повезло что у тебя китайская ардуина с uart адаптером на cp2102 или подобном. Если бы была настоящая на ft232 то те самые полтора вольта превратили бы роутер в трупик.
плохие советы ты даешь :(Iv38
06.04.2015 13:19Мне просто интересно, а cp2102 почему не выжигает порты?
woddy
06.04.2015 13:23cp2102 выдает 3.3в
ft232rl выдает 5 или 3.3 в зависимости от перемычки. обычно 5
контроллеру ардуины всё равно, он и 3.3 и 5 понимает нормально, сам питается от 5в.
а вот процессор роутера с вероятностью 90% погоритsolalex
06.04.2015 14:16а вот процессор роутера с вероятностью 90% погорит
Я бы не был так категориченolartamonov
06.04.2015 16:06+1А я бы был. Защитный диод, стоящий там на порту, открывается при 0,6-0,7 В разницы. При подаче на вход роутера чего-то выше, чем Vcc+0,6 В (то есть 3,9 В), этот диод откроется — и потечёт через него столько, сколько блок питания подключённого устройства сможет вкачать. Ну, пока либо этот диод, либо транзисторы в USB-UART роль плавкого предохранителя не сыграют.
olartamonov
06.04.2015 16:02+2Решил, что полтора вольта разницы пофиг
(вздохнув) От получения двух свежих трупов вас спасло только то, что в ардуине на выходе TX/RX с USB-UART уже стоят резисторы по 1 кОм.
BOOTor
TP-Link славится своей неубиенностью, и про восстановление этих роутеров есть куча видео-инструкций в нете. Даже никакой ардуины не надо — просто любой USBtoCOM.
FisHlaBsoMAN
Так по сути ардуина сработала тут как com порт. В случае DIP варианта атмеги, микруху можно было просто вытащить. Я уже один раз юзал ардуину как com переходник, просто вытащил атмегу и подцепил tx-rx.
//хотя кажется я скопитанил
isden
Более того, если циклически бутался — значит это был совсем не труп. Можно было сначала попробовать перевести его в рекавери режим (или даже вообще просто начать с хард-ресета и настройки через ethernet) и залить чистую прошивку через ethernet штатными средствами.
OJV Автор
Не видел его комп
isden
В рекавери режиме не видел?
Kitsok
Не знаю, как такое может быть, если u-boot живой.
woddy
Если бут запорот то не поможет. У меня год валялся wr941nd на который залили левую прошивку, в консоль летит мусор, предложения логина нет. Отпаял флешку, сунул в программатор и оживил.
Почему запоролся бут я не знаю. По отзывам владельца «скачал не ту прошивку и залил через вебморду»
isden
Судя по описанию проблемы — с бутом все было ок, дивайс циклически бутался и что-то даже пытался делать.
woddy
у меня 941 тоже циклически бутался, циклически перемигивал светодиодами и слал циклически мусор в уарт… около 3х секунд цикл. Перебор скоростей uart не помог.
Как раз вчера нашел его среди хлама при уборке и решил опробовать на нем трехбаксовый программатор с али (ключевое слово ch431a)
isden
А у меня подобные симптомы были на 4 дивайсах — сабж, асус (WL-500gp) и netgear (WNDR3700 и еще какая-то моделька была не очень долго, потом отдал обратно). Во всех случаях рекавери решил проблему.
К слову, с асусом все было достаточно печально — там, видимо, уже ПЗУ начало сбоить (моделька достаточно старая и много чего пережила), стабильно происходило самопроизвольное окирпичивание в случайные моменты, помогал только рекавери с заливкой прошивки и восстановлением конфига. БП менял пару раз, не особо помогало.