16Мб SPI flash WINBOND W25Q128 - расширяем память роутеру TL-MR3020


Добрый день,
Предлагаю Вашему вниманию мини обзор последовательной SPI флеш-памяти в корпусе SOIC8 от производителя Winbond размером 16Мбайт. В этом обзоре я опишу как с минимальными затратами усилий сделать апгрейд постоянной памяти роутера TP-Link TL-MR3020.


Зачем?

Мне понадобился компактный роутер на базе Atheros с большим объемом ROM, чем предлагают производители. В частности, мне нужно было место для нескольких пакетов, чтобы организовать APRS шлюз. Обычно в таких случаях используют внешнюю USB флеш память, но мне этот вариант не подходил, так как создавал проблемы с надежностью и занимал единственный USB-порт роутера.

Теоретические изыскания

Я провел поиски в Сети и нашел несколько вариантов расширения памяти роутера. Все они задействуют альтернативный загрузчик UBoot, требуют работы в HEX редакторе с пониманием происходящего и пайки консольного вывода к USB-TTL переходнику и работы в консоли.

Моя реализация

Мною был найден UBoot, которому не нужна последовательная консоль.
Мною была написана программа, которая позволяет собрать прошивку без использования HEX-редактора.

Герой обзора

Пришла в отрезке ленты:


Она же без упаковки:


Идентификаторы:


Необходимые инструменты и материалы

Паяльник, флешка, роутер и программатор CH341A.

Процесс замены

1.Выпаиваем родную флешку, считываем программатором и сохраняем в файл с именем 4mb.bin. Должен получится файл размером 4194304 байта.
2.Качаем программу и помещаем файл 4mb.bin в одну папку с MR3020FW.exe
3.Запускаем MR3020FW.exe:

Жмем «Собрать прошивку с ART». Программа вытащит калибровки ART из оригинального дампа и соберет файл final_16mb_with_ART.bin
4.Прошиваем файл final_16mb_with_ART.bin в новую флешку, проверяем записанное и впаиваем новую флешку в роутер.

Я убил исходную флешку! Что делать?

Если содержимое исходной флешки недоступно — программа соберет прошивку без калибровочных данных. Роутер будет полностью работоспособен за исключением wifi-интерфейса.

Программная часть

1.Подключаем роутер к сетевой плате компьютера патч-кордом.
2.Назначаем сетевой плате компьютера IP: 192.168.1.2, маску:255.255.255.0.
3.Зажимаем кнопку WPS на выключенном роутере и подключаем питание.
4.Считаем вспышки светодиодов. После пятой(!) вспышки отпускаем кнопку WPS.
5.Заходим браузером на 192.168.1.1:

6.Качаем подходящую сборку OpenWRT и обновляем основную прошивку:


PS:
Вот так выглядел тестовый стенд



С наступающим Новым Годом!
Планирую купить +59 Добавить в избранное +105 +185
+
avatar
  • skif31
  • 31 декабря 2017, 11:38
+44
Ничего не понял но обзор хороший
+
avatar
+4
Ценник конечно не гуманный)
Я беру обычно по 5, 10 и больше (за исключением nand — их я обычно держу по 2-5 шт максимум). Стараюсь держать актуальный набор флешей.
За софтварное решение вопроса, отдельный плюс и респект! Хотя, сам предпочитаю работать с hex- редактором, программатором и иногда дизассемблированием
+
avatar
  • Demishn
  • 31 декабря 2017, 11:48
+30
как будто на хабр зашел
+
avatar
0
форум.4пда) а на хабре одни переводчики почти)
+
avatar
  • kalobyte
  • 31 декабря 2017, 11:58
+3
а какое железо преобразует звук апрс в юарт?
+
avatar
+11
Спаял по UR4MCK
+
avatar
  • kalobyte
  • 31 декабря 2017, 12:38
