Доброго времени суток всем.

Решил поделиться своим опытом реанимации 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)


  1. BOOTor
    06.04.2015 07:14
    +1

    TP-Link славится своей неубиенностью, и про восстановление этих роутеров есть куча видео-инструкций в нете. Даже никакой ардуины не надо — просто любой USBtoCOM.


    1. FisHlaBsoMAN
      06.04.2015 08:05
      +1

      Так по сути ардуина сработала тут как com порт. В случае DIP варианта атмеги, микруху можно было просто вытащить. Я уже один раз юзал ардуину как com переходник, просто вытащил атмегу и подцепил tx-rx.
      //хотя кажется я скопитанил


    1. isden
      06.04.2015 10:30

      Более того, если циклически бутался — значит это был совсем не труп. Можно было сначала попробовать перевести его в рекавери режим (или даже вообще просто начать с хард-ресета и настройки через ethernet) и залить чистую прошивку через ethernet штатными средствами.


      1. OJV Автор
        06.04.2015 10:41
        -2

        Не видел его комп


        1. isden
          06.04.2015 10:43

          В рекавери режиме не видел?


          1. Kitsok
            06.04.2015 11:58

            Не знаю, как такое может быть, если u-boot живой.


      1. woddy
        06.04.2015 13:26

        Если бут запорот то не поможет. У меня год валялся wr941nd на который залили левую прошивку, в консоль летит мусор, предложения логина нет. Отпаял флешку, сунул в программатор и оживил.

        Почему запоролся бут я не знаю. По отзывам владельца «скачал не ту прошивку и залил через вебморду»


        1. isden
          06.04.2015 13:28

          Судя по описанию проблемы — с бутом все было ок, дивайс циклически бутался и что-то даже пытался делать.


          1. woddy
            06.04.2015 13:31

            у меня 941 тоже циклически бутался, циклически перемигивал светодиодами и слал циклически мусор в уарт… около 3х секунд цикл. Перебор скоростей uart не помог.

            Как раз вчера нашел его среди хлама при уборке и решил опробовать на нем трехбаксовый программатор с али (ключевое слово ch431a)


            1. isden
              06.04.2015 13:39

              А у меня подобные симптомы были на 4 дивайсах — сабж, асус (WL-500gp) и netgear (WNDR3700 и еще какая-то моделька была не очень долго, потом отдал обратно). Во всех случаях рекавери решил проблему.

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


  1. Keroro
    06.04.2015 09:13
    +1

    Полтора вольта — это более чем достаточно, чтобы убить порт процессора\контроллера (или их самих). Да, некоторые порты у них могут быть «5V tolerant» (и похоже, что RX и TX пины как раз таковы, по крайней мере в Ардуинах на ATMega), но я самолично убил одну ESP8266, подключив ее RESET к порту 5-ти вольтовой Ардуины напрямую (при этом RX таки был подключен по фен шую, через делитель).


  1. lolipop
    06.04.2015 10:42
    +1

    Я просто оставлю это здесь:
    github.com/pepe2k/u-boot_mod/


  1. DarkByte
    06.04.2015 10:50
    +3

    Попробуйте включить MR3020 с зажатой кнопкой Reset и смотрите через ардуину лог загрузки. Увиденная магия поможет в следующий раз восстановить прошивку роутера не распаивая uart.


  1. POS_troi
    06.04.2015 10:52

    Скорее всего дело было в том, что с роутером я работал через WiFi, который раздавался точно таким же роутером с заводской прошивкой и дефолтными настройками.

    к счастью, конфликт ip не убивают роутеры, а вот флэша мрёт часто — так что вполне возможно что следующий сброс будет таким-же проблемным.


  1. SantaClaus16
    06.04.2015 11:12
    +2

    Конечно, зачем юзать копеечные USB to COM ttl, когда есть ардуина и желание заграфоманить?
    Извините, но хабр не торт…


  1. r00tGER
    06.04.2015 11:19

    Причем что интересно — я даже «землю» забыл соединить между роутером и фридуиной. Заметил это уже после прошивки. Просто роутер питание получал от USB того же ноута, что и Freeduino, видимо оно само там где-то соединилось.


    Вот это надо вообще выкинуть из топика.


    1. imwode
      06.04.2015 12:00

      Но месяц без этого роутера означал для меня потерю впустую кучи времени, которое я планировал потратить как раз на потрошение этого роутера.

      Надо весь топик целиком выкинуть


  1. woddy
    06.04.2015 12:02

    Тебе повезло что у тебя китайская ардуина с uart адаптером на cp2102 или подобном. Если бы была настоящая на ft232 то те самые полтора вольта превратили бы роутер в трупик.

    плохие советы ты даешь :(


    1. Iv38
      06.04.2015 13:19

      Мне просто интересно, а cp2102 почему не выжигает порты?


      1. woddy
        06.04.2015 13:23

        cp2102 выдает 3.3в
        ft232rl выдает 5 или 3.3 в зависимости от перемычки. обычно 5

        контроллеру ардуины всё равно, он и 3.3 и 5 понимает нормально, сам питается от 5в.
        а вот процессор роутера с вероятностью 90% погорит


        1. solalex
          06.04.2015 14:16

          а вот процессор роутера с вероятностью 90% погорит

          Я бы не был так категоричен


          1. olartamonov
            06.04.2015 16:06
            +1

            А я бы был. Защитный диод, стоящий там на порту, открывается при 0,6-0,7 В разницы. При подаче на вход роутера чего-то выше, чем Vcc+0,6 В (то есть 3,9 В), этот диод откроется — и потечёт через него столько, сколько блок питания подключённого устройства сможет вкачать. Ну, пока либо этот диод, либо транзисторы в USB-UART роль плавкого предохранителя не сыграют.


        1. Iv38
          06.04.2015 14:33

          А, все ясно.


  1. olartamonov
    06.04.2015 16:02
    +2

    Решил, что полтора вольта разницы пофиг


    (вздохнув) От получения двух свежих трупов вас спасло только то, что в ардуине на выходе TX/RX с USB-UART уже стоят резисторы по 1 кОм.


  1. inhelp
    08.04.2015 21:33

    Хорошая идея, возьму на заметку