Руководство по доведению «до кондиции» клона популярного китайского мини-роутера Hame A15, он же «unbranded A5-V11» +50


Если я видел дальше других, то потому, что стоял на плечах гигантов.
И.Ньютон


Думаю многим известен маленький китайский роутер Hame A15 (он, а точнее массовые его копии, с улучшенными по сравнению с оригиналом ТТХ, одинаково хорошо гуглятся по ключевым словам 3g/4g router как на ebay, так и на aliexpress). Сегодня я хотел расказать, как я довел до ума роутер за 6,5$ и потратил на это 20$. Зачем? А примерно за тем же, зачем из бисера плетут браслетики — чтобы микромоторику потренировать и зрение подсадить (корпуса компонентов в основном 0402 :) Большей частью ради спортивного интереса, хотя немаловажно и то, что роутерчик этот, на сегодняшний день — моя любимая база для различных проектов (даже несмотря на сложность доступа к GPIO), вместо «народных» NEXX WT3020F, TP-Link TL-MR3020, TP-Link TL-WR703N и иже с ними. Причиной тому в первую очередь является его размер и форма печатной платы, удобная для встраивания куда угодно (на фото можно оценить размеры). В дальнейшем, чтобы избежать путаницы терминологии, буду называть показанное ниже устройство так, как его называет wiki openwrtA5-V11.



Сердцем этого устройства является SoC Ralink RT5350F с частотой 360 МГц, на борту имеется полноценный USB-host, 4 МБ флеш-памяти и 32 МБ оперативной памяти SDRAM с частотой 166 MHz (это кстати странно, потому что даже древний D-link DIR-320 на борту имел более шуструю DDR). Некоторые клоны клона имеют 16 МБ памяти и не пригодны без наращивания RAM для описанных в статье манипуляций.

Как водится, на картинке ниже показан оригинальный роутер Hame A15.

Оригинал Hame A15
image

А вот так выглядит его улучшенная китайская копия (в конце статьи можно увидеть еще одну копию копии, но в 10 раз дороже :).

Китайский клон Hame A15
image

Внутренности прошивки уже на хабре освещались, поэтому останавливаться на особенностях разметки не буду. Подробно проблемы и решения описываются и на 4pda. Информации много, но она разбросана невероятно. Надеюсь в этой статье собрать ключевые моменты, опираясь на опыт ребят-«гигантов роутероводства» :)
Ответ на вопрос «а зачем это (роутер) нужно неискушенному пользователю» процитирую пользователя ded1971:
Общепотребительские свойства — универсальный компактный 3G-WiFi-роутер. Удобно брать в поездки, подключать 3G/4G- модем, организовывать свою WiFi-сеть, либо использовать в качестве репитера для усиления WiFi, подключать интернет в смарт-телевизоре, если нет встроенного WiFi. В общем, куча полезных функций за смешные деньги.

Ну и сравнение с вездесущей и всенародно любимой ES8266


Часть первая, подготовительная


Пока роутер шел почтой, было время изучить отзывы счастливых владельцев. Основные проблемы, с которыми столкнулось большинство — это проблемы перегрева роутера (и соответственно «отвала чипа») и нестабильность питания, когда роутер не может долгое время запуститься («индикатор» — тускло светятся два светодиода, с устройством невозможно соединиться по Ethernet).
Для борьбы с первой проблемой было решено установить радиатор на чип. Для этого я заказал маленькие алюминиевые радиаторы размеров12х12х3 мм (аккурат под размер чипа). Высота в 3 мм выбрана потому, что хотелось чтобы выступающий радиатор не цеплялся за предметы (в сумке, например) и роутер устойчиво мог лежать на столе.

Вот так выглядят россыпи радиаторов...


Для крепления радиатора я решил использовать термоклей. Из доступных в наших краях — был только «одноразовый» Алсил-5, который несмотря на достаточно неплохую теплопроводность совершенно не подразумевает длительного хранения. Засыхает за пару дней (а если повезет, так можно купить уже засохший). Поэтому на том же самом aliexpress были заказаны две разновидности термоклея для радиаторов мощных светодиодов — Halnziye HY910 и Hcbonyx HC-910.

Китайские ядреные термоклея


Отзывы о них на специализированныз форумах неплохие, хотя специалисты все-таки для серьезных задач рекомендуют использовать двухкомпонентные эпоксидные термоклея, вроде Thermopox 85CT. Но его еще пойди найди…
На всякий случай ниже приведу сравнительные характеристики теплопроводностей используемых мной термоклеев, найденные в Интернете.
Термоклей Halnziye HY910 — теплопроводность 0.975W/m-K
Термоклей Алсил-5 — теплопроводность 1,4-1,6W/m-K
Термоклей hcbonyx HC-910 — теплопроводность 1.7W/m-K

И общее фото :)