+2
круто
а вот чтобы так воткнуть усб звук в роутер и готово? паять ничего не надо даже
+
avatar
+1
Вот, как вариант. Или мобилка с APRSDroid
+
avatar
+6
Мало чего понял, но плюсанул
+
avatar
  • Brs
  • 31 декабря 2017, 12:30
+5
Все понял, за обзор спасибо. Как раз памяти на 3020 не хватает, а флешку использовать тоже не хочется. В принципе все реализуемо, единственное страшно убить родную флеш память при выпаивании — потом вайфай вообще не поднять будет, правильно? И ещё вопрос — нельзя ли вначале считать данные с нее, а после уже без риска выпаивать?
+
avatar
  • prom77
  • 31 декабря 2017, 12:38
+2
В ближайшей мобильной мастерской вам ее феном сдуют и назад поставят по цене поллитры пива, имхо самый лучший вариант.
+
avatar
+3
Кстати я свои 8-и ножки отпаивал T12 c жалом К. Ставлю 350 градусов и начинаю с избытком припоя поочередно касаться то одной стороны ножек, то другой. И так, пока м/с не начнет убегать за жалом. Если страшно, то можно прикрыть чем-то мелкие компоненты рядом, чтобы их не задеть.
+
avatar
+3
Будете смеяться, но я наловчился строительным феном подобные штуки сдувать))) Используя картонки и фольгированный скотч для защиты соседних элементов.
+
avatar
+1
Все нормально. Можно даже вот так
+
avatar
+1
Если есть галогенка, то можно ею нагреть
+
avatar
  • kai2
  • 31 декабря 2017, 21:25
+5
В место припоя при такой технологии лучше использовать сплав Вуда(+68,5 °C) или Розе(+94..+96 °C). У них температура плавления низкая. Сплав смешивается с припоем и чип выпаивается с меньшим перегревом.
+
avatar
+2
Именно «К» жалом, да. Подсовываю под микросхему тонкую отвертку (достаточно лишь слегка давить тонкой отверткой в стык корпуса микросхемы и платы), и грею плоской частью жала 4 ноги одновременно — пока они не поднимутся от давления отвертки под корпусом. Снять вторую сторону уже элементарно.
Абсолютно уверен в этом способе, ни разу меня не подводил. Вот только вчера дважды снимал и ставил 25q32 с китайского преобразователя Modbus.
+
avatar
+1
Я отказался от любых механических воздействий после серии выломанных ног. Да и фен имеется. Просто лень его разворачивать было. Даже было желание сделать 2хТ12 контроллер, чтобы иметь два паяльника для таких оказий, чтобы работать в две руки: танталлы, например, феном не снимешь — только обуглишь.
+
avatar
+16
По опыту работы с флеш-чипами убить их не так просто. Лучше даже немного перегреть, чем недогреть. Недогретый чип любит уносить с собой дорожки/терять ножки.
Но на вопрос есть прямой ответ
На работающем роутере снимите ART в файл: cat /dev/mtd4 > /tmp/backup_art.bin
И каким-то образом перепишите его себе на компьютер(TFTP?). Должен получиться файл размером 65536
В середине файла должно быть «ABEG12». Нечто похожее на вот такое:

Потом по моей инструкции соберите прошивку без 4mb.bin и залейте в новый чип. Выполните запуск по инструкции.
Сам файл backup_art.bin пролейте вот здесь(UBoot позволяет):
+
avatar
  • Brs
  • 31 декабря 2017, 19:25
+1
Хороший вариант, спасибо )
+
avatar
  • fafhrd
  • 31 декабря 2017, 13:08
+4
сплавом розе сначала залуживамся и оно само отпаивается, с одной стороны — потом с другой…
+
avatar
  • Brs
  • 31 декабря 2017, 19:24
+1
Да действительно, что то сразу не придумал) спасибо!
+
avatar
  • vismyk
  • 31 декабря 2017, 15:57
+1
Как раз памяти на 3020 не хватает
fanta-clauss на 3020 ставил флэшку на 256 мегабит (32 мегабайта). Я потом у него интересовался, как она прижилась, ответил, что замечательно, он даже несколько роутеров так апгрейдил…
+
avatar
+3
У fanta-clauss роутер на базе медиатек, это другой роутер.
Хотя breed позволит поставить 32Мб флешку и на mr3020
+
avatar
  • vismyk
  • 31 декабря 2017, 17:05
+1
Ага, не разглядел сразу, что тут не те «3020», что у нас с fanta-clauss'ом. ;) А breed не панацея, моя попытка поставить W25Q256 на подобный роутер закончилась провалом: роутер нестабильно запускался, а когда запускался, его нельзя было перезагрузить. :/ «Даунгрейд» (если можно так выразиться — родная-то флэшка вообще на 32 мегабита была! ;) на W25Q128 сразу снял проблему…
+
avatar
+3
Может ралинк обиделся?
Меня prom77 заинтриговал breed-ом. Попробую 32Мбайт на досуге.
Кстати нашел софт программатора, который совместно с CH341A декларирует возможность шить нормально чипы размером более 16Мб. Тоже на досуге проверю.
Всё никак не могу найти список поддерживаемых breed-ом последовательных флешек. Интересно каков максимальный размер?
+
avatar
  • vismyk
  • 31 декабря 2017, 19:22
+2
У Winbond видел даташит на W25Q512, но в продаже их пока не встречал. По ходу, на сегодняшний день это и есть практический «максимальный размер». ;)
+
avatar
+2
Тут интересно, поддерживается ли этот максимум бутлодером.
+
avatar
  • queyron
  • 31 декабря 2017, 22:10
+2
Юзай Colibri
apkservice.ru/articles/page,1,4,28-soft-dlya-programmatora-na-ch341a.html
+
avatar
+2
Скачал, проверю позже, спасибо!
+
avatar
  • queyron
  • 01 января 2018, 10:12
+5
Делает дампы автоматом в папку, умеет анлокать флешки путем чтения и записи регистров, удобный интерфейс.

Можно заюзать Postal софт, но тогда нестабильно. Можно взять софт CH341 версии 1.30, но я помню при автодетекте у меня был вылет.

Пока лучше Colibri нету ничего. Ну и с CH341 можно шить ATMEL контроллеры, STC вроде.

Asprogrammer тоже неплох…
+
avatar
0
Насчет breed, поставил я его на клон Hame с 32мб оперативки, теперь он только 16 видит. Уже заменял загрузчики на любые другие и всегда только 16мб.
+
avatar
  • vismyk
  • 03 января 2018, 18:57
0
Что-то где-то читал на эту тему. Там не в загрузчике дело, а в самой прошивке, вроде. То ли пересобирать надо, то ли можно по каким-то шаблонам прямо в бинарном дампе поменять…
+
avatar
+1
Убил ART на tp-link. Пришлось просить людей слить дамп с такой же модели. После прошивки заработал.
+
avatar
0
единственное страшно убить родную флеш память при выпаивании
Снимите прошивку до выпаивания — при помощи прищепки.
+
avatar
0
простите, а где можно заказать такую прищепку?
+
avatar
0
Там же где и программатор, на АЛи к примеру.
Они часто в комплекте продаются.
+
avatar
  • prom77
  • 31 декабря 2017, 12:46
+2
Uboot как я понял от pepe2k, а будет ли программа работать с uboot bread от китайцев, у них вроде размер бута больше стандартного ну и возможностей больше.
+
avatar
+2
Я ленив и жестко поставил размер 65536 в программе. Если подкинуть бинарник больше — программа возьмет только указанный размер.
Дайте ссылку на бинарник от китайцев, посмотрю на него. Ну и перепишу софт на свободный размер.
+
avatar
  • prom77
  • 31 декабря 2017, 14:44
+1
+
avatar
+2
Спасибо. Оказывается он поддерживает большее количество роутеров, чем я предполагал
+
avatar
+1
Забыл. Гляньте на скрин обновления прошивки в статье, там можно обновить и UBoot через pepe2k-шный
+
avatar
+3
Плюс за старания, но в настоящее время уже нет необходимости ковырять древние роутеры и паять модем. С помощью дешевого одноплатного компьютера Orange Pi Zero и программы Direwolf получаем APRS шлюз, радиомаяк, GPS-трекер и возможность работы с телеметрией.
+
avatar
+5
Мне нужна была надежность и малое энергопотребление. Так, чтобы сто раз отключил от питания и FS не улетела на SD-карте. Ну а помахать паяльником я люблю, потому и спаял аппаратный модем.
Этого всего можно было и не делать, а реализовать на дешевом андроид-смарте.
+
avatar
  • vladdiss
  • 31 декабря 2017, 13:20
+3
Программа только для MR3020FW ??????
Или можно для других модемов прошивки делать???
+
avatar
+2
Скажем так, она сделает прошивку для любого роутера, который поддерживается указанным в статье U-Boot-ом
github.com/pepe2k/u-boot_mod
Смотрите Supported devices.

Альтернативный UBoot нужен именно потому, что штатный не умеет распознавать большие по размеру флешки.
+
avatar
+2
Тоже в свое время мучал tl-mr3420. За обзор плюс!
Мне достался с дохлой флешкой, ох и намучился в поисках art-раздела (вроде о 3220-го подошёл). Вставил какую то на 8 мегабайт, работает на dd-wrt для 2.4 Ггц сетей.
+
avatar
  • AGN
  • 31 декабря 2017, 13:25
-2
Мне понадобился компактный роутер на базе Atheros с большим объемом ROM, чем предлагают производители.
Микротик?
+
avatar
+1
Компактный — это 5,8х5,8см. Ну и ключевое — Atheros.
+
avatar
  • ssurneed
  • 31 декабря 2017, 14:04
+2
А aprs только на atheros можно поднять? Я правда не знаю.
У меня 2 штуки wt3020 на MediaTek MT7620n
+
avatar
0
Изначально он откомпилировал под броадкомы. Но я не нашел ничего миниатюрного на броадкоме. Зато нашел ipk для Atheros ну и потом нашелся роутер.
Софт: aprx
+
avatar
  • Brs
  • 31 декабря 2017, 19:34
0
Обычно микротики на атеросе, но у них свой закрытый софт, я конечно не вдавался в подробности за ненадобностью, но скорее всего альтернативных прошивок в микротики нету…
+
avatar
+1
Говорят, что есть
+
avatar
  • valius
  • 31 декабря 2017, 13:35
+4
Я оперативку своему увеличивал до 64Мб, поставил микруху Elpida EDD5116ADTA-6B-E
+
avatar
+4
Спасибо за мануал и программу.

Есть еще вариант делать KISS TNC на базе самых дешевых Arduino. Заливается в них прошивка и паяется пяток деталей. Работает такой вариант весьма неплохо с любыми радиостанциями. Исходные коды прошивок и готовые бинарники есть по ссылкам на GitHub ТУТ (заметку писал для себя), самый нижний блок. KISS TNC на Arduino хорош тем, что можно собрать несколько штук, подключить их по USB в хаб, хаб воткнуть в роутер любой и вещать сразу на нескольких диапазонах. А по поводу aprx, если кому-то нужно, соберу под любую платформу.
+
avatar
+2
Очень дороговато, берём их пластинками для bios целого ряда моделей ноутов. Но идея нравится.
+
avatar
+2
Я уже был готов собрать на Ардуино, но нашел схему UR4MCK и мне подарил две платы RV1CJ. По факту, как оказалось, в Канаде из УКВ только на 2м практикуют APRS.
+
avatar
+1
Понятно.
Ну, для самого-самого старта и ознакомления с этим PacketRadio «жужжанием» данный проект на Arduino самое то.
Не понравилось или отпала надобность — разобрал конструкцию. Да и почти у каждого железячника валяется в столе Arduino лишняя и через одного старая LPD/PMR рация для тестов.
+
avatar
  • konstr35
  • 31 декабря 2017, 20:06
+1
ни чё не работает. вставлял свой бут на 741nd v1, вставлял свой boot Не выходит.
+
avatar
  • nm11
  • 31 декабря 2017, 23:58
+1
А никто не обещал. Там другой процессор. Не такой как в v4 и выше.
+
avatar
+1
Смотрите в коносль. Бывает банально UBoot не понимает размер новой флешки и падает на этом. Я столкнулся с этим, когда пытался натянуть кота на глобус, т.е. засадил оригинальный UBoot в 16Мб чип. Он мне человеческим языком сказал, что чип я не распознал. И ещё, есть не очевидный, но очень важный момент. Это вендор чипа. Возьми я не Winbond a Micron такого же размера, внутренней организации и с таким же именем и у меня ничего бы не получилось. Ибо UBoot не распознал бы ID чипа.
UBoot из моего обзора не пойдет на v1.
Вот как выглядит нормально распознанный чип в консоли:


*****************************************
*      U-Boot 1.1.4  (Aug 19 2013)      *
*****************************************

AP121 (AR9331) U-Boot for TL-MR3020

DRAM:  32 MB
FLASH: Winbond W25Q128 (16 MB)

LED on during eth initialization...

Press reset button for at least:
- 3 sec. to run web failsafe mode
- 5 sec. to run U-Boot console
- 7 sec. to run U-Boot netconsole

Reset button is pressed for:  4

Button was pressed for 4 sec...
HTTP server is starting for firmware update...

Ethernet mode (duplex/speed): 1/100 Mbps
HTTP server is starting at IP: 192.168.1.1
HTTP server is ready!
+
avatar
+1
у меня boot 128K. Покатит?
+
avatar
+1
Залейте мой, а потом прошейте Ваш из моего
+
avatar
0
короче если убил исходную флешку, то роутер а мусорку, зачем он без вайфай
+
avatar
  • bbeliy
  • 02 января 2018, 01:08
0
Добрый день!
Есть модем Technicolor TG784n v3
Модем хороший по функционалу, но залоченый оператором, работает только с портом ADSL, порт WAN неактивный. Есть прошивки под него, но они все с блокировкой. Так же есть и другие прошивки на подобный роутер, но роурер отказывается их шить. Может кто помочь сделать работающий WAN порт?
+
avatar
0
Беглое гугление показало: forums.whirlpool.net.au/archive/2301551
Здесь через cli сменили WAN на один из портов LAN. Думаю можно попробовать разобраться с командами и модифицировать их под свой вариант
+
avatar
  • bbeliy
  • 02 января 2018, 12:13
0
В лоченом веб интерфейсе, нету вообще раздела для управления WAN портом :( а постоянно конфигурировать через консоль, как то геморно
+
avatar
  • Z2K
  • 03 января 2018, 04:02
+1
залоченый оператором
— сколько из-за таких годной апаратуры (добра) выбрасываетса. ЕС разьем стандартизировал — это какой суперэффект получился. А вот аку нет :(. Я им писал, писал, а мне отписки — да, да, да — это хорошо. Но НЕТ. :)
+
avatar
  • arbatjc
  • 02 января 2018, 09:28
+1
Сталкивался с подобным ни раз. Не шьются родные из-за программной блокировки и «порчи» чипа.
Вам надо:
1) Разжиться программатором под вашу м/с.
2) Купить такую же, только чистую.
3) Поискать в сети дамп от такого роутера или тех, кто его может вас сделать. Не путать дам с прошивкой, вещи разные.
4) Старую м/с выпаять, а новую, с прошитым дампом впаять.
Часть пунктов можно исключить, если считать дамп с вашей, найти дамп другой в сети (с чистого, не леченого) и залить в вашу м/с.
+
avatar
  • Z2K
  • 03 января 2018, 04:05
+1
2) Купить такую же,
— так смысл то? Надо большего обьема.
Сорри, это коммент чтоб восстановить работоспособность?
+
avatar
  • arbatjc
  • 03 января 2018, 11:08
+1
Да, работоспособность и снять блок оператора.
+
avatar
  • _yoyo_
  • 02 января 2018, 09:44
0
Я делал так.
1. Снял флешку.
2. Копеечным прогером на сн341 снял дамп.
3. В hex редакторе дописал необходимое число FF (до получения размера новой флешки) перед калибровочным разделом art.
4. Тем же прогером залил получившийся .bin на новую флешку и запаял.
5. Загрузчик увидел новый размер флешки корректно. OpenWrt нормально загрузился. (Загрузчик Breed насколько я помню)
По размещению разделов на флешке много инфы здесь:
cyber-place.ru/showthread.php?t=387
+
avatar
0
Да. Суть в создании пустого 16Мб файла у которого в начале будет Uboot, и в последних 64К — ART.
+
avatar
  • Z2K
  • 03 января 2018, 04:10
+1
Круто это. Но конечная цель — расширение памяти роутера мелковата.
+
avatar
  • Z2K
  • 03 января 2018, 04:12
+1
А пост написан коротко и четко. Систематизированно. Без воды и каждое слово несет смысл, убери его и не поймешь правильно предложения.
+
avatar
0
Спасибо за обзор, раньше тоже намучился с Хекс редактором!
А ваша программа может собрать прошивку для 8 мегабайт флешь?
+
avatar
0
Нет. Только 16Мб. Для 8ми нужно вручную
+
avatar
0
Ну спасибо и на этом!
+
avatar
  • mukich
  • 16 января 2018, 23:52
0
«6.Качаем подходящую сборку OpenWRT и обновляем основную прошивку:»

подскажите, а какая подходящая сборка? может ссылкой поделитесь… все сделать получилось, вот только не могу понять по образу для прошивки…
+
avatar
0
wiki.openwrt.org/ru/toh/tp-link/tl-mr3020
Загрузите последнюю стабильную версию Attitude Adjustment 12.09

Или поновее:
archive.openwrt.org/barrier_breaker/14.07/ar71xx/generic/
И tl-mr3020-v1-squashfs-factory.bin
+
avatar
  • mukich
  • 17 января 2018, 09:38
0
ставил стабильную версию Chaos Calmer 15.05.1 (factory), но не могу запустить WiFi… калибровочная таблица при этом имеется на флеше…
+
avatar
0
Не пробовал последнюю прошивку, не могу подсказать
+
avatar
  • demonk
  • 12 февраля 2018, 13:33
+1
Спасибо за обзор и софтину!
Купил флешку по ссылке, проапгрейдил роутер, все работает на ура.
Теперь можно изобретать не обвешивая аппаратик хабами и не занимаясь жесткой экономией флеша.

От себя добавлю:
В текущем транке LEDE, чтобы не ограничивать сборку прошивки старыми 4Мб, надо изменить 4m на 16m в файле
/target/linux/ar71xx/image/tiny-tp-link.mk
в строках
define Device/tl-mr3020-v1
  $(Device/tplink-4mlzma)
+
avatar
0
Прошил 2 штуки так, у обоих вай фай не подключается. Сети видит но не подключается к ним В чем может быть дело? роутер исправен, прога все создала
+
avatar
0
А мак беспроводной сетевухи корректный? Если да, то нужно искать причину в другом. Если некорректен, то я что-то мог сделать не так в софте.
+
avatar
0
MAC нули. Стоял OpeWRT когда родную флешь читал. Может поэтому?