Прошиваемся по UART, "железный метод" эксклюзив только на моем канале!
Подключаем роутер TP-Link TL-MR3020 по UART-USB (через COM-порт) и прошиваем его.
Возможно это поможет кому то при восстановлении роутера из кирпича при неудачной прошивке.
В сети много про прошивку TP-Link TL-MR3020 первых версий, в вот про прошивку P-Link TL-MR3020 V3 я не нашел, восполним этот пробел!
Я не выдержал и как всегда подпался к UART роутера TP-Link TL-MR3020 вот к этим точкам, но еще взял землю с большого разъема USB
Вот так:
- TP1-RX
- TP2-TX
- GND -земля
Припаял проводки и разъем приклеил на LAN порт
Для сопряжения с терминалом (ПК) использовал универсальный адаптер (конвертер) UART - USB, вот статья на канале: "Конвертор USB - Serial, универсальный"
Вот так уже его модифицировали
Конечно для подключения нам нужен Putty (Putty - официальный сайт). неоднократно уже было на нашем канале как подключать, статьи:
вот скриншот с роутера Xiaomi Mi, но принцип один и тот же (скорость ставим не 115200, а 119000)
Производим ряд подключений
- Подключаем конвертер Serial-USB
- Включаем соединение в Putty > "Open"
При включении роутер в сеть (обязательно уже должен быть подключен адаптер USB-Serial и открыта консоль в Putty, иначе пока все будите включать пропустите U-boot)
Настраиваем:
Serial порт у меня COM5, а у Вас, скорее всего будет другой, тут все просто смотрите в диспетчера какой порт у вас выдает ваш конвертер. А вот дальше возникают всегда некоторые проблемы, нам нужно настроить еще скорость порта и кодировку:
Про кодировку
- Чаще всего используется кодировка UTF-8
- Реже Windows-1251, центральная Европа (например Asus RT-N65U, статья: "Попытка восстановить роутер Asus RT-N65U или как умирают роутеры")
Про скорость
Все дело в том что сначала при загрузке U-boot и чуть опосля бегут крокозябры и в начале ничего не видно, а там же интересная информация что делать?
Настраивать скорость UART
Ее можно и нужно настроить в двух местах:
- 1. Через панель управления
- 2. Через Putty
Через панель управления
Панель управления\Оборудование и звук\Диспетчер устройств\Порты (COM и LTP)
Выбираем ваш порт, у меня "USB-SERIAL CH340", далее "Параметры порта"
Нам нужна скорость порта, по умолчанию она 9600 но!
Скорость (BaudRate, БодРейд) лучше выставить скорость большую чем скорость нашего устройства (роутера), поэтому меняем 9600 на 115200. Хотя у меня работает все и на стандартной скорости 9600, но это может помочь в других случаях.
Скорость в Putty
А вот скорость в настройках терминала в нашем случае это программа Putty должна ровняется скорости (BaudRate, БодРейд) устройства. ее мы подбираем руками экспериментально, но чаще всего это то же 115200 или 57600
Общепринятый ряд стандартных скоростей: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200 ; 230400; 460800; 921600 бод. (скорость в бодах иногда используются синонимы бодрейт или битрейт)
Тем не менее при стандартной скорости 115200 все равно бегут крокозябры, но потом все налаживается
А при нестандартной скорости 119000 все прекрасно грузится и все видно, возможно эти настройки относятся только к адаптеру на чипе CH340 (пишут что адаптер на CH340 не очень удачная штука, лучше на PL2303)
Интересно смотреть на листинг сначала грузится:
- U-Boot 1.1.3
А затем уже:
- Ralink UBoot Version: 4.3.0.0
Но входим мы в U-Boot 1.1.3
Напомню что 5 мая 2011 года Ralink была приобретена компанией MediaTek. Собственно чей чипсет и стоит в роутере, статья на канале: "TP-Link TL-MR3020 супер роутер - комбайн для нищебродов. Часть I, вступительная."
Вывод
Для нормальной, читабельной загрузки выставляем скорость в Putty 119000, кодировка остается по умолчанию UTF-8
Входим в U-Boot
При начальной загрузке сразу как подаем питание на роутер жмем по клавише "T" или "4", других клавиш я не нашел! Итак, прям барабаним по "T " или "4", естественно кодировка должна быть английская как и клавиша "T", а для "4" это не важно.
Итак жмякаем по "T" и попадаем в U-boot
Можете ввести"help" и вам будут доступны все возможные команды
Команды U-Boot версии 1.1.3
Список команд U-boot меню (он длинный)
- ? - alias for 'help'
- base - print or set address offset
- bdinfo - print Board Info structure
- bootm - boot application image from memory
- bootp - boot image via network using BootP/TFTP protocol
- coninfo - print console devices and information
- cp - memory copy
- crc32 - checksum calculation
- erase - erase SPI FLASH memory
- go - start application at address 'addr'
- help - print online help
- loadb - load binary file over serial line (kermit mode)
- loop - infinite loop on address range
- md - memory display
- mdio - Ralink PHY register R/W command !!
- mm - memory modify (auto-incrementing)
- mtest - simple RAM test
- nm - memory modify (constant address)
- printenv- print environment variables
- rarpboot- boot image via network using RARP/TFTP protocol
- reset - Perform RESET of the CPU
- rf - read/write rf register
- saveenv - save environment variables to persistent storage
- setenv - set environment variables
- sleep - delay execution for some time
- spi - spi command
- tftpboot- boot image via network using TFTP protocol
- version - print monitor version
По SPI есть свой Help (spi usage):
- spi id
- spi sr read
- spi sr write <value>
- spi read <addr> <len>
- spi erase <offs> <len>
- spi write <offs> <hex_str_value>
Нас интересует команда tftpboot, что естественно значит загрузку прошивки по tftp.
После ввода tftpboot роутер напишет:
Warning: no boot file name; using 'test.bin' TFTP from server 192.168.0.225; our IP address is 192.168.0.2. Filename 'test.bin'
(Предупреждение: нет имени загрузочного файла; используя test.bin
TFTP с сервера 192.168.0.225; наш IP-адрес 192.168.0.2 Имя файла test.bin)
Итак, на ПК в свойствах сетевой карты выставляем адрес 192.168.0.225
Адрес роутера будет 192.168.0.2, но нас это не особо волнует.
Качаем файл прошивки
Прошивка OpenWrt
Сайт openwrt.org (https://openwrt.org) страничка на сайте посвящённая TP-Link TL-MR3020 с версией 3, так как были и другие версии, но нам они не подходят
Нам нужен файл для первичной прошивке factory или recovery
Последняя актуальная версия 19.07.6 на наш аппарат и вообще это самая последняя стабильная версия на 21.02.2021
Скачать можно по ссылке:
Или идите сюда: https://downloads.openwrt.org/releases/19.07.6/targets/ramips/mt76x8/
и выбираете ручками нужный файл, нужен: XXXX-tftp-recovery.bin
Скачанный файл сразу переименуем в "test.bin" и поместим в папку программы tftp сервер
Подготовка к пришивке
Выполним cоединения:
- роутер с ПК соединен LAN (сетевым) кабелем;
- UART уже должен быть подсоединен к ПК и роутеру и видится в системе;
- отключите брандмауэр, он очень мешает
Программное обеспечение для прошивки
- Скачаем программу tftp сервер (tftpd64 или tftpd32). Официальный сайт http://www.tftpd64.com/. Можно скачать с моего диска tftpd64
- Программа tftp сервер должна быть установлена, в папке программы должен быть уже файл прошивки переименованный в "test.bin"
Собственно прошиваем
Набираем tftpboot, нет набираем вот так: tftpboot 0x80060000 test.bin т. е. загрузка прошивки "test.bin" по адресу 0x80060000 именно так делает роутер при прошивке при нажатой кнопке, побегут квадратики и прошивка загружена в роутер.
Роутер отчитывается строкой (старый скриншот, пока мучался с прошивкой, он загрузит по 0x80060000):
Load address: 0x80060000
Bytes transferred = 8126464 (7c0000 hex)
NetBootFileXferSize= 007c0000
По аналогии с сайта OpenWrt (https://openwrt.org/toh/tp-link/tl-mr3020) для версии ниже 3
- Стираем то что есть: erase 0x9f020000 +0x3c0000
- Запускаем прошивку: cp.b 0x80000000 0x9f020000 0x3c0000
- Загрузка: bootm 9f020000
Но для нашей версии (V3) это не работает вообще!
А как для нашей версии 3 (V3)?
Руководства для нашей версии я не нашел и потратил два дня на поиск рецепта и вот он перед вами.
Как написано выше загружать прошивку нужно вот так: tftpboot 0x80060000 test.bin
Стереть из памяти можно вот так
- Стираем из памяти под прошивку: spi erase 0xbc020000 0x7c0000
Так как прошивка у нас для V3 грузится по адресу 0xbc020000, а не по адресу 0x9f020000 (как выше) и занимает место до 0x7c0000
- Или стираем из памяти вообще все что можно: spi erase 0x00020000 0x7A0000
Команда просто erase, как выше не работает!
Но работает erase tplink 0x00020000 0x7A0000, кто так переделывает команды!
- Копируем прошивку в память: cp.b 80080000 0x00020000 0x7a0000
Загружаем прошивку: bootm 0xbc020000
- Или просто bootm
- Но можно просто перезагрузить роутер
Кнопка перепрошивки работает!
Если вы устали копаться то прошивка по кнопке (зажата кнопка в момент подачи питания) возвернет все в зад. И да, она все равно действует, GPIO у нас успевает инициализироваться, но только файл должен быть не "test.bin", а "tp_recovery.bin", все как обычно, как при обычной прошивке по кнопке. Вот статья где все расписано: "Роутер TP-Link TL-MR3020 - начало, установка OpenWrt. Часть II"Все остальные настройки те же, на ПК в свойствах сетевой карты выставляем адрес: 192.168.0.225 и обязательно отключаем брандмауэр, как же он меня задолбал.
И вот какой листинг при прошивке по кнопке
Erase flash!!
From 0x20000 length 0x7A0000
Copy 0x80080000 to 0x00020000, count 0x7A0000...
Еще раз кратко как перепрошится через UART и tftp и это работает!
- Вводим в Putty:
tftpboot 0x80060000 test.bin
Произойдет загрузка прошивки в память, файла "test.bin" по нужному адресу: 0x80060000
- Стираем из памяти все что можно стереть (можно тут ключевой слово)
erase tplink 0x00020000 0x7A0000
- Записываем из памяти на флеш прошивку
cp.b 80080000 0x00020000 0x7a0000
- Перезагружаем роутер или вводим
bootm
Ну на сегодня все два дня сидел, разбирался!
Статьи по теме:
Подписывайтесь на наш каналTehnoZet-2, там много интересного! Мы только развиваемся! Понравилась статья, хотите продолжения - ставьте лайк, жмите палец вверх!