Для того, чтобы установить радиатор, пришлось резать корпус (в том числе и для улучшения теплообмена). Чтобы сделать все максимально аккуратно, я первым делом перечертил на плотную бумагу габариты платы, вырезал отверстие под чип, а потом этот картонный шаблон уложил в корпус. Далее все просто — отчерчиваем карандашом контуры отверстия, режем канцелярским ножом и подшлифовываем надфилем.



Разметка и обрезка пластикового корпуса под радиатор 12х12






Параллельно с установкой радиатора необходимо припаять на роутер недостающий керамический SMD конденсатор 10 мкф 6.3 В в схеме преобразователя на 3.3В. (по совету пользователя return1). Место установки показано на картинке:



А вот так выглядит плата с уже установленным конденсатором 10 мкф 6.3 в


По отзывам, ток потребления устройства снижается и становится более стабильным. Предположительно, в преобразователе 3.3В на выходе проявляются пульсации которые выводят процессор из строя. Конденсатор эти пульсации сглаживает.

Важно! Постарайтесь установку радиатора и напайку конденсатора произвести ДО запуска и эксплуатации роутера. В противном случае может оказаться, что «Боржоми пить» уже поздно…

Проблему с питанием народ решает установкой вместо штатной RC-цепочки роутера специализированных микросхем мониторов питания, например КР1171СП28, DS1816 или MAX809TTR. Мне сразу понравился вариант с использованием супервизоров питания фирмы Maxim. Две основные задачи, которые позволяют решать супервизоры — это удержание контроллера в состоянии сброса до тех пор, пока напряжение питания не достигнет заданного значения и не стабилизируется, либо сброс контроллера при снижении напряжения питания ниже критического уровня или при внезапном провале напряжения. Также из плюсов данного типа супервизоров, можно отметить то, что для установки микросхемы не требуются дополнительные компоненты, и по размерам этот полупроводниковый приборчик ложится на места снятых элементов (да-да, предварительно нужно удалить ненужные уже резисторы и конденсаторы, а потом еще и пройтись оплеткой по контактным площадкам).



Поиск на aliexpress ничего не дал, зато дал поиск по каталогу ЧИПиДИП, где обнаружились формирователи импульса (сброса) MAX809TEUR+T (с напряжением 3.08 вольт), один из которых и был успешно припаян в роутер.



Установка формирователя импульса (сброса) MAX809TEUR+T






Кстати, не могу не упомянуть китайский USB-паяльник, без которого я бы эту процедуру никогда не провернул (даже с хваленой микроволной...).
Чтобы не гонять впустую паяльник, одновременно я решил припаять к контактным площадкам консоли UART (пятачки) контактную колодку для упрощения подключения dupont-овскими проводками от Arduino-конструкторов. Идеально совпали пины колодки с шагом контактов 2 мм (стандартные широкораспространенные 2,54 мм — уже широковаты). Вот такие, например. Чтобы было удобнее припаивать, я с помощью пинцета загнул кончики контактов буквой Г и залудил пятачки на плате роутера.

Подготовка UART-консоли


Потом достаточно было установить колодку на пятачки и слегка прогреть место стыка до расплавления припоя. Важно не переборщить (что легко сделать с мощным паяльником), иначе пятачки могут просто поотваливаться от перегрева. На этот случай на картинке показано резервные test-point, куда можно подпаяться.



Кстати, можно контакты и другим методом припаять, но корпус уже просто так не закрыть.

Альтернативный вариант припаивания контактов UART

На этом подготовительная часть закончилась и началась основная.

Часть вторая, «программаторная»


Как я упоминал в начале статьи, в роутере мало памяти, всего 4 МБ. Мне конечно может кто-то вспомнить и про то, что «640 КБ должно хватить всем». Но провозившись неделю за попытками впихнуть в самостоятельно собираемую openwrt для D-Link DIR-320 все необходимые пакеты (а там ведь 8 МБ (!) ), я теперь точно знаю, что на памяти экономить не стоит. Поэтому было решено менять flash на более емкую и при этом обладающую разумной стоимостью (чтоб не дороже самого роутера). Для замены необходимы чипы с эффективной частотой ( SPI Clock rate) не ниже 100 МГц и напряжением питания 3.3 В. Из производителей — Winbond или любой другой (En=Eon, Mx=Macronix, Pm=PMC, At=Atmel). Из того, что советует openwrt.org — это W25Q128BV, MX25L128(35F), S25FL128P, S25FL129P, GD25Q128C, GD25Q128CSIG. Цифра 128 в маркировке говорит нам о том, что объем флешки 16 МБ (128Mbit=16Mб). Выбор именного такого размера обусловлен тем, что с таким объемом может без танцев с бубном работать дешевый китайский программатор 24/25-х микросхем памяти CH341A (о нем ниже). Для любителей скажу, что можно впаять и 32 МБ (например, W25Q256FV, MX25L25635F, N25Q256A, MX25L25645GM2I-10G и даже 64 МБ (MX25L51245G, MT25QL512AB). Правда хотелось бы отметить, что для 64 МБ модулей ценники на память уже далеко не гуманные. Отмечу, что разговор о микросхемах памяти ТОЛЬКО в корпусе SOP8, как самом удобном для пайки. Можно конечно брать и микросхемы в корпусах WSON8 с контактными площадками вместо ног, но пайка слишком трудоемка, а результат может и не оправдать ожидания.
Прошить микросхему памяти можно несколькими различными способами, в зависимости от того, что имеется в наличии:
а) Имеется диод/конденсатор и параллельный порт (самый простой программатор) — смотрим инструкцию по прошивке на чешском сайте или по-русски.

Так этот простейший программатор из LPT-разъема и пары деталей выглядит в жизни
image

б) Имеется любое Arduino (Pro, Micro, Nano и т. п.) — готовим из них программатор для наших SPI-флешей по следующему рецепту.
в) Если имеется Raspberry Pi — смотрим здесь
г) Имеется в наличии «народный» программатор USBASP (о котором когда-то писали на Хабре) — готовим его по рецепту №2.
д) Имеется только желание и немного денег — покупаем на aliexpress китайский программатор CH341A для 24/25 SPI флеш и спокойно начинаем работать.

Сама флешка подсоединяется к программатору (-ам) следующим образом:

Цоколевка микросхемы памяти
image

Флешку можно выпаивать и подключать к колодкам/переходникам программатора, а можно к ней подпаять уже упомянутые dupont-провода от Arduino, а уже провода подключать к программатору. «Рабочими» у флеш являются контакты MISO, MOSI, CLK, CS, VCC и GND. Если программирование ведется без снятия микросхемы с платы — лучше всего на время работы отпаять и немного приподнять над плоскостью платы контакт VCC. После окончания работы — прижать ножку к плате и припаять.
Так как желания искать порт LPT у меня не было, я решил действовать по последнему варианту д) и приобрести дополнительную железку в свой парк. Называется эта штука CH341A и представляет собой, как ни странно, программатор на основе чипа CH341, за авторской разработкой «широко известной» китайской мегакорпорации Jiangsu QinHeng Ltd. :)

Принципиальная схема программатора
image

При заказе только программатора, настоятельно рекомендую дополнительно прикупить переходник с корпусов SOP8/SOIC8 на корпуса DIP и клипсу-прищепку для работы с микросхемами.

Переходник и клипса




Можно не гнаться за мизерной экономией, а купить сразу готовый набор, состоящий из программатора и всех необходимых переходников, тогда получится помимо упомянутых выше двух переходников получить еще и адаптер для программирования микросхем 1.8 В.

Так выглядит готовый набор


По собственному опыту скажу, что клипса-прищепка работает через раз и скорее всего микросхему придется отпаять и посадить в адаптер SOP8-DIP или даже припаять к контактным площадкам на самом программаторе.

Дополнение: наконец-то пришел мой переходник, или как он правильно называется ZIF адаптер SOP8-DIP8 150 mil. Этот адаптер подходит для микросхем с шириной корпуса 150mil, шаг выводов 1,27мм. Помимо 150 mil может быть и 200 mil, так что важно при заказе на аукционах обращать на это внимание (у меня микросхемы и такие и таки, посему адаптера два).

Как визуально отличить ZIF адаптер на 150 и 200 mil


Штука невероятно удобная, микросхема зажимается легко, непринужденно и очень четко (система напоминает плоскогубцы). Для этого достаточно нажать на пружинящую верхнюю часть корпуса, положить микросхему на оголившиеся площадки и отпустить эту самую часть корпуса обратно. Подпружиненные верхние контакты при отпускании выдвигаются и микросхема автоматически зажимается (фото для наглядности, ибо микросхема 200 mil лежит в адаптере 150 mil, так что не пинать, воткнул что было под рукой). Потом устанавливаем в программатор, поглядывая где у нас нога 1 (кружочек на микросхеме). Получается так:



Больше красивых картинок SOIC8 SOP8 на DIP8 адаптера





Я снимал родную микросхему памяти с помощью термовоздушной паяльной станции, а тем у кого такого оборудования нет — рекомендую настоятельно пользоваться методом со сплавом Розе. После работы обязательно остатки сплава Розе оплёткой уберите с платы и микросхем, от греха подальше.
Снятую микросхему подсоединяем к программатору (у кого как и чем получается). Мне припаивать было лень, честно пытался зажать клипсой, в итоге ножки сильно приплюснулись пружиной клипсы. Но благо припаивать назад я 4 МБ флеш не собирался, а хороший контакт должен был обеспечить беспроблемное считывание. Так оно и произошло. Nota bene для тех кто припаивает микросхему — внимательно смотрите на циферки на платах-переходниках и в соответствии с ними припаивайте. В случае клипсы — красный провод на шлейфе ключевой и приходится на ножку с номером 1.



Схвачено и успешно от...








Разобравшись с железом, приходится разбираться с софтом. Как я уже писал, на хабре этот программатор периодически всплывает в статьях. Откуда ясно, что работает он без проблем со всеми современными операционными системами (например, в Windows 10 драйверы подтягиваются из сети автоматически, а в Linux они имеются в ядре уже несколько лет). Но, но мало ли что случится, вот здесь можно найти драйвера (для режима Serial/Parallel) отдельными файлами на всякий случай. Для программирования в Windows чаще всего используется китайский софт авторства некоего SkyGz. Для Linux имеются открытые проекты ch341prog (SPI) и ch341eepromtool (I2C), можно использовать и «народный» flashrom. Так как я использую Windows, а отзывы о «китай-проге» у большинства пользователей не особо позитивные (особенно о новых 1.28...1.30 версиях), то чтобы судьбу не искушать, считывание микросхемы проводилось с помощь простого, надежного, русского программатора AsProgrammer версии 1.4.0. Кстати, если что-то вдруг чего-то не понравилось/не понятно, или например, нужно добавить новую микросхему — можно запросто написать в теме «техподдержки» и получить быстрый feedback.

Почему пока НЕ стоит покупать флеш-память больше 16 МБ
Позволю себе небольшое лирическое отступление и объясню свое нежелание устанавливать флешку размером 32 МБ (разница в цене с 16 МБ некритичная). Дело в том, что ни в китайских программах (версии 1.29 или 1.30), ни в упомянутом AsProgrammer не заявлена поддержка микросхем аля W25Q256FV, MX25L25635F, N25Q256A, MX25L25645GM2I-10G. Возможно, причина этого в том, что для SPI-флеш максимальный объем равен 128 МБит (максимум, который можно адресовать 3-байтовым режимом адресации, принятым JEDEC). И здесь вариантов не так уж и много. Можно к примеру записать с помощью модифицированной flashrom первую половину чипа w25q256 (размером в 16 МБ), как знакомый этой программе 16 МБ чип w25q128 и засунуть в этот объем правильный bootloader (Breed, например) и factory-разделы со «служебной» информацией (mac-адрес роутера, калибровка wi-fi и т. п.). А уже загрузившись в режиме бутлоадера (в случае успешного распознавания им всего объема микросхемы) — из него можно было бы прошить скомпилированную заранее прошивку. Можно вообще закупить на будущее флешек и ждать, пока поддержка таких объемов появится в ломанных версиях китайского софта к ch341a или когда допилится flashrom. Подытоживая, лучше взять 16 МБ :) ибо «устав тянуться к звездам, подними то, что валяется под ногами».

Работа с AsProgrammer предельно проста, сначала выбираем в меню «Микросхема» свою микросхему, а затем жмем на кнопочку «Читать». Пару-тройку минут и дамп у нас в кармане :)

Считывание дампа с заводской микросхемы 4 МБ


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

Структура заводской 4МБ прошивки
0x00000000-0x00030000: «Bootloader»
0x00030000-0x00040000: «Config»
0x00040000-0x00050000: «Factory»
0x00050000-0x0011282a: «Kernel»

Сохраненный файл дампа нужно открыть в любом HEX-редакторе (я вот привык пользоваться WinHex) и по адресу 105720 (адрес в десятичной системе) меняем 40 00 на 00 01 для 16 МБ флеш (ну или на 80 00, если вдруг вы решили съэкономит десяток центов и купить микросхему объемом 8 МБ). Сохраняем модифицированную прошивку для дальнейшего использования. Кстати, адрес 105720 не является точкой какой-то привязки и там вполне могут находится другие цифры, особенно в том случае, если вы уже пытались разблокировать загрузчик для прошивки openwrt и т. п. Поэтому, если вдруг ничего не получается, и заветных «40 00» по адресу 105720 не видно, ищем в меню шестнадцатиричного редактора поиск по HEX-значениями и вбиваем туда ключевую коМБинацию байтов «00 00 16 40». Она и выведет к нужным цифрам/адресу.

В поисках заветной комбинации 00 00 16 40


Зачем это было нужно? А затем, чтобы модифицированный загрузчик позволил перепрошивать роутер через UART по TFTP, используя прошивки большего размера.
Далее сохраненную прошивку заливаем в заранее купленную флешку бОльшего размера начиная с адреса 0 (с начала). В случае успешного программирования впаиваем микросхему памяти на место и переходим к следующему этапу. Кстати, программируя купленную микросхему, мне стало жалко ее зажимать клипсой и пришлось припаять на колодку :)

Заливка прошивки


Часть третья, openwrt-шная


Следующий этап — сборка собственной версии openwrt. Если бы мне не были нужны некие специфичные пакеты, которые невозможно найти в существующих официальных (и «от энтузиастов») sysupgrade-прошивках, то можно было просто скачать первый попавшийся вариант прошивки для своей модели роутера и загрузить ее через УЖЕ понимающий большие микросхемы памяти модифицированный бутлоадер или же по-старинке использовать выше упомянутый программатор. Но мне нужно встроить в прошивку своего роутера несколько нехарактерных пакетов, поэтому пришлось идти более сложным путем и собирать openwrt под себя. Процедура эта довольно хорошо описана для множества моделей роутеров (например, для Tp-Link TL-WR741ND на Хабре, Tp-Link TL-MR3020, D-Link DIR320A1, тысячи их...), поэтому ограничусь кратким перечислением основных шагов (подробнее можно глянуть тут и тут).

Если дома машины с *nix не имеется, то первым делом устанавливаем на VirtualBox Ubuntu x64 (ну или кому-что).

Обновляем информацию об установленных пакетах
sudo apt-get update
Доустанавливаем необходимое. Для Ubuntu 16.04 LTS это выглядит так:
sudo apt-get install build-essential subversion mercurial libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext libssl-dev unzip

Копируем исходники выбранной прошивки к себе на компьютер командой git clone. Под спойлером — ссылки на исходники разных версий openwrt.

Git-репозитории проектов OpenWrt и LEDE
18.06.1
git clone git://github.com/openwrt/openwrt.git -b v18.06.1
18.06.0
git clone git://github.com/openwrt/openwrt.git -b v18.06.0
17.01.5
git clone git://github.com/openwrt/openwrt.git -b v17.01.5
17.01.4
git clone git://github.com/openwrt/openwrt.git -b v17.01.4
17.01.3
git clone git://github.com/openwrt/openwrt.git -b v17.01.3
17.01.2
git clone git://github.com/openwrt/openwrt.git -b v17.01.2
17.01.1
git clone git://github.com/openwrt/openwrt.git -b v17.01.1
17.01
git clone git://github.com/openwrt/openwrt.git -b v17.01.0
15.05.1
git clone git://github.com/openwrt/archive.git -b v15.05.1
15.05
git clone git://github.com/openwrt/archive.git -b v15.05
14.07
git clone git://github.com/openwrt/archive.git -b v14.07
12.09
git clone git://github.com/openwrt/archive.git -b v12.09

Скачанное добро у нас развернется в директории openwrt. Переходим в нее командой cd, подкачиваем и обновляем дополнительные компоненты командой
./scripts/feeds update -a && ./scripts/feeds install –a
Теперь самое время поправить «важные файлы» для того, чтобы компилятор правильно смог собрать прошивку для нашей увеличенной флешки, а не застопорился, если вдруг размер превысит положенные прописанные 4 МБ. Для этого делаем следующее. В скачанной директории с исходниками openwrt в файле target/linux/ramips/dts/A5-V11.dts заменяем на свои значения обозначенные на картинке ниже (я использовал редактор nano, можно и через F4 в mc).

Правка файла *.dts под память увеличенного размера (для 15.05.1)

Сохраняем файл, в консоли запускаем
make defconfig
и применяем стандартные параметры для профиля, затем make menuconfig. Здесь основной ключевой момент — выбор правильного профиля:
Target System: Ralink RT288x/RT3xxx
Subtarget: RT3x5x/RT5350 based boards
Target Profile: A5-V11

а дальше — по аналогии со сборкой openwrt для других роутеров (ссылки я приводил выше), модифицируем набор пакетов нужным нам образом и сохраняем конфигурацию (в файл .config). Кстати, если планируется часто изменять конфигурации, то можно каждый раз делать резервную копию командой scripts/diffconfig.sh >mydiffconfig, так мы каждый раз сохраняем свои изменения конфигурации в файл mydiffconfig. После составления нужной конфигурации (и выбора всех необходимых пакетов) запускаем сборку командой make.
Из-за самостоятельной компиляции ядра можно столкнуться с тем, что многие пакеты из официальных репозиториев для установки не подойдут. Это следует учитывать и чаще устанавливать флаг “M” напротив нужного пакета. Потом эти пакеты можно найти в папке openwrt/bin/ramips/packages и закинуть на какой-нибудь HTTP сервер для создания своего, личного репозитория с блекджеком и... для OpenWRT :).
Вот кстати вспомнил, что очень удобно команду make запускать в следующем виде:
make V=99 2>&1 | tee build.log | grep -i error
В таком случае компилятор сохраняет полную подробную копию отладочной информации о сборке в файл build.log в каталоге openwrt и показывает на экране только ошибки. Потом этот лог удобно прикреплять на форумах, чтобы найти причину ошибки или задать вопрос. Кроме того, она замечательно позволяет идентифицировать пакеты, на которых компилятор прекращает работу. Найти текст, упоминающийся в логе можно поиском по директории с помощью команды
grep –Hr «ТЕКСТ» <путь к директории поиска> | cut –d: -f1 | sort -u
Но искренне надеюсь, что компиляция пройдет успешно и выискивать ошибки не придется. После завершения процесса в папке bin каталога openwrt можно будет найти файлы прошивки, что-то вроде openwrt-ramips-rt305x-a5-v11-squashfs-sysupgrade.bin. Забираем этот файл и переходим к завершающей стадии.

Часть четвертая, консольная


После того, как прошивка собрана в недрах виртуальной машины, все что остается — закинуть ее в роутер. Мне нравится вариант с UART (не даром же я к контактным пятакам припаивал колодку). Для подключения нужен либо USB to TTL UART адаптер, либо хоть дата-кабель от старого сименса. У меня, к счастью, был такой переходник на микросхеме FT232 (подходят также микросхемы CP2102 и вездесущая CH340). Цоколевка контактных площадок показана на фото.



Основная и резервная распиновка UART-консоли


Подключаем контакты к адаптеру по следующей схеме:
GND роутера > GND адаптера
RX роутера > резистор 470 Ом-1 кОм > TX адаптера
TX роутера > RX адаптера

Объясню, зачем нужен резистор. У меня при включении роутера подключенного к адаптеру, он зависал и начинал греться.

Так все это подключалось...


При этом в терминал успевало вывалиться что-то вроде
?r----------------1-----------------A--(0-----
?---{-F-----^--B---K?SP@-(Y <0-0-$-@--- ---?--ff-----`-----------x--x-----x~`--?-----x--f-----f--`ff---------fx---f~f-f--`fxf----`fx--~-x-f--f~f-`-f-fx-~-f-xf-~--fx--x---xx----xx----x---xf--`x------fxf-x--`---f--f--f-fxx-x-?-x-f--

Резистор (можно подключать любой, в диапазоне от 470 Ом до 1 кОм) все исправил. А вот здесь, например, автор вообще советует использовать для подключения к UART для развязки использовать микросхему-изолятор цифровых сигналов AduM1201. Но мне хватило и резистора, чего и вам желаю.

UART и AduM1201
image

Принимаем сигнал от роутера с помощью программы-терминала на ПК. Как-то с народным любимцем Putty у меня не сложилось, и я использую отличную программу Terminal. Выбираем нужный виртуальный COM-порт (на котором сидит наш USB-UART), выставляем параметры:
Speed: 57600
Data Bits: 8
Parity: None
Stop Bits: 1

И жмем Connect. Теперь при подаче питания на роутер мы будем видеть в консоли логи загрузчика:

Логи загрузчика A5-V11 as is
U-Boot 1.1.3 (Apr 11 2013 — 00:10:51)
Board: Ralink APSoC DRAM: 32 MB
relocate_code Pointer at: 81fb4000
spi_wait_nsec: 42
spi device id: ef 40 18 0 0 (40180000)
Warning: un-recognized chip ID, please update bootloader!
raspi_read: from:30000 len:1000
.*** Warning — bad CRC, using default environment
============================================
Ralink UBoot Version: 3.6.0.0

ASIC 5350_MP (Port5<->None)
DRAM_CONF_FROM: Boot-Strapping
DRAM_TYPE: SDRAM
DRAM_SIZE: 256 Mbits
DRAM_WIDTH: 16 bits
DRAM_TOTAL_WIDTH: 16 bits
TOTAL_MEMORY_SIZE: 32 MBytes
Flash component: SPI Flash
Date:Apr 11 2013 Time:00:10:51
============================================
icache: sets:256, ways:4, linesz:32 ,total:32768
dcache: sets:128, ways:4, linesz:32 ,total:16384
##### The CPU freq = 360 MHZ ####
estimate memory size =32 Mbytes
Please choose the operation:
1: Load system code to SDRAM via TFTP.
2: Load system code then write to Flash via TFTP.
3: Boot system code via Flash (default).
4: Entr boot command line interface.
7: Load Boot Loader code then write to Flash via Serial.
9: Load Boot Loader code then write to Flash via TFTP.
4 3 2 1
You choosed 3
0
3: System Boot system code via Flash.
## Booting image at bc050000…
raspi_read: from:50000 len:40
. Image Name: MIPS OpenWrt Linux-3.7.5
Created: 2013-04-11 14:41:22 UTC
Image Type: MIPS Linux Kernel Image (lzma compressed)
Data Size: 915849 Bytes = 894.4 kB
Load Address: 80000000
Entry Point: 80000000
raspi_read: from:50040 len:df989
… Verifying Checksum… OK
Uncompressing Kernel Image… OK
No initrd
## Transferring control to Linux (at address 80000000)…
## Giving linux memsize in MB, 32
Starting kernel…
[ 0.000000] Linux version 3.7.5 (lich@lich-pc) (gcc version 4.6.4 20121210 (prerelease) (Linaro GCC 4.6-2012.12) ) #2 Thu Apr 11 22:41:02 CST 2013
[ 0.000000] bootconsole [early0] enabled
[ 0.000000] CPU revision is: 0001964c (MIPS 24KEc)
[ 0.000000] Ralink RT5350 id:1 rev:3 running at 360.00 MHz
[ 0.000000] Determined physical RAM map:
[ 0.000000] memory: 02000000 @ 00000000 (usable)
[ 0.000000] User-defined physical RAM map:
[ 0.000000] memory: 02000000 @ 00000000 (usable)
[ 0.000000] Initrd not found or empty — disabling initrd
[ 0.000000] Zone ranges:
[ 0.000000] Normal [mem 0x00000000-0x01ffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x00000000-0x01ffffff]
[ 0.000000] Primary instruction cache 32kB, VIPT, 4-way, linesize 32 bytes.
[ 0.000000] Primary data cache 16kB, 4-way, VIPT, no aliases, linesize 32 bytes
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128
[ 0.000000] Kernel command line: board=MPR-A1 console=ttyS1,57600 mtdparts=spi0.0:192k(u-boot)ro,64k(u-boot-env)ro,64k(factory)ro,896k(kernel),2880k(rootfs),3776k@0x50000(firmware) rootfstype=squashfs,jffs2 mem=32M
[ 0.000000] PID hash table entries: 128 (order: -3, 512 bytes)
[ 0.000000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.000000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
[ 0.000000] __ex_table already sorted, skipping sort
[ 0.000000] Writing ErrCtl register=00023ff6
[ 0.000000] Readback ErrCtl register=00023ff6
[ 0.000000] Memory: 29632k/32768k available (1969k kernel code, 3136k reserved, 473k data, 180k init, 0k highmem)
[ 0.000000] SLUB: Genslabs=9, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] NR_IRQS:48
[ 0.000000] console [ttyS1] enabled, bootconsole disabled
[ 0.000000] console [ttyS1] enabled, bootconsole disabled
[ 0.010000] Calibrating delay loop… 239.61 BogoMIPS (lpj=1198080)
[ 0.080000] pid_max: default: 32768 minimum: 301
[ 0.080000] Mount-cache hash table entries: 512
[ 0.090000] NET: Registered protocol family 16
[ 0.100000] MIPS: machine is HAME MPR-A1
[ 0.130000] bio: create slab <bio-0> at 0
[ 0.140000] Switching to clocksource MIPS
[ 0.150000] NET: Registered protocol family 2
[ 0.160000] TCP established hash table entries: 1024 (order: 1, 8192 bytes)
[ 0.180000] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.190000] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.200000] TCP: reno registered
[ 0.210000] UDP hash table entries: 256 (order: 0, 4096 bytes)
[ 0.220000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[ 0.230000] NET: Registered protocol family 1
[ 0.280000] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 0.290000] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) © 2001-2006 Red Hat, Inc.
[ 0.320000] msgmni has been set to 57
[ 0.320000] io scheduler noop registered
[ 0.330000] io scheduler deadline registered (default)
[ 0.340000] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
[ 0.360000] serial8250: ttyS0 at MMIO 0x10000500 (irq = 13) is a 16550A
[ 0.370000] serial8250: ttyS1 at MMIO 0x10000c00 (irq = 20) is a 16550A
[ 0.390000] ramips-spi ramips-spi.0: master is unqueued, this is deprecated
[ 0.410000] m25p80 spi0.0: found w25q128, expected pm25lq032
[ 0.420000] m25p80 spi0.0: w25q128 (16384 Kbytes)
[ 0.430000] 6 cmdlinepart partitions found on MTD device spi0.0
[ 0.440000] Creating 6 MTD partitions on «spi0.0»:
[ 0.450000] 0x000000000000-0x000000030000: «u-boot»
[ 0.460000] 0x000000030000-0x000000040000: «u-boot-env»
[ 0.480000] 0x000000040000-0x000000050000: «factory»
[ 0.490000] 0x000000050000-0x000000130000: «kernel»
[ 0.500000] 0x000000130000-0x000000400000: «rootfs»
[ 0.520000] mtd: partition «rootfs» set to be root filesystem
[ 0.530000] mtd: partition «rootfs_data» created automatically, ofs=380000, len=80000
[ 0.550000] 0x000000380000-0x000000400000: «rootfs_data»
[ 0.560000] 0x000000050000-0x000000400000: «firmware»
[ 0.580000] ramips-wdt ramips-wdt: timeout value must be 0 < timeout <= 35, using 35
[ 0.600000] TCP: cubic registered
[ 0.610000] NET: Registered protocol family 17
[ 0.620000] 8021q: 802.1Q VLAN Support v1.8
[ 0.650000] VFS: Mounted root (squashfs filesystem) readonly on device 31:4.
[ 0.660000] Freeing unused kernel memory: 180k freed
[ 5.100000] input: gpio-keys-polled as /devices/platform/gpio-keys-polled/input/input0
[ 5.210000] Button Hotplug driver version 0.4.1
— preinit — Press the [f] key and hit [enter] to enter failsafe mode

Читая и просматривая логи важно не упустить момент и когда будет такая вот строка:
Please choose the operation:
1: Load system code to SDRAM via TFTP.
2: Load system code then write to Flash via TFTP.
3: Boot system code via Flash (default).
4: Entr boot command line interface.
7: Load Boot Loader code then write to Flash via Serial.
9: Load Boot Loader code then write to Flash via TFTP.

Нужно быстренько успеть нажать цифру «2». Тогда увидим следующее:
You choosed 2
2: System Load Linux Kernel then write to Flash via TFTP.
Warning!!! Erase Linux in Flash then burn new one. Are you sure?(Y/N)
Please Input new ones /or Ctrl-C to discard
Input device IP (10.10.10.123) ==:10.10.10.123
Input server IP (10.10.10.3) ==:10.10.10.3
Input Linux Kernel filename () ==: openwrt-ramips-rt305x-a5-v11-squashfs-sysupgrade.bin

Нажимаем последовательно «Y», ввод, ввод, «openwrt-ramips-rt305x-a5-v11-squashfs-sysupgrade.bin». В последнем случае нужно будет вручную прописать название нашей прошивки, которую нужно будет закинуть на предварительно запущенный tftp сервер. Я для этой цели использовал программу TFTPD64. После активации консольной загрузки прошивки нужно соединить наш A5-V11 c компьютером, у которого IP адрес совпадает с указанным в консоли. Кстати для подключения напрямую (аля «usb-флешка») я наделал себе переходничков RJ45-RJ45. Их очень удобно носить вместе с роутером.



Переходники RJ45-RJ45 и их схема


Роутер прошьется и после перезагрузки будет готов к выполнению новых боевых задач. Кстати, если с консолью прошить не удалось — возвращаемся к «программатороной» части статьи и зашиваем прошивку openwrt-ramips-rt305x-a5-v11-squashfs-sysupgrade.bin через старый добрый AsProgrammer, но уже не с адреса 0, а с 327680 (!).

Часть пятая, информационная («на заметку»)


В конце повествования хотелось бы сказать пару слов о приспособлениях которые использование A5-V11 нашего делают более комфортным.
В первую очередь это U-образный переходник на USB порт. Незаменимое устройство, при совместном использовании роутера с USB-флешкой/карт-ридером/3g-4g модемом/SDR тюнером наконец :)



Так переходнички выглядят вживую






Второй важной «вехой» при работе с описываемы мини-роутером является USB-хаб. Да с очень непростой компоновкой USB-портов. Вертикальная компоновка этого пассивного хаба так и подталкивает к покупке Bluetooth "грибка" на каком-нибудь CSR8510. Мне еще с детства нравится концепция промышленных ПК от Octagon — MicroPC — и их вертикальные PC/104 «бутерброды». С упомянутым хабом есть возможность сделать что-то подобное (кстати, если кто-то из читателей нашел на просторах интернет-аукционов что-то подобное интересное — прошу поделиться в комментариях). Ну а пока заказ еще в пути, без живых фото, ограничусь картинкой из Интернет-ов

Удобный для монтажа USB-хаб
<img src="" alt=«image»/>

Ну и напоследок самое вкусное. Есть в мирУ такая новозеландская контора CloudStore, известная своей продукцией под брендом Airconsole. Хороши эти устройства, помимо всего прочего и тем, что единственные абсолютно легально и за разумные деньги подключить к iOS всевозможные RS232 логгеры. Очень крутая полезная штука, в том числе для автоматизации старых приборов и оборудования, управляемых посредством RS232. Упоминал об этих крутых девайсах и Хабр.
А вот так пишут о себе они сами :)
Если вам требуется управление удаленным оборудованием через COM/USB порты, то зачем тратить сотни или тысячи долларов на терминальные серверы Moxa*, Perle* или Opengear*? AirConsole имеет все возможности удаленного доступа и управления для серверов или сетевого обоудования, но гораздо портативнее и потребляет минимум электроэнергии.

Так вот, теперь внимание. Ниже приведены интересные картинки. Как говорится «найдите 10 отличий» :)

Сравнить Airconsole Mini (69$) и Hame A15 (6.9$)


image

Сравнить Airconsole Standart (79$) и Hame MPR-A1 (7.9$)


image

Сравнить Airconsole XL (139$) и Hame MPR-A3 (13.9$)


image

Меня это заинтриговало, и конечно же я честно попросил у производителя их устройство на тест, но ответа не дождался. Пришлось работать методом мысленного эксперимента :) Ну и читать немного. Как говорил Генри Форд "Воздух полон идей. Они постоянно стучатся к вам в голову. Вы просто должны знать что вы хотите, затем забыть это и заниматься своим делом. Идея придёт внезапно. Так было всегда".

Поэтому в чистом итоге ответ следующий «Китайские роутеры A5-V11 можно превратить в Airconsole». Вот здесь мельком этот вопрос обсуждался и с помощью заливки дампа ребята превращают свои Hamе за 6$ в Airconsole за 69$. И правильно, не Zyxel Keenetic 4G II единым жив энтузиаст.

Кстати, если вдруг среди читателей есть владельцы оригинальных AirConsol-ей, которые их уже вскрывали — с удовольствием приму в дар фото плат и дополню статью :)

Ну вот, в принципе и все, что хотелось сказать. Многое из написанного здесь применимо для другого (компактного) железа и надеюсь будет полезно «широкому кругу читателей» :)






К сожалению, не доступен сервер mySQL