Серия «Своими руками»

1089

Поднимаем сотовую сеть NMT-450 в домашних условиях

Приветствую всех!

30 мая 2017 года в Котласе, что в Архангельской области, была отключена последняя в мире базовая станция NMT-450. Вместе с этим навсегда ушёл в историю не только этот стандарт, но и аналоговая сотовая связь общего пользования в принципе.

И вот, шесть с лишним лет спустя мне стало интересно: а реально ли попробовать оживить такую сеть, увидеть в работе раритетные телефоны и попробовать с них позвонить?

Итак, в сегодняшней статье разберёмся, как в домашних условиях запустить базовую станцию NMT-450. Узнаем, как работают такие сети и как сделать так, чтобы оно точно заработало.

❯ О чём я?


Многие из нас всё ещё помнят антикварные сотовые телефоны такого стандарта. Трубки были аналоговыми, SIM-карт не было, данные программировались оператором.

Сеть эту очень любили в дальних районах нашей необъятной: NMTшные трубки ловили сеть даже там, где более поздний GSM не мог совершить даже экстренный вызов. Можно было спокойно звонить где-то с опушки леса, причём сигнал был весьма и весьма уверенным. Тем не менее, система обладала целой кучей недостатков, присущих всем аналоговым сотовым сетям, так что в итоге данный стандарт навсегда ушёл в историю.

Ну что же, сегодня постараемся вернуться в те годы и попробовать запустить те самые телефоны. Причём для этого вам не понадобится ни SDR, ни другое дорогое оборудование.

❯ Как так-то?


Самое время разобраться, как же возможно запустить такую сеть без специфического оборудования.

Есть такой проект как Osmocom-analog. Его автор реализовал целый ряд аналоговых сотовых сетей (а также ряд других интересных штук типа эмуляции акустического модема), включая и предмет нашего обзора. Причём для их запуска достаточно иметь только аналоговый передатчик и такой же приёмник, ничего больше не понадобится.

Вообще, стоит учитывать, что автор данного проекта немец, так что большая часть проекта посвящена их национальным немецким сотовым сетям — A-Netz, B-Netz и C-Netz, так что в реализации других стандартов могут быть баги. Тем не менее, стоит отдать должное, что в плане работы с аналоговой сотовой связью этот софт, пожалуй, лучшее, что существует на момент создания данного поста. Так что будем использовать именно его.

Теперь очередь трансивера. И по сути именно его частотами и обусловлен мой выбор сети NMT-450. Всё дело в том, что на такой частоте умеют вещать рации диапазона UHF. Достаточно даже дешёвых китайских бубнилок, чтобы сеть успешно заработала. Конечно, есть некоторые ограничения (например, из-за того, что у нас всего один канал, можно будет единовременно подключить всего один аппарат), но для опытов этого хватит сполна.

А вот и рации. Это Joker TK-450S, одна из самых популярных моделей радиостанций такого диапазона наравне с аппаратами от Kenwood. Они как раз поддерживают нужные нам частоты.

А вот пример тех, какие не подойдут. Эти рации имеют стандарт PMR и на нужных нам частотах вещать не умеет.

❯ Обзор оборудования


Итак, посмотрим на телефоны, которые сегодня будем пытаться оживлять.

Первым у нас на очереди Nokia 640, он же THF-13. Из всех телефонов NMT-450 он был едва ли не самым популярным. По виду это типичный древний телефон тех времён.

Увы, аккумулятор его сдох, а от зарядки он не работает, так что в статье он фигурировать не будет. Предвосхищая вопросы некоторых: от ЛБП стартовать он тоже отказался, хотя я некогда запускал его от живого аккумулятора, и он работал.

Следом идёт Benefon Spica. Аппараты этой фирмы были не менее крутыми, хорошо ловили сеть и тоже пользовались большим успехом. Хотя, конечно, самым легендарным аппаратом этой фирмы был Benefon Delta с семисегментным ЖКИ, которого у меня, правда, нет.

Кстати, уже в те годы у некоторых телефонов были импульсные блоки питания вместо трансформаторных.

Не менее отличительной чертой тех трубок были вот такие чехлы, позволяющие носить аппарат на поясе.

И, наконец, самый интересный из сегодняшних девайсов, Nokia 720, он же TMF-4SP. Это так называемый автомобильный телефон, предназначенный главным образом для использования в машине. Тем не менее, у него был аккумулятор, а заодно и ручка для переноски, так что можно было пользоваться им и так.

Существовала также его версия без трубки, с гнездом для телефонной линии. Так можно было подключить стационарный телефон там, где нет линии, а GSM не ловит. Причём передача была чисто аналоговой, так что, например, там могли без серьёзных проблем работать модемы. Для аппарата на фото также был адаптер линии, втыкающийся в гнездо трубки.

Сам аппарат состоит из базового блока TMF-4SP и трубки HSN-5K (отчего некоторые путают этот девайс, называя его Nokia HSN-5K. На деле же эта трубка используется не только в этой модели телефона). Сбоку имеется антенна, которая при установке в автомобиле заменялась на внешнюю, установленную на крыше и подключенную к аппарату коаксиальным кабелем.

А вот обратная сторона базового блока. Весь девайс сделан из металла и весит пару килограммов. Даже сейчас он выглядит и ощущается очень круто. Сложно найти атрибут аутентичнее для создания атмосферы девяностых с крутыми парнями в пиджаках, серьёзным бизнесом и тому подобными атрибутами.

Никелевый аккумулятор тоже заслуживает уважения: он составляет треть массы всего аппарата.

А вот и внутренности. Трубку разбирать я не стал, а вот базовый блок весьма интересен. На плате куча ВЧ-элементов, усилитель мощности, релюшка (что именно коммутируется, мне неведомо), кварцевые генераторы, микропроцессор. Сама труба общается с базой по проприетарному протоколу MBUS, по сути это полудуплексный UART с пятивольтовыми уровнями. На том же протоколе работали старые дата-кабели Nokia.

Половинки корпуса. Помимо защиты от разных жизненных потрясений он служит также радиатором и экраном.

❯ Как работает NMT-450


Перед началом опытов поговорим об устройстве данного стандарта.

NMT расшифровывается как Nordic Mobile Telephone ввиду его изобретения в скандинавских странах. Позже он разошёлся по миру и широко использовался в Европе, России и на Ближнем Востоке.

По своей структуре NMT сильно похож на более поздние системы связи — он состоит из центра коммутации, БС и самих телефонов. Существовало две полосы частот — NMT-450 и NMT-900. Наибольшее распространение получил первый, так что именно его мы и будем рассматривать.
Как ясно из названия, рабочая его частота лежит в районе 450 МГЦ. Стандарт имеет 181 канал (462,500 — 467,500 МГц) с частотной модуляцией, при этом частота приёма на 10 МГц меньше частоты передачи. Каждый из каналов может быть как голосовым, так и управляющим, именно поэтому для минимальной БС требуется всего один трансивер.

NMT был первым стандартом сотовой связи с автоматическим роумингом, работало это за счёт того, что телефон при регистрации в сети сразу сообщал центру коммутации о своём новом местоположении.

❯ Программирование трубок


Мне всегда было интересно узнать, как же заносились данные об абоненте в телефон, ведь там не было ни SIM, ни каких-то других модулей. Запросы в духе «nmt-450 mobiles dealer configuration» ничего интересного не выдали.

В итоге поиск по тематическим группам вывел меня на некий сайт "Unofficial NMT". Сам сайт уже давно умер, но осталась его почти полная копия в Web Archive. Именно там удалось найти уйму информации по теме, включая сервис-мануалы, распиновки разъёмов, некоторую информацию по ПО.

В сервис-мануалах нашлись и скриншоты используемого для этих целей софта. В случае с Nokia это WinTesla, применяющаяся для конфигурации целого модельного ряда старых телефонов, нужно только добавить DLLку с поддержкой нужного аппарата. Именно там и задаются все нужные коды.

Сам софт, разумеется, был с защитой от копирования в виде аппаратного ключа (PKD), а телефон подрубался к компьютеру кабелем MBUS->RS-232, схема которого тоже имеется на сайте. Увы, самой WinTesla там нет, но её вполне реально найти на просторах вместе с патчем.
В случае с некоторыми другими телефонами, например, Motorola, всё было сложнее, так как для подключения к ПК использовались специальные адаптеры для проприетарного интерфейса (уже с МК внутри, а не просто схемы на нескольких транзисторах).

❯ Безопасность


Настоящим бичом операторов стало клонирование трубок. Всё дело в том, что данные об абоненте передаются в открытом виде, так что их реально перехватить в эфире, а затем записать в свою трубку и звонить за чужой счёт.

Позже это дело прикрыли, введя так называемые SIS-коды, использовавшиеся в стандарте NMT-450i. Тем не менее, фрикинг сотовых телефонов всё равно не умер, так как появилась возможность считать код, получив ненадолго доступ к самому аппарату. Впрочем, количество взломов всё же упало до вполне приемлемых уровней.

❯ Ставим софт


Ну что же, время приступать к экспериментам. Начнём с софта. Для его запуска понадобится компьютер с Linux или виртуальная машина с ним же. Использовать Live CD не рекомендую, так как могут быть проблемы с записью или воспроизведением звука. Если будете ставить на ВМ, лучше выбрать Virtualbox.


На всякий случай я выложу уже готовый софт в конце статьи.

❯ Первый запуск

Итак, открываем папку src/nmt и там запускаем нашу БС:

./nmt -k 1 -Y SE,2


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

Если всё было сделано правильно, то на экране появятся флаги скандинавских стран в ASCII-графике, а из динамиков компьютера послышится нечто вроде «У-лю-лю-лю-лю». Если это так, то с запуском софта у вас всё получилось.

❯ Подключаем рации


Хотя некоторые утверждают обратное, подключать рации напрямую ко входу компьютера нельзя: он весьма чувствительный, отчего сигнал с рации может его перегрузить или вовсе сжечь. Аналогично и для входа радиостанции.

Чтобы подключить приёмник и передатчик к компьютеру, необходимо согласовать уровни. Я использовал простейшую схему на двух потенциометрах.

Всё крайне просто: на один крайний контакт потенциометра подаётся сигнал, на другой подключается земля, с подвижного контакта снимается сигнал.

Далее включаем на компьютере музыку, настраиваем обе рации на один канал и крутим потенциометр для передатчика, добиваясь того, чтобы звук был хорошо слышен. Аналогично и для приёмника: запускаем какое-то приложение для звукозаписи типа Audacity и таким же образом регулируем уровень сигнала, говоря в рацию.

❯ Код региона


Отдельно стоит упомянуть код страны сети. Если он выбран неправильно, то БС исправно заработает, но телефон видеть эту сеть не будет.

Необходимо поковыряться в настройках и узнать, какой код стоит, после чего либо указать его при запуске софта, либо поменять его на тот, который поддерживает Osmocom. Некоторые телефоны поддерживают автоматический выбор страны.

❯ Запуск


Итак, самое время пробовать.

Включаем телефон и рации, втыкаем провода. Само собой, на компьютере необходимо отрубить все системные уведомления, слушать музыку на этой машине во время экспериментов тоже нельзя (сами представляете, что будет твориться в эфире). Передающую рацию настраиваем на 463,000 МГц, принимающую — на 453,000 МГц. Запускаем софт всё той же командой. Параметр k — канал (в данном случае первый, на который и настроены рации, если выбрать другой, то придётся выставить иную частоту). Параметр Y — как раз тот самый региональный код. Две латинские буквы — код страны, цифра после запятой — идентификатор соты.


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

На видео я пробовал подрубить внешние антенны, но, как видно, помогло это мало.

А вот и та самая Nokia. На ней это всё тоже отлично работает.

❯ Звонки


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

Для начала выполним следующую команду:

arecord -l

Будет выведен список звуковых карт в системе.
Далее запускаем сеть следующей командой:

nmt -k 1 -Y SE,2 -c hw:XXX,YYY

Здесь XXX — номер звуковой карты, а YYY — номер устройства. Скорее всего, у вас будет нечто вроде hw:2,0. После этого можно будет подрубить к компьютеру наушники и микрофон и принимать звонки на ПК.

Звуковая карта 0,0 используется при этом для самой связи с рациями, так что задействовать для звонков её нельзя.

❯ SMS


Некоторые модели телефонов имеют возможность принимать и отправлять SMS. Реализовано это следующим образом. При отправке сообщения телефон совершает звонок на номер SMS-центра и обменивается с ним информацией. При получении — наоборот, вызов поступает на сам аппарат. Таким образом, можно запустить SMS-центр хоть на обычном компьютере с модемом и, например, отправлять e-mail с телефона, даже если оператор SMS в принципе не поддерживает.

Данный софт тоже имеет возможность отправлять сообщения. Для работы с ними необходимо указать номер SMS-центра 767, а если это невозможно, то запустить софт с параметром S, где указать нужный номер. Узнать его можно отправкой произвольного сообщение на произвольный номер и наблюдением, куда совершается звонок.

Далее необходимо выполнить следующую команду:

echo "1234,1234567,SMSTestSMS" >/tmp/nmt_sms_deliver

Первое число — номер отправителя, второе — номер получателя, далее идёт сам текст сообщения.

❯ Вот как-то так


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

Тем не менее, желающим повторить всё это советую готовиться к нестандартным глюкам, всё же это аналоговая связь и соответствующее оборудование.
Такие дела.

❯ Ссылки

Показать полностью 22 2
46

Коробочка, которая поёт

Дополнительные фото в источнике материала и комментариях.

Прошлая статья с попыткой собрать что-то наподобие MIDI-модуля, судя по всему, вам понравилась, поэтому держите описание ещё одного модуля — на сей раз голосового синтезатора — с несколько более запутанной историей, более сложным чипом и менее вырвиглазной дыркой вокруг экрана :-)

❯ Та девушка, которая поёт


Начнём со сжатого экскурса в историю.

После того, как люди научились синтезировать произвольные звуки, инженеры всего мира постоянно предпринимали попытки сделать его похожим на человеческий голос. Обыкновенный TTS, вполне пригодный для чтения текстов, существовал ещё в середине прошлого века, однако же заставить его именно петь не удавалось.

Всё изменилось с началом исследовательского проекта в Университете имени Пумпеу Фабра в Испании, возглавленного Хидеки Кенмоти и профинансированного компанией Yamaha. Результаты этого исследования впоследствии вылились в коммерческую технологию под названием Vocaloid.

Первые вокалоиды звучали довольно примитивно. По сравнению со всеми прошлыми технологиями это был прорыв, но оглушительным успехом назвать их было сложно. Ровно до тех пор, пока компания Crypton Future Media в 2007 году, взяв за основу движок Vocaloid 2, не выпустила то, что впоследствии совершило фурор в концепции гострайтинга: Хацуне Мику.

Секретом успеха стал не только и не столько удачный голос, сколько то, что это по сути была «поп-звезда в коробке»: при покупке вы получали не только саму программу для синтеза голоса, но ещё и возможность использовать самого персонажа по Creative Commons CC-BY-NC.

Миловидный персонаж с новым для многих голосом лёг на благодатную почву активно развивавшегося тогда культурного сегмента японского интернета. Эпоху удачнее придумать было нельзя — активный бум User-Generated Media, параллельно с переползанием от Shockwave Flash к видеоконтенту на тогда ещё совсем молодом видеохостинге Nico-Nico Douga. Но главным плюсом было даже не это — ведь в отличие от настоящей, живой поп-звезды, Мику просто физически не могла отказаться спеть то, что вы ей там понаписали.

Это породило множество споров и дебатов, а также западающих в душу песен. Среди прочих отличился, например, deadballP — запаковывая в свои песни с лютейшим джазовым вайбом абсолютно неожиданные слова. Порой настолько неожиданные, что сам Nicovideo композитора неоднократно банил за «нарушение общественного порядка». Для примера, предлагаю читателям ознакомиться с его джазовой импровизацией с лейтмотивом «вот ты выпей молоко — сиськи будут о-го-го!» :-)

Бум user generated content подкрепился выходом игры Project DIVA на PSP, куда взяли самые популярные песни, разбавив 3D-графикой для видеоклипов, до кучи добавив возможность создавать свои клипы и карты из произвольных MP3-файлов.

Таким образом, разработчики получили не только дико популярную франшизу, но и неиссякаемый поток заведомо успешного готового контента для неё.

А популярность была на внутреннем рынке просто невообразимая! Первая версия игры побила все топы продаж в свой сезон, и разлеталась как горячие пирожки.

Вот, например, было подразделение SEGA AM2 — то самое, которое подарило нам такую классику, как Shenmue, Out Run, Virtua Fighter или Daytona USA. Его на тот момент возглавлял Макото Осаки — и даже ему не удалось получить копию игры по внутренним каналам, пришлось покупать в обычном магазине.

Впрочем, игра ему нужна была не для того, чтобы отдохнуть в свободное время, а ради того, чтобы внутри своей команды изобразить порт её на движок Virtua Fighter.

И вот когда порт был уже готов, и Осаки было уже пошёл к продюсеру Уцуми Хироши с идеей сделать аркадную версию Project DIVA — другой сотрудник AM2, Ясуси Ямасита, предложил: «А почему бы нам эти наработки не использовать для создания живого концерта?»

Идея менеджменту понравилась, за каких-то два месяца кранчей они подготовили революционный ивент — Miku Fes 2009. (Обо всей хронологии — как-нибудь в другой раз :-) Концерт собрал аншлаг, начало было положено — Мику и по сей день выступает с концертами чуть ли не каждые полгода, собирая огромные залы.

(Один из самых любимых концертных треков последних лет. До сих пор не верится, что мне выпала честь слушать его прямо из первого ряда!)

А писать для неё песни, в отличие от какой-нибудь Бритни Спирс и иже с ними, могла не только лишь конкретная команда шведов, а любой человек с мало-мальски развитым слухом и каким-никаким компьютером — прямо таки народное творчество во всей красе.

❯ А внутри у неё — неонка^W процессор!


Возможность создавать записи, конечно, весьма хороша, но ведь музыку зачастую принято исполнять живьём. В наше время Ямаха выпускает что-то наподобие клавитары на базе своей платформы от обычных цифровых клавиатур:

(к сожалению, на выставке разобрать и сфоткать процессор и разводку платы не разрешают :-))

Однако среди всего многообразия способов извлечения звуков из Мику и Ко. примерно 11 лет назад проскакивал такой интересный прототип, который и запал мне в душу:

Известно о нём было только то, что рабочие название технологии — eVOCALOID (Embedded Vocaloid). Впоследствии вышел пресс-релиз, в котором анонсировали микросхему с его поддержкой — YMW820-S.

Судя по даташиту и параметрам, мне думается, что это какая-то переработка старых чипов из серии Mobile Audio — из тех, что стояли в корейских телефонах с синтезом голоса для уведомлений.

Самым известным устройством на базе этого чипа был Pocket Miku — стилофон от Gakken из серии журналов «Otona no Kagaku».

[via]

Сколько-то лет назад я покупал такой на Yahoo! Auctions, чтобы переслать другу, и стоил он очень недорого. Тогда я ещё удивился, что оно умеет работать как USB-MIDI синтезатор.

Поэтому, когда в этом году полез во всю эту MIDI-тему, то подумал — MIDI-to-USB-host адаптеры штука обыденная, а стилофон стоит копейки, можно бы что-то и сделать! Но тут меня ждал облом — ценник на эти штуки за последние пару лет вырос примерно на порядок с лишним.

Однако вдумчивое чтение пресс-релиза навело на ещё один вектор — некий шилд для ардуины eVY1 Shield, выпускавшийся компанией AIDES.

Более того, он выпускался и в виде готового устройства eVY1 BOX, но и дизайн и цена (¥27,500 = примерно $250) оставляли желать лучшего.

Зарядник от макбука словил кризис среднего возраста и решил податься в музыку

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

С обратной стороны видим уже знакомый по Pocket Miku процессор GPEL3101A и SPI-флешку — то есть в теории оно должно суметь запустить и голос от Pocket Miku!

Быстренько раскидываем на макетке:

Для минимального включения достаточно лишь пары разъёмов и 10кОм-резистора с VBus на USB_SENSE

И да, оно поёт! Правда тихо и шумно, ведь единственный близкий к линейному выход — «наушниковый», использующий ЦАП внутри процессора GPEL, который и дудок, и жнец, и вообще — трындец, в смысле сочетает в себе полный ящик переферии от флеш-контроллеров и прочих USB до генератора вторичных напряжений питания и ЦАП/АЦП :-)

❯ Но, как говорится, есть нюанс...


Поёт этот модуль голосом VY1, также известным как MIZKI — собственный голос от Ямахи. Что, в принципе, логично, ведь Мику для этого модуля не лицензировали. Но хотел-то я чиптюн именно с Мику!

Копание в различных слоях интернета приводит к домашней страничке некоего Hummtaro, который переделал программу-программатор от eVY1 в утилиту для сохранения и прошивки ПЗУ целиком (а я уже за прищепкой на алик бежать хотел...). Также он заботливо забыл удалить оттуда копию ПЗУ своего Pocket Miku :-)
До кучи у него же на канале есть видео, где он наоборот прошивает голос VY1 в Pocket Miku.

Поэтому качаем тулзы, дампим ПЗУ и смотрим, сходства и отличия.

Кажется, где-то тут и начинаются голосовые сэмплы:

Сразу в глаза бросается большой блок данных на #40000h, который, судя по всему, и есть войсбанк. О, ну значит всё так просто! Удаляем из дампа ПЗУ родной блок данных, вставляем таковой из Pocket Miku — впритык, но поместилось. Прошиваем!

И первой композицией, которой мы насладимся в исполнении аппаратной Мику, будет 4'33" Джона Кейджа!

Пытаясь исполнить эту композицию на пианино, мой брат сломал обе ноги и руку:

Всё потому что на выходе ноль. Зеро. Ни-че-го. Ни откликов на ноты, ни даже на SysEx, который должен показать версию прошивки.

Значит, пришло время доставать драконоголовую змею и разбираться, что же там в прошивке. Но вот беда — есть бинарный блоб, который ни по какому адресу грузить непонятно, ни какая у него структура в целом неясно. Всё, что известно о процессоре — это то, что внутри ARMv7-ядро.

Эксперимента ради грузим прошивку от Pocket Miku. Ожидаемо, не работает, но на одном из пинов модуля, отмеченном как «UNUSED», появляется сигнал, подозрительно напоминающий UART. Цепляемся туда консолькой и, о чудо, там логи!

Фраза ptr=20040000 как бы намекает нам, что наш блоб прошивки в адресном пространстве процессора попадает на адрес #20000000h, но как убедиться, что это не отдельный раздел, и исполняемый код находится в том же блоке адресов?

Просто находим в блобе текст ptr=%x,data=%x,r_data_size=%x… и дописываем к нему .%08x%08x%08x %)

Всё развалилось, но не до конца:

После строки логов видим ещё два 32-битных числа — первое является чем-то непонятным, а вот второе — #20003a84h — явно адрес того кода, который вызвал функцию логирования.

Как это работает? Очень просто: каждый следующий аргумент для формирования строки через printf берётся со стека, поэтому если мы возьмём оттуда больше, чем было заложено разработчиком — например, добавив ещё токенов форматирования — то напечатается то, что было на стеке дальше. В нашем случае там был и адрес возврата, который указывал на инструкцию, следующую за той, которая вызвала печать этой строки.

Грузим файл в гидру по адресу #20000000h, прыгаем на смещение #3a84h, жмём Disassemble — и всё взрывается, как попкорн в микроволновке.

Дальше идёт полторы недели медитации над листингом с постоянными попытками перетащить куски инициализации DSP из прошивки Pocket Miku в прошивку eVY1, на случай если просто-напросто не выделяется достаточно памяти перед заливкой войсбанка в него. Но всё тщетно.

В какой-то момент от безысходности я начинаю просто рандомно обрезать войсбанк Мику и прошивать его — и замечаю, что если обрезать его по размеру родного голоса, но сохранив последние 4 байта как в оригинале, то частично всё начинает работать. Ну, пока не попытаешься воспроизвести фонему, которая в прошивку не попала :-)

Постепенно увеличивая блок данных, бинарным поиском прихожу к тому, что всё ломается на превышении прошивкой размера в #1CFE00h байт. Не, ну если бы хотя бы #1D0000h, я бы подумал, что контроллеру флешки не выделяется окно достаточного размера, а так это выглядит как какой-то глупый баг.

Беру родное ПЗУ, добавляю по подозрительному адресу 16 байт мусора — не работает, хотя ту часть памяти мы вообще читать не должны, ведь родной войсбанк существенно короче!

И почти тут же натыкаюсь на странный кусок кода, которого в прошивке Pocket Miku не было. Судя по всему, он проверяет, есть ли по этому самому подозрительному адресу какие-то данные, и если есть — инициализирует USB и вешает систему.

С учётом, что у нас одно ядро и один поток — где-то тут всё и закончится

Обидно, могли бы хоть рядом пасхалочку оставить :-(

Патчим эту проверку и ещё пару похожих, заложенных по разным адресам в разных функциях — и ура, играет, работает!

❯ Собираем в MIDI-модуль


Во-первых, раз уж у нас теперь есть два голоса, почему бы не иметь возможность их переключать? Благо, это делается очень просто — так как линия Chip Select у флешки инвертированная (активна при лог. «0»), то достаточно лишь двух элементов ИЛИ и одного инвертера, чтобы получить схему, переключающую флешки по необходимости:

Сигнал ALT_ROM выбирает, используется основное или дополнительное ПЗУ, а остальные идут напрямую на шину самого модуля:

После переключения ПЗУ просто дёргаем RESET у модуля и он после перезагрузки начнёт петь другим голосом.

Во-вторых повесим на GPIO модуля светодиоды, раз уж они были на родном шилде. Правда не то в даташите ошибка, не то я криво читал — выходы GPIO там Active Low, поэтому в моём включении они постоянно горят и периодически гаснут, а не наоборот.

Так делать не надо, делать надо не так!

Добавляем операционник для того, чтоб привести звук хоть немного к линейному уровню, обыкновенную схему MIDI-входа как в прошлый раз (заменяя каждый логический буфер на пару инверторов, благо их у нас тут в достатке), и ардуину с экранчиком чтобы ловить SysEx'ы переключения ПЗУ и заодно отображать находящиеся в данный момент в ОЗУ фонемы.

Охапку дров, и плов готов!

Раскидываем на макетке, раунд 2:

Кажется, стоило наконец уже зарегистрироваться на JLC PCB...

Без аудиофильских конденсаторов звучать будет точно так же, но радости никакой не принесёт

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

До кучи добавился USB-хаб, чтобы можно было прошивать оба чипа без разборки устройства

И вуаля, готово!

❯ Программирование музыки


Теперь нужно написать хотя бы один MIDI-файл, чтобы на этом всём слушать. Из всего обширного списка дополнительных команд нас интересуют только несколько:

F0 43 79 09 10 07 00 aa bb cc F7: отключение звука для определённых каналов:

  • Биты в позициях aa, bb, cc отключают воспроизведение части каналов

  • Например, паттерн 7E 7F 7F оставит только первый канал, что нам и нужно для использования модуля чисто для синтеза голоса без остальных MIDI-инструментов.


F0 43 79 09 01 01 00 F7: перезагружает модуль (например, после переключения ПЗУ).
F0 43 79 09 10 04 nn F7: выставляет режим работы GPIO:

  • nn = 00: выключить

  • nn = 01: ритм-визуализатор (вокал, бочка, средний, тарелки)

  • nn = 02: реакция на note-on/note-off в 1-4 каналах

  • nn = 03: визуализатор первого канала по нотам

  • nn = 04: ручная установка в виде битовой маски командой F0 43 79 09 03 00 xx F7


F0 43 79 09 00 50 10 dd dd ... F7: установить список фонем (слова песни):

  • Где dd: байты null-терминированной CSV-строки с фонемами в ASCII

  • Фонемы можно найти в документации по системе команд YMW820 на 34 странице

  • Их можно загружать и через NRPN-сообщения, но пока что обойдёмся без этого


В остальном по эффектам и прочему модуль по большому счёту совместим с системой команд Yamaha XG.

У первого MIDI-канала нельзя сменить инструмент — именно там и находится вокал. После задания фонем через SysEx-команду, каждое Note On событие в первом канале сдвигает указатель в буфере фонем на следующую, а после последней — перематывает его на начало. Проще говоря, одна нота — один слог, и так в цикле, пока не загрузишь новую строку в память :-)

Воспользуемся этим, чтобы отлавливать команды установки фонем ардуиной и отображать скроллер со «словами» на дисплее. До кучи добавим и пару своих команд:

F0 7B 7F F7: «жёсткий» сброс чипа, на случай если тот зависнет :-)
F0 7B 00 0r F7: выбор ПЗУ голоса:

  • r=0 — основной, r=1 — вторичный


F0 7B 01 F7: установить текущий голос по умолчанию.
F0 7B 02 tt dd dd... 00 [xx xx xx ... 00] F7: показать сообщение на экране:

  • tt — время в секундах

  • dd dd… 00 — нуль-терминированная верхняя строка экрана

  • xx xx… 00 — опциональная нуль-терминированная нижняя строка экрана


После пары часов мучений (и двух-трёх месяцев спровоцированной ими прокрастинации) выяснилось, что ноты, написанные в стиле караоке, уж совсем не совпадают с количеством фонем в песне, а выравнивать их, не видя, на каком месте строка ломается, практически невозможно.

Поэтому берём поллитру, вспоминаем MFC и патчим такой замечательный редактор, как Sekaiju, на отрисовку слогов под нотами:

Если разваливается, то хотя бы сразу видно, где

Дорисовываем остаток совы… В смысле, дописываем аранжировку в Sekaiju, и потом доводим эффектами в Yamaha XGWorks. Попутно я докинул ещё пару партий в формате AYYMIDI (из прошлой статьи), написав их в ProTracker.

Помимо прочего, нашлось ещё несколько подводных камней:

Как и обещал производитель, поёт NSX-1 ну очень медленно. Даже в такой медленной песне есть места, где приходилось делать рокировочки таймингов десятки раз, чтобы получить более-менее вменяемый саунд. Какой-нибудь Intense Voice уж точно по битрейту не пролезет, разве что интерливом в несколько чипов через управляемый микшер :-)

По ощущениям, использование NSX-1 для всех инструментов ещё сильнее замедляет воспроизведение голоса, поэтому лучше использовать его чисто для вокала, даром что по качеству звучания его даже Yamaha MU50 уделывает с лихвой. Сделать это можно последовательностью команд:

  • F0 43 79 09 10 07 00 7E 7F 7F F7: NSX Channel Mute, оставляем только 1 канал.

  • GM Volume Ch1 = 127: выставляем громкость вокала на максимум.

  • XG Volume Ch1 = 0: отключаем первый канал на MU50. За счёт того, что NSX игнорирует многие XG команды на первом канале, его громкость останется на 127.


Из-за того, что Vendor ID у NSX и у серии MU совпадает, использовать тот же MU50 как RS232-MIDI интерфейс не получилось — слишком сильно задерживаются SysEx'ы задания фонем и слова начинают съезжать относительно нот.

Воспроизведение отдельных нот напоминает скорее чтение текста, чем пение, поэтому Note Off каждой ноты вокала лучше ставить чуть дальше, чем Note On следующей за ней:

  • Это создаёт проблемы, когда несколько слогов идут одним тоном, что нужно учитывать при написании аранжировки.

  • Однако, эту особенность можно использовать для реализации удвоения (っ、напр. в демо-песне для этой статьи слово わらった [waratta] чаще всего записано путём двух «наложенных» нот [wa] [ra], затем Note Off второй, и только после этого «впритык» Note On для [ta].

  • Ни сам чип, ни генератор команд eVo Phonetic не поддерживают удвоение согласных, поэтому единственный другой способ — продублировать слог целиком, но обрезать ноту так, чтобы чип «не успел» дойти до гласной. Иногда это работает, но часто звучит странно и упирается в проблему скорости из п. 1.


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

Для конвертации файлов под аппаратные плееры многие пользуются программной MIDI Formatter — оказалось, она перемешивает местами каналы, поэтому для композиций написанных под NSX-1 её использовать нельзя. Впрочем, конвертировать файлы в SMF0 можно через диалог «Сохранить как» в программе XGWorks.

❯ Демо!


Не буду погружать во все остальные тонкости написания MIDI-аранжировок, ведь статья получилась и так слишком длинной — лучше дам послушать итоговый результат :-)

Первым делом, конечно же, была запрограммирована классика жанра: malo — Hajimete no Oto (The First Sound)

❯ И второе!



Казалось бы, одним треком можно было и ограничиться — голос слышно, вроде как будто даже поёт, всё хорошо. Но хотелось всё-таки выжать из конструкции побольше музыкальности, а не просто мелодию в трёх дорожках… Поэтому статья была отложена больше чем на полгода, пока я допишу аранжировку той самой песни Shabon — как дань уважения всей этой культуре, на удивление тёплоламповому вопреки всем событиям 2020 году, да и в целом, потому что душа просила что-то поинтереснее :-)

Впрочем, чип оказался всё же слишком сложным, поэтому звучания прямо один к одному не вышло.

❯ А компот?


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

Если вдруг кто-то имеет такой чип и захочет повторить конструкцию — могу, конечно, причесать всё и расшарить, но пока что вот так ¯\_(ツ)_/¯

  • Прошивка — тут

  • Схема, почти соответствующая правде — тут

  • Миди-файлы для тестов и самих треков — тут

  • Больше интересных статей в нашем блоге на Хабре. Недорогие сервера для ваших проектов — здесь.

Показать полностью 21 4
68

Постройка двигателя мотосерфа | или 5 стадий принятия неизбежного

Автор: georgy_zenker

Оригинальный материал

Исходные данные

Не каждая инженерная разработка имеет экономическую целесообразность.
Приведенный ниже пример — полностью подтверждает это утверждение.

1. Отрицание (ну не может это стоить так дорого).


В 2017 году мне на глаза попался двигатель мотосерфа (JetSurf).

Узнав его стоимость в 4000 евро я немного опешил и для себя решил, что таких денег он не стоит и я точно смогу сделать дешевле (о как же я ошибался).

Благо, образец для изучения у меня был. Но это не отменяло того факта, что из всех запчастей, купить можно было только карбюратор, а все остальное надо было либо изобретать самому, либо искать максимально похожие аналоги.

Коленвал, цилиндр и поршень удалось подобрать от ямахи аэрокс, картер пришлось проектировать самим, т.к. купить подобный было нереально.

Первая попытка отлить заготовку, обернулась провалом (стенка не пролилась).

Отлитая половинка картера с непролитой стенкой (в мусор)

На второй итерации была несколько доработана модель и картер ушел на фрезеровку, т.к еще раз заморачиваться с литейкой желания не было.

Стоимость фрезеровки составила 45 000 руб, при учете максимального упрощения модели. Из-за чего картер получился брутальным и угловатым. Почему-то в тот момент цена изготовления меня совершенно не смутила, а зря.

Фрезерованный картер

Коленвал мотора тоже пришлось дорабатывать, т.к. не получилось найти подходящую обгонную муфту для привода стартера.

Потратив, еще одну стоимость коленвала на его доработку — начали собирать мотор.

На этапе тестовой сборки стало понятно, что цилиндр стоит низко и надо поставить еще и дистанционный фланец толщиной 7 мм. Обильно промазав этот металлический бутерброд красным герметиком, мы были готовы к первому запуску.

Запуск проводили на своей электрике, собранной на основе китайского зажигания, и как это не странно, мотор завелся.

«Двигатель» в сборе

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

Прикидка компонентов на нижней половине корпуса

Примерно через 3 недели доска вышла на воду и, естественно, никуда не поехала, мотор просто глох, как только водомет погружался в воду.

К слову, водомет мы брали оригинальный, т.к. нужно было быть уверенным в работоспособности хотя бы одного агрегата.

Пушка — гонка (нет)

2. Гнев.


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

Сварив бак, мы раз за разом стали получать разные значения — т.е. в баке обороты поднимались до 7000-8000 об/мин (завоздушивание водомета), а на воде доска снова никуда не ехала.

Испытательный бак

Возникло предположение, что надо менять высоту окон, т.к. на двухтактном двигателе от их положения сильно зависит момент мотора (а момента мотору как раз и не хватает).

Не долго думая, была выточена гильза и вставлена в цилиндр Ямахи. Естественно, это конструкция тоже никуда не поехала, но вектор был выбран правильно: мотор перестал глохнуть и просто не развивал нужные обороты.

Чертеж гильзы

В конце первого года данной эпопеи мы решили проектировать и отливать свой цилиндр, т.к. по другому проблема не решалась.

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

Первый отлитый цилиндр

3. Торг (ни одно, так другое сработает).


Нас спасет МДО — микро дуговое оксидирование, по крайней мере я так думал, смотря презентацию работы этого покрытия в спортивных четырёхтактных моторах. Вроде бы тот же никасил — но покрытие более похоже на керамику, и не поддается хонингованию (нанесению мелких рисок для удержания масла на поверхности цилиндра)

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

Покрытие МДО

Надо сказать, что снова наступила зима, и у нас не оставалось другого выбора как самим сварить испытательный бассейн, т.к. испытательный бак себя показал плохо, и все водоемы замерли, а испытания надо было продолжать.

3,5*1,2 метра (с обратным каналом)

Мотор с цилиндром покрытым МДО, завелся с пол оборота, и доска наконец-то начала набирать обороты и выдала тягу в 65 кг, что соответствовало показателям конкурентов.

Вода от водомета попадает в обратный канал, проходит круг и сбрасывается на нос доски. Доска на фото электрическая, но сути дела не меняет.

Опять показалось, что вот он успех, но мотор спустя 20 минут заклинил. После разборки внутри было обнаружено много керамической муки, которая съела все подшипники коленвала, поршень и цилиндр.

Съеденное кольцо.

Стало понятно, что надо продолжать поиски никасиля.

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

Через 3 недели иду в СДЭК и все так же, без особых надежд, разворачиваю упаковку и вижу настоящий никасиль, да еще и с хонингованием. Оптимизм снова возвращается.

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

Цилиндры испытывали уже на моторах JS, т.к. картер и коленвал ушли в мусор.

Цилиндр отработали несколько часов в ванне без нареканий, потом пришла весна и испытания переместились на открытую воду — где все так же работало нормально.

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

Отлитый цилиндр (нанесен никосиль, этап перед хонингованием).

4. Депрессия.


Это был успех, но пористость и цена литья не давали покоя.

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

Такой вундерфафлей стал металлический (SLM) 3Д принтер, на котором мы сделали попытку распечатать еще пару цилиндров для картинга. Т.к. был заказчик готовый их оплатить.

Цилиндры после печати.

Поверхность получилась максимально однородная и никасилирование получилось идеальное.

Картинговый цилиндр (никосилирование, хон выполнен).

Несколько месяцев эксплуатации проблем не выявили, но как мы не крутили и не старалась уменьшить объем материла — себестоимость нашего цилиндра равнялась 33 000 руб, ни о какой конкуренции тут и говорить не приходится.

Примерна такая же картина была с изготовлением картера и системы привода стартера. Т.е. на производстве своего мотора можно было ставить крест.

Хорошо бы это было понять 2 года назад.

5. Принятие.


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

Расчетная цена получалась конкурентоспособной, и мы решили начать.

Ожидаемо в металлолом пошли первые два образца: в первом случае после термообработки заготовку повело, во втором случае была проблема с качеством с обработки шейки обгонной муфты и только 3-я итерация получилась без нареканий.

Красиво, но все пошло в металлолом.

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

Это приводит ко второму вопросу: куда сбывать товар при очень маленьком рынке? Испытания колена были завершены в конце 2021 год, поэтому ни о каких рынках сбыта кроме РФ — речи уже не шло.

Вывод:


Не всегда надо доказывать себе, что «я могу» и доводить проект до реализации во что бы то ни стало, не обращая внимания на затраты, будущую себестоимость и рынок сбыта. Иногда можно и нужно забить.

Больше интересных статей в нашем блоге на Хабре. Недорогие сервера для ваших проектов — здесь.

Показать полностью 19
29

Линукс в четыре руки. Сетевая OpenArena на двух Nokia N900

Автор: MechNIX

Оригинальный материал


Замечательный аппарат Nokia N900 (в контексте материала — просто Nokia), рассматривался во множестве статей, а в разрезе сетевых игр — информации не очень много. Мне показалось интересным испытать Nokia именно в этом аспекте. В данной статье сделаем акцент на мультиплеер OpenArena — игре, основанной на движке Quake 3. Рассмотрим этапы настройки живых (на 2023 год) репозиториев, получения root-доступа к телефону, запуск игры и сам геймплей. Под катом фото и видео Nokia N900 c шутером OpenArena. Бонусом — увидим DOOM (порт PrBOOM), куда же без него… а так же рассмотрим странное «Q-дерево».

Один в поле не воин, а на двух самураях вполне можно виртуально соперничать.
Добро пожаловать...

Содержание:

  • Введение;

  • Инсталляция из репов, настройка сети;

  • Получения root-доступа по ssh;

  • Инсталляция шутера OpenArena;

  • Управление и геймплей OpenArena;

  • DOOM;

  • Заключение.

❯ Введение


На миг отвлечемся от серьёзности дерева портов и начнем с несерьёзного предисловия. Мне было нужно наглядно продемонстрировать суть затеи, а так как 4-х рук у меня нет, пришлось смастерить квейковое дерево или «Q-дерево». Это и есть наш шуточный демонстрационный стенд, изображенный в заголовке, дальше будет детальное изображение.

Nokia N900, аппарат, имеющий в качестве основной операционной системы OS Maemo, основанной на Debian Linux, «заточенный» на работу в портативных носимых гаджетах. Соответственно, менеджер пакетов, который будет использоваться apt-get. Самое сложное было разыскать живые репозитории. Методом тестов, проб и ошибок удалось составить свой файлик (кому он нужен для повторения эксперимента, пишите в комментариях, скину). На момент написания статьи все репозитории живые.

❯ Инсталляция из репов, настройка сети


Понятие «репозитарий» звучит красиво, но не правильно, а если правильно, то «репозиторий», но это неестественно и можно сломать язык, поэтому далее будем пользоваться жаргонным «репа», оно привычней.

Итак, файл с репами находится по следующему пути:

/etc/apt/sources.list.d/

После его редактирования необходимо выполнить команду:

apt-get update

Чтобы обеспечить возможность играть в сетевую игру, необходимо чтобы оба телефона были подключены к одной точке доступа WI-FI и находились в одной локальной сети. Все манипуляции проводятся одинаково, на обоих смартфонах. Так выглядят сетевые параметры после подключения.

❯ Получения root-доступа по ssh


Перед установкой OpenArena делаем две подготовительные операции.

Инсталлируем пакет rootsh, позволяющий производить манипуляции от имени привилегированного пользователя-root. Это не хак и не джейл, а штатная процедура получения root-доступа к устройству. Отмечу, что все действия в этой статье проводятся от имени root. Правила безопасности не зря твердят нам не вести ВСЕ действия от привилегированного пользователя, но в данном случае у нас эксперимент, повредить систему не страшно, секретных данных тоже нет. Но все же, от root работать нужно осознанно.

В консоли запустим «sudo gainroot» и установим пакет «rootsh».

Для комфорта настройки установим «openssh-server», позволяющий реализовать удаленный доступ к Nokia по протоколу ssh, и будем управлять от имени «root».

❯ Инсталляция шутера OpenArena


На скриншоте — необходимые пакеты для установки игры:

Сама инсталляция тривиальна.

Установка самого игрового «движка»:

apt-get install openarena

Установка данных и карт:

apt-get install openarena-data

Настройка сетевых параметров в интерфейсе самой игры производится в соответствии с принципом: клиент-сервер (в роли сервера-один телефон N900, в роли клиента-другой). Настройка в интерфейсе игры отражена в видеоролике ниже (на 2:42 видно настройку).

Настройка мультиплеера:

❯ Управление и геймплей OpenArena


Вот как выглядит демонстрационный стенд (Q-дерево):

Спешу поделиться результатом запущенного шутера.

Управление ведется акселерометром, либо кнопками аппаратной клавиатуры. Удалось уловить стандартное в частности для шутеров управление клавишами WASD, прыжок-space, огонь-CTRL (не стандартное), переключение и выбор оружия -1,2,3,4. В процессе игры можно переговариваться текстовыми сообщениями с оппонентом (say).

Игра вызывает весьма положительные ощущения даже в 2023 году. Напомню, что речь идет об аппарате 2009 года. Привык видеть прекрасное и в малом — у меня и игра f29 retaliator (симулятор самолета) под DOS вызывает радость, в режиме HEAD-to-HEAD, даже через нуль-модемный кабель. :) Возвращаясь к рассмотренной OpenArena, скажу: торможений, зависаний, лагов, в целом не отмечено, графика летает и сверкает. В процессе игры, в правом верхнем углу экрана виден счетчик кадров в секунду — FPS. Гляньте, пожалуйста, ролики.

Демонстрация 1:

Демонстрация 2:

❯ DOOM


Следуя челленджу «установи DOOM на это устройство», я не мог этого не сделать. Порт DOOM называется PrBOOM. Установка производится в одну команду и не вызывает сложности.

❯ Заключение


Чем можно завершить статью? Положительно, описанный порт OpenArena — не поделка, полноценный, серьёзный шутер. Играбельно? Да. Не глючит? Да. Приносит радость? Да! Ну и славно!

Прошу поделиться опытом и комментариями относительно подобных игры для OS Maemo, это интересно. :)

Благодарю за внимание. :)

Еще больше новостей и статей в нашем блоге Timeweb Cloud.

Показать полностью 9 4
162

Декапсуляция микросхем в домашних условиях

Автор: igor27065

Оригинальный материал

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

Для чего это нужно


Еще вчера изготовители электронных устройств небольших серий экономили на закупках компонентов, зачастую нарываясь на контрафакт. Все мы дружно обвиняли таких в жадности и осуждали. Сегодня обстоятельства резко поменялись. Теперь приходится использовать то, что удалось найти, и цена далеко не главное. Возможно метод, который я здесь опишу, поможет избежать применения явного контрафакта и напрасных трат на монтаж и демонтаж.
Метод оценки маркировки, перемаркировки, геометрии и качества корпуса показал свою неэффективность на входном контроле. Отбраковать можно только совсем уж явную подделку. Но если пираты в теме и немного потрудятся, то для выявления необходимо переходить к объемным электрическим тестам.

Итак, первый этап: освобождение кристалла из корпуса микросхемы. Сразу скажу, метод этот не позволит сохранить разварку. Главное — рассмотреть кристалл и в идеале сравнить его с заведомо подлинным от производителя. Известный лабораторный способ — это применение химической декапсуляции. Стоимость систем колеблется около сотни тысяч долларов. Практически все они закрытого типа. Работать на них необходимо в специализированной лаборатории, и, соответственно, иметь в штате химика-лаборанта.

Способ, который применяю я, не требует кислот. Процесс заключается в вываривании микросхемы при высокой температуре в расплавленной канифоли. От микросхемы отделяем выводы и вместе с небольшим кусочком канифоли кладем в пробирку. Пробирку закрепляем в импровизированном штативе. Для нагрева я использовал паяльный фен на максимальной температуре. Процесс длительный и нудный, может занимать несколько часов.

Канифоль использую самую обычную, какая попадется:


В пробирке видна накрошенная канифоль и обезноженная микросхема:


Вот так это выглядит во время варки:

Есть еще момент, на который стоит обратить внимание: пары канифоли со временем осядут на всех окружающих предметах. Плюс запах самой жженной канифоли не такой уж приятный. Чтобы избавиться от паров, делаем простейший фильтр, по типу водяного затвора. В пробирку вставляю силиконовый шланг, конец которого опускаем в стакан.

Ниже видно, как темнеет канифоль с течением времени. Это растворяется корпус.

Определить в процессе варки, что корпус растворился, довольно сложно. Жидкость становится густой и непрозрачной. Приходилось несколько раз выплескивать содержимое на чистый лист бумаги, чтобы что-то разглядеть. По окончании все, что было в пробирке на чистом белом листке, выглядит так:

Важно не потерять кристалл. Иногда их размеры бывают меньше миллиметра. Заметить очень сложно.

Здесь кристалл довольно приличных размеров. Его видно:

Вторая часть — инструментальная. Как теперь все это рассмотреть и изучить.
Обыкновенные биологические микроскопы не подходят для этих целей. Расскажу чуть поподробней, так как я был абсолютно не в теме, и ошибочно купил неплохой (как мне казалось) микроскоп примерно за тысячу долларов. В цену вошла и матрица на 3 Мпс, с насадкой для окуляра. Я, конечно, знал, что биологические микроскопы работают в проникающем свете, но предполагал сделать светодиодную подсветку вокруг объектива, что даст мне возможность подсвечивать кристалл. К сожалению, нет. Это спасает на объективах х10 и еще как-то на х20, но дальше — все. А этого увеличения не хватает, х40 и х100 уже применять невозможно. Качественных снимков добиться очень сложно. Подать удачно свет занимает уйму времени. Одним словом, занятие неблагодарное.

О металлографическом микроскопе на тот момент мне ничего не было известно. И в магазинах оптики менеджеры ничего посоветовать не могли (скорее всего и сами не знали). Невозможность использования биологического микроскопа заставила изучать тему более углубленно. Отпугивала стоимость этих аппаратов. Но выручила, как всегда, нестареющая советская промышленность, которая производила достойные микроскопы в массовых количествах. На сегодняшний день стоимость отечественного металлографического микроскопа в неплохом рабочем состоянии может составить меньше 10 тысяч рублей. Вот несколько массовых марок: МИМ-6, МИМ-7, МИМ-8, МИМ-9 и еще очень много разных. Размеры от компактных до крупных. Все их можно приспособить для нашей цели. Нужна только камера с насадкой, которую можно погружать вместо окуляра. Я приобрел себе ММУ-1 за 9 тыс. Подсветка и микровинт работают.

Главное отличие всех металлографических микроскопов от биологических — конструкция объективов. Свет от источника отражается от зеркала-призмы, проходит через объектив, попадает на поверхность кристалла и возвращается через этот же объектив. Этот отраженный свет мы и видим в окуляре. Схема типового металлографического микроскопа ниже.


Третья часть — аналитическая.
Подаем питание на источник света, подбираем объектив, наводим резкость и…

На фото фрагмент кристалла преобразователя FTDI232RL. Ввиду своих больших размеров целиком в объектив не поместился. Микросхема очень удачная для анализа. Производитель не поскромничал и поставил на кристалле свои логотипы. Чем снял все вопросы при анализе на контрафакт.

На поддельной микросхеме такого логотипа нет. По сути, там нет никаких надписей, поэтому приводить фото не буду — ничего интересного.

Некоторые из декапсулированных микросхем я выкладываю на этой странице с разрешения хозяев-заказчиков. Указываю фото корпуса микросхемы и присутствующих логотипов и литер. Часто это позволяет сделать вывод об оригинальности происхождения. А вот с точным наименованием сложнее. Были случаи, когда оригинальную микросхему перемаркировывали и выдавали за более дорогую версию. Самый правильный вариант — сравнить оригинальный кристалл, в котором есть стопроцентная уверенность, с испытуемым вариантом.

Несколько слов про разварку. На одной из выставок «Экспоцентра» привлек внимание стенд с лазерным станком. В качестве эксперимента оператор согласился попробовать аккуратно снять верхний слой до кристалла. Ниже фото того, что получилось. Как видно, структура выводов и разварка при этом варианте декапсуляции сохраняется.

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

На фото лазер уже скреплен с экструдером:


Еще больше новостей и статей в нашем блоге Timeweb Cloud.

Показать полностью 13 2
29

Генерируем рецепты блюд на JS и цепях Маркова

Автор: Iskorkin

Оригинальный материал

Когда-то меня очень радовал один паблик в соцсети ВК. По заявлениям администрации нейросеть генерировала рецепты, которые и составляли 99% контента. Вероятно, действительно это была простенькая нейросеть вроде RNN или LSTM. К сожалению, последний пост в паблике датирован 2019 годом, а моя тяга к изысканным блюдам не угасла, поэтому было решено сделать генератор рецептов на JS и цепях Маркова. Почему не повторить эксперимент с более продвинутой доступной нейросетью вроде GPT-2? Потому что для ее обучения требуется достаточно много времени, ресурсов и данных.

Чтобы генерировать рецепты, мы будем использовать цепи Маркова — математическую модель, которая может предсказывать следующий элемент в последовательности на основе предыдущих. Для начала нам нужно собрать корпус данных — набор рецептов на определенную кухню. Затем мы обучим цепь Маркова на этом корпусе данных и будем генерировать новые рецепты на основе полученной модели. Да, про цепи Маркова было достаточно много статей и на Хабре, и вне его. Но меня восхищает простота реализации этого алгоритма, а результаты генерации веселят. Мы будем использовать простую реализацию, чтобы получить быстрый результат, а в конце статьи будут приведены лучшие из сгенерированных рецептов.

Готовим корпус

Когда-то у меня уже был собран датасет на 3000~ строк из кучи рецептов. Если мне не изменяет память, это результат парсинга одной из кулинарных групп в ВК. В txt файле все рецепты разделены пустыми строками.

Синхронно считаем данные, приведем к строке, и, разделим ее на массив абзацев по пустым строкам с помощью \n\n.

Корпус готов!

Разбираемся с Марковым

Как и упоминалось в введении, будем использовать математическую модель цепей Маркова. Это модель, которая предсказывает следующий элемент в последовательности на основе предыдущих. В контексте генерации рецептов на основе цепей Маркова мы будем использовать модель, которая будет предсказывать следующее слово в рецепте на основе предыдущих слов. Для этого мы будем использовать статистический подход, который будет анализировать частоту встречаемости слов в корпусе данных и использовать эту информацию для генерации новых рецептов.

Для примера возьмем два заголовка, которые будут условным корпусом: “Тосты с сельдью и огурцом” и “Тосты с анчоусами и грецкими орехами”

Представим матрицу переходов для этих предложений:

Следуя этой матрице, после слова “Тосты” с вероятностью 100% будет идти “с”, а вот после “с” с вероятностью в 50% может идти либо “сельдью”, либо “анчоусами”. Очевидно, что чем больше корпус — тем больше вариантов и тем больше статистический разброс.

Реализация

Для начала соберем объект токенов в конструкторе класса генератора. Знаки препинания будут включаться в токены, а регистр букв останется оригинальным. Во-первых, это упростит токенизацию, во-вторых сделает абзацы более корректными.

Изначально tokens будет содержать ключ START для сбора стартовых слов. В процессе итеративно пройдем по всем элементам корпуса, разделив их по пробелу. Далее, работая с каждым словом по отдельности, будем добавлять их в качестве ключей в tokens, а следующее слово помещать в массив свойства этого ключа. Если же следующего слова нет, будет помещаться ключевое слово END, которое в дальнейшем будет сигнализировать генератору о том, что абзац сформирован.

Если залогировать получившийся объект tokens, он будет иметь такой вид:

Вы можете заметить, что токены могут повторяться. Мы их оставляем в таком виде, чтобы сохранить статистические вероятности. Например, после токена ‘муке’ с вероятностью в 75% будет идти ‘и’, а ‘(20’ или ‘(30’ с вероятностью в 7.5% соответственно.

Для генерации нового текста берем случайное стартовое слово. После, в цикле while, выбираем случайные слова для текущего токена и вставляем их в массив результата, пока не наткнемся на END. В конце возвращаем результат в виде строки, соеденив элементы массива пробелами.

В конце концов, можно протестировать:

Вместо заключения, отправляемся на кухню

Самые забавные на мой взгляд получившиеся результаты:

ИНГРЕДИЕНТЫ:
● оливковое масло — перемешиваем.
Для получения однородной массы.
Каждое печенье достать из черного перца
1 чайная ложка.
Готовим: Плавленый сырок нарезать и убрать форму.
В центр выложить яблоки в духовке минут на 30-40 минут до 180 градусов и разровнять в салатник.

Все мы будем добавлять муку, добавить мед — 0,5 чайной ложки соевого соуса. Даем остыть и добавляем муку.
Хорошенько перемешиваем курицу в предварительно добавить мед и я использовала замороженные ягоды, перед подачей на сметане без костей,
● лук,
● чеснок,
● оливковое масло и даем настояться 15-20 минут.
Замечательное кунжутное печенье на 15-20 минут на средней терке. Колбасу и 1 шт.
Кунжут — 3 шт, морковь натираем на пару часов или ужина. Особенно он превращается в разогретую до готовности.

💞 Салат «Венеция»
Ингредиенты:
● 350-400 г. оливок;
● 60 г. слабосоленой семги;
● 40-50 г. слабосоленой семги;
● 40-50 г. куриной тушки.

соль
ИНГРЕДИЕНТЫ:
● 1 ст. л.

Огонь нужно развести водой и потушить еще 65 минут. Подаем сырный суп с солью и морковь, покрывая весь салат.
Из яичного белка.
Приятного аппетита!

Ингредиенты:
1 банка (140 г.);
● майонез.
Приготовление:
Лук очистить от Светланы Гуаговой
Натереть рыбу сыром.
Нарезаем полукольцами луком, смазывать им гостей. Готовится торт что-то простое в духовке.
Выпекать булочки 25-30 мин до полного застывания.

Обжарить печень с картофелем, готов.
Приятного аппетита, радуйте своих близких, предлагаю попробовать приготовить и, не советую)

ИНГРЕДИЕНТЫ:
● Свежий (500г ) не суп!

Подпишись на наш блог, чтобы не пропустить новые интересные посты!

Показать полностью 9
17

Накачай Стёпочкина. Путь решения одной простой, но интересной задачи

Автор: Kopcheniy

Оригинальный материал

«Так… Теперь его надо утолщить». (Произносить голосом десантника.)

Приветствую! Творческий путь разный и у каждого свой. Кому-то помогают сложные программы, кто-то любит моделировать. Часто выручают простые бумага и карандаш. А вдохновить и помочь понять работу устройства могут самые неожиданные вещи. Это короткая заметка, в которой показываю свой путь решения простой, но интересной задачи и хочу поделиться вдохновением и позитивом.
Понадобилось мне в одном проекте получить две линии питания:

  1. -15 В 200 мА;

  2. -20 В 15 мА.

Самым интересным решением видится сделать инвертирующий преобразователь, а дополнительный выход получить с помощью зарядового насоса. Причём сделать это на одной микросхеме, а не на двух.
Мне попадалось довольно много статей про преобразователи на переключаемых конденсаторах, и везде был ключ, замыкающийся на землю, как в повышающем (boost) преобразователе:

Это сделало своё дело: мне почему-то стало казаться, что схема обязательно должна содержать именно ключ на землю.
Такое меня не очень устраивало, так как у меня уже была схема инвертирующего преобразователя для получения -15 В из +5 В. В ней нет ключа на землю, заземлена индуктивность:

Вопрос в том, получится ли добавить к ней зарядовый насос и получить дополнительный выход с более высоким напряжением? Или придётся искать другое решение? Забежим вперёд: получится.
В какой-то момент, мне попалась отличная аппнота (Discrete Charge Pump Design slva398a), описывающая подобную схему:

Когда ключ замкнут, VSW = 0 В и летающий конденсатор С1 через диод D1 заряжается до VS – VD1. Когда ключ разомкнут, напряжение переключаемого узла поднимается до VS + VD, поднимая С1 (который уже заряжен до VS – VD1) ещё на VS + VD (VD – падение напряжения на диоде D). В результате накопительный конденсатор С2 заряжается до

2VS + VD – VD1 – VD2 = 2VS – VD

через диод D2 (предполагается, что VD = VD1 = VD2 и пренебрегаем потерями в диодах, в конденсаторе С1 и в токоограничивающем резисторе R1). Диод D2 проводит только когда ключ разомкнут, поэтому выходной конденсатор С2 должен обеспечить требуемый ток нагрузки в течение этого периода (off-time).
После такого ясного объяснения руки зачесались порисовать и помоделировать что-то похожее, но более подходящее для нашего случая.
Пробуем по аналогии:

Опа! В узле Vdd есть повышенное напряжение. Остаётся сливать его через клапан в какую-то ёмкость.
Позже я понял, что всё что нужно у нас есть: и узел Vsw с импульсами напряжения, и летающий черпак конденсатор, и бадья. Всё как в типичном зарядовом насосе.

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

Эти черновые и хаотичные наброски делались параллельно с моделированием. То, что было ошибочно представлено или не замечено на бумаге, прояснило моделирование.

Мне эта схема видится так:


Когда крышка S1 кастрюли V2 открыта, ложка С2 заряжается кашей десантной через десантника D2.

При закрытии кастрюли ложка с кашей поднимается над уровнем земли и с помощью десантника D3 разряжается в Стёпочкина:

Стараниями товарищей Стёпочкин «становится человеком» и может выполнять полезную работу…

Добавим деталей в схему, уточним номиналы:


Резистор Rcl ограничивает поток каши, а то бывает и такое:

Без этого резистора будут значительные броски тока:


С помощью линейного стабилизатора на выходе напряжение понижается до нужных -20 В.
И вот у нас уже практически готовое устройство – можно собирать прототип. Чем мы и займёмся. Надеюсь, дымок не пойдёт и схема взлетит.
Думаю, такая схема не новая, но мне она не попадалась и она новая для меня. Моделирование помогло легко и быстро проверить идеи, а Стёпочкин – лучше понять схему и вдохновиться. Моделируйте, творите и не забывайте про детство бумагу и простой карандаш. До новых встреч!
З.Ы. Сколько Стёпочкина не корми, он всё равно в лес смотрит вверх летит. И всё таки летать вверх – это круто!

Подпишись на наш блог, чтобы не пропустить новые интересные посты!

Показать полностью 19
190

На грани отвала eMMC: Устанавливаем Android на SD-карту на любом смартфоне/планшете!

Автор: bodyawm

Оригинальный материал

Дополнительные фото в
источнике материала.

К сожалению, китайские производители бюджетных девайсов всё туже и туже затягивают пояса для уменьшения конечной цены девайсов. Попытки сэкономить сказываются не только на качестве дисплеев, пластиковых тачскринах, слабых процессорах, но и на памяти. Причём последнее время в устройства до 5-6 тысяч рублей ставят откровенно неликвидную и отбракованную память брендов Foresee и Barum, которая может прослужить как пару месяцев, так и 5 лет. Сегодня мы с вами: узнаем небольшую историю «затягивания» поясов китайцами, во всех подробностях перенесём Android на MicroSD-флэшку (гайд применим для любых производителей и чипсетов), посмотрим, как будет работать Android с такого накопителя и подведем итоги. Интересно? Тогда добро пожаловать!


❯ Предыстория


Пожалуй, стоит отметить, что данная статья является ремейком одной из моих самых первый статей, которую я написал еще летом 2022 года. На тот момент я был совсем неопытным автором и написал достаточно скомканный и не подробный текст, однако понимая, что такой гайд может быть полезен многим, я решил переписать его, снабдив большим количеством скриншотов и пояснений к каждому пункту процесса. В действиях описанных ниже нет ничего сложного, а перенести Android таким образом можно почти на любом устройстве (MTK, Spreadtrum/UniSoc, Qualcomm, Kirin, Exynos).

На самом деле, китайские производители и импортеры в РФ практически всё время пытаются забить ультра-бюджетный сегмент гаджетов различными дешевыми смартфонами и планшетами. До 5.000 рублей можно легко купить 10" планшет или 5" смартфон на относительно свежих версиях Android Go. Подавляющее число девайсов работает на весьма известном чипсете — MediaTek MT6580, 4х-ядерный чипсет аж 7 летней давности, финальная форма эволюции очень неплохого на своё время MT6582, а в качестве памяти используются eMCP (eMCP — чип, сочетающий одновременно кристалл ОЗУ и ПЗУ с общей подложкой) модули с 1гб DDR3 ОЗУ и 8гб ПЗУ. Немудрено, что таких характеристик на 2023 год не просто мало, а очень мало: смартфон из коробки не потянет ни онлайн-банкинг (Сбер, привет тебе с твоим тяжелющим приложением. Запилите лайт версию хотя-бы. Тинькофф/Альфа скорее всего в те же ворота), ни современные игрушки, ни даже клиент ВКонтакте или Telegram! Смартфоны откровенно позиционируются производителями как девайсы начального класса, которые подойдут в роли смарт-звонилки с возможностями что-то загуглить при необходимости. В них даже LTE нет, только 3G, который потихоньку в МСК начинают сворачивать.

Почти всё выше написанное применяется и к похожим смартфонам на Ali до 4.000 рублей. То же железо, разве что могут сделать в дизайне свежего флагмана с большим дисплеем неплохого качества. Чип практически 8 летней давности… в 2023… что-то здесь не то, да? В 2013 году выходило просто кучу девайсов за те же 2-3 тысячи рублей (примерно как сейчас 4-5 тысячи рублей), которые работали на очень свежих и бодрых MT6572/MT6577 в те годы. То есть, чипсет брался по году выпуска или чуть-чуть старше и все эти «мегафоны логины», «билайн смарты» легко тянули банки, оф. клиенты соц. сетей и мессенджеры. Но видимо MediaTek изначально сделала огромные заказы на 6580, захотев отнять рынок ультрабюджетных девайсов у Spreadtrum. И таки да, план работает, устройства на 6580 до сих пор продолжают выходить, с одними и теми же чипсетами, одними и теми же чипами памяти и кое-где даже схожими платами (все они наследуются от одной референсной платы). И если 5-6 лет назад в качестве самой дешевой памяти использовали eMCP от Hynix, которая была вполне неплохой: у меня многие девайсы с ней до сих пор живут и здравствуют, то сейчас используется некая Barum и Foresee. Ни по маркировке, ни по CID ничего официального найти не получается, что даёт нам возможность предположить, что это просто перемаркированная бракованная память от Hynix/Samsung с перебитым CID.

На eMMC обычно есть JTAG-поинты, а на заводах их наверняка проверяют на кол-во бэдблоков и перезаписываемость. Лично мне кажется, что сотрудники условного Hynix просто за «дешман» перепродают полуживые eMCP модули производителям смартфонов, а те их ставят в свои смартфоны. Ведь хотя-бы месяц-два они походить должны! Вышенаписанное касается только ПЗУ, ОЗУ бракованную я не видел никогда.

Сегодняшним нашим героем станет некий Xgody Y20 — в своё время довольно популярная модель-«лопата» на AliExpress, которую я купил на «сдачу» с покупки свеженькой GTX1050. Смартфон я приобрел за 4.000 рублей, за такие деньги производитель обещал весьма неплохой набор характеристик: 6580, Android 5.1 (в 2018 то году!), 1гб ОЗУ (здесь наврал) и аж 6 дюймовый IPS дисплей с разрешением 480x800.

На своё время, смартфон был в целом неплох за свою цену нового девайса — 5.1 не особо много ресурсов кушает, там можно было поиграть и в NFS Most Wanted, и в оф. клиенте ВК посидеть, пока он ещё не разжирел, и просто пользоваться «на повседнев». Для меня он имеет особое значение, поскольку это первый смартфон, который я купил на первую лично заработанные 400$, когда в 16-17 лет запилил гиперкеж на юнити для своего товарища. Теперь я храню его как память, вместе с родной коробочкой, но его работоспособность под сомнением…

Причем я нашел страницу производителя: Shenzhen Xin Sheng Shang Techonology. XGody — похоже ее личный бренд.

❯ Немного теории


В своё время, я не сделал дамп прошивки с этого девайса, а их выходило по меньшей мере 2-3 ревизии. Прошивка в сети только для одной ревизии, поэтому когда моя система окончательно захламилась, я перепрошил его, не снимая галочки с preloader. На устройствах с MediaTek, Preloader помимо загрузки вторичного загрузчика lk, инициализирует контроллер ОЗУ и ПЗУ. Список поддерживаемых модулей eMCP хранится в виде таблицы CID -> настройки ОЗУ. Именно поэтому если прошить «левый» preloader мы будем получать постоянную ошибку в SP Flash Tool — смартфон банально не сможет инициализировать ОЗУ (DRAM_FAILED)! Если производитель захотел заменить eMMC на определенной ревизии, он добавляет в csv параметры ОЗУ eMCP модуля, его CID и пересобирает Preloader. Дошло до того, что прелоадеры сортируют по номеру сборки (preloader_wegc, preloader_magc, preloader_gemini и т. п.), а поддерживаемые CID вычитывают спец. софтом для подбора подходящего preloader'а!

Кто бы сомневался, что китайцы в один и тот же смартфон поставят несколько разновидностей памяти, так случилось и с моим. Похоже к концу производства, в них начали ставить самую дешевую память, поэтому когда я год спустя нашёл подходящий preloader (помог человек с программатором, сейчас найти preloader можно и без программатора — CID флэшки пишется в лог BROM Flash Tool'а), я прошил стоковую прошивку. И всё работало (кроме камеры), вот только девайс начал самопроизвольно зависать через ~час работы. И тут я предположил, что дело может быть именно в eMMC…

Теперь давайте по порядку: если вы когда-то прошили смартфон с неподходящим preloader, то его еще можно оживить, с помощью подбора prleoader'ов с других девайсов. Для этого пытаемся что-нибудь прошить, заходим в логи Flash Tool (Help -> Show logs), открываем лог BROM и ищем там «eMMC». Download Agent сам вычитывает ID флэшки и напишет её в лог. Забиваем CID флэшки в гугл, обычно гугл приводит на форумы, где сервисники сливали спец. софтом прошивку и выкладывали логи, где сервисный софт пишет CID флэшки. Прелоадер от этого девайса можно будет взять!

Если после оживления девайса вы получили белый экран — проблема в lk или ядре. lk — эдакий аналог U-Boot в MTK, инициализирует дисплей и показываем первую «заставку» (до появления бут-анимации). Ищем подходящее ядро (boot.img) или lk. Если остался родной рекавери/бут — ядро можно вытащить оттуда и «собрать из двух один». Ну а теперь к основной теме статьи!

❯ Перенос Android на MicroSD


Давайте определимся с необходимыми работами. Android поделен на 3 основных раздела, которые необходимы для работы системы:

  1. system — /system/ в файловой системе, read-only раздел с основными файлами системы, android.jar, приложениями.

  2. userdata — /data/ в файловой системе, хранит установленные приложения, их данные.

  3. cache — /cache/ в файловой системе, хранит собственно кэш ART/Dalvik (в более старых системах).


Сначала preloader загружает lk, затем lk в зависимости от режима загрузки (charger/normal/recover) выбирает нужный образ с ядром и рамдиском. boot.img — основной образ с ядром, запускающий систему, а recovery.img — рамдиск с рекавери, который содержит абсолютно такое же ядро, но вместо zygote запускает recovery. Точки монтирования основных разделов лежат в vold.fstab, который можно найти в /etc/ каждого образа. Суть переноса проста:

  1. Делим флэшку на 4 раздела с помощью fdisk.

  2. Форматируем 3 раздела в ext4, а 1 — в fat (для пользовательских файлов).

  3. Патчим vold.fstab.

  4. Копируем подмонтированный как loopback устройство system.img на первый раздел флэшки с сохранением всех прав.

  5. Перезагружаемся, ждём первой загрузки и радуемся спасенному девайсу!

В первую очередь нам надо разбить флэшку на разделы. Есть два варианта: с устройства и с ПК. Я лично всё делаю с устройства для наглядности. Для этого нам понадобится TWRP, ADB и флэшка на 8-16гб. Можно и на 2-4 уместить, но будет немного… тесновато! Флэшку лучше брать 10 класса: скорость eMMC редко ниже чем 100мб/c, а на флэшке 4-5 класса все будет совсем печально. Прошиваем TWRP с помощью SP Flash Tool:

Загружаем скаттер MT6580, выбираем наш recovery.img и жмем Download. Подключаем выключенный смартфон, дальше софт всё сделает сам!

После прошивки рекавери, в него нужно зайти с помощью громкости вверх + включения. Девайс предложит выбор режима загрузки — выбираем Recovery. В TWRP сразу открыт доступ к смартфону через adb, поэтому мы можем работать как root пользователь с обычного терминала. Разбиваем нашу флэшку с помощью fdisk. На большинстве устройств mmcblk0 — это eMMC/NAND, а mmcblk1 — это внешняя microsd флэшка.

Таблица разделов обновится только после перезагрузки. То, что сыпет ошибками ioctl — норма. Если вы всё сделали правильно, то в /dev/block увидите mmcblk1p1, p2, p3, p4 — это наши разделы. Еще раз вспоминаем: 1 раздел под system, 2 раздел под userdata, 3 раздел под cache, 4 раздел под всё остальное. Порядок следования значения не имеет, но я решил пронумеровать так для удобства.

Теперь нам нужно отформатировать наши разделы и подмонтировать /system/. Копируем только файлы из /system/, если вам не нужны данные на устройстве — наш /data/ достаточно будет отформатировать вместе с /cache/. Осторожно! На старых мобилках busybox на 32х битных системах не умеет форматировать ext2 на больших разделах. Ниасилили. Тут либо копировать раздел напрямую с помощью dd (что мы и сделаем), либо форматировать флэшку с ПК через кард-ридер. У меня cygwin на ПК не установлен, как и виртуалки с линухом, поэтому это вполне неплохая альтернатива:

Со скоростью флэшки не обманули!

В этой версии busybox есть баг с форматированием разделов >2гб на 32х битных системах. Поэтому если вы не хотите замарачиваться с установкой cygwin/линуха в виртуальную машину, можно просто взять dd. Нулями забить не выйдет — Android автоматом /data/ не форматирует. Если Android не сможет его подмонтировать — получите либо бутлуп, либо в системе ничего не будет сохраняться.

Теперь нам осталось пропатчить vold в родном boot.img, чтобы система загружалась с microsd флэшки. Для этого берем AndImgTools или готовую «кухню» (я использую MTKImgTools) и распаковываем родной boot.img из прошивки:

В Unpack/boot/ramdisk/fstab.mt6580 заменяем:

Обратите внимание на encryptable. Этот флаг нужно убрать, иначе система упадет в бутлуп. Шифрование «нинужно»!

Собираем boot.img, прошиваем с помощью SP Flash Tool и тестируем что получилось! По самому распространенному списку ошибок:

  1. Ребут сразу после начальной заставки, до анимации загрузки — либо поврежден boot.img, либо вы неверно скопировали /system/

  2. Бутлуп: отформатируйте правильно /data/

  3. Система очень сильно лагает после загрузки: это же первая загрузка, будьте терпеливей. Система с SD стартует заметно медленнее.

  4. Жалуется на невозможность расшифровать пользовательский раздел: Либо форматировать с помощью mke2fs (только twrp), либо пропатчить таблицу разделов самого twrp и сменить ФС уже с его помощью!


    Кстати! Забавный нюанс: во время подготовки оригинала статьи, какая-то китайская флэшка на 16гб с алика у меня померла прямо во время записи образа dd. Так что будьте осторожнее! :)

❯ Юзабельно ли?


Друзья! Очень важно понимать, что после первой загрузки Android нужно закэшировать приложения, а после каждой загрузки — прогрузить все ассеты минимально необходимых приложений в ОЗУ. Для особой наглядности, я назову этот процесс «пропердеться» :) После 1-2 минутной загрузки, система начинает работать неплохо, но не особо отзывчиво. Очень важно не забывать, что даже быстрая MicroSD в десятки раз медленней самой дешевой eMMC памяти, поэтому система будет работать не особо быстро.
Если бы в устройстве было хотя-бы 2-3гб ОЗУ, то теоретически систему можно было бы загнать в рамдиск и распаковывать с флэшки при каждой загрузке. Да, загрузка системы будет занимать минут 5, но сама система будет прямо таки летать!

Сёрфинг девайсу даётся неплохо. В целом, всё работает шустро, главное не заставлять девайс выгружать приложения в фоне. Иначе переключение на мессенджер или рабочий стол обернется 10 секундным ожиданием!

Неплохо даются и соц. сети. Пользоваться легким клиентом ВК можно без проблем, Telegram и WhatsApp я бы не рискнул — они нехило наседают на хранилище. Но попробовать можно.

Основные функции звонилки тоже работают адекватно. Никаких проблем с этим нет, хотя теоретически может произойти ситуация, когда при первом звонке после ребута вы сможете ответить только через 1-2 секунды прогрузки интерфейса звонилки.

Поиграть тоже можно, но в основном в эмуляторы. Никаких вам пубгов на таком железе! Зачем было городить 9 андроид на чипсет 8 летней давности — мне не понять, но 5ка и 6ка бегают хорошо! Есть возможность установки кастомной облегченной прошивки, я лично запускал на этом девайсе «линейку» и ходил… до первого зависона. После полного переноса прошивки на microsd, зависания пропали — а значит девайс мы оживили и дали ему вторую, пусть чуть-чуть и тормозную жизнь! Почти из коробки работают все прошивки для 6580 с той же версией ядра — у моего 3.10.72, что даёт возможность накатить Android 5, 6 и 7. Но по понятным причинам, я остановлюсь на «пятерке». Также не рекомендую ставить на такое железо MIUI, прошивки с Meizu и.т.п — MIUI едва вывозят сами редмики, а тут вы на слабое железо его поставит.

❯ Заключение


Как вы уже поняли, оживить таким образом получится только девайсы, у которых eMMC ещё не совсем упала в readonly. Должны быть доступными хотя-бы первые 50мб USER раздела eMMC. На самом деле, я далеко не первооткрыватель такого способа переноса Android на флэшку: похожим образом работают кастомные свежие прошивки для девайсов 2010-2011 годов, как например Xperia Arc: там часть системы тоже отправляется на microsd, поскольку не «помещается» во внутреннюю память, а в 2011-2012 году, таким образом ставили прошивки на Galaxy Young/Ace, дабы освободить немножечко места во внутренней памяти!

После такого даунгрейда, девайс заметно теряет в отзывчивости и работает гораздо медленнее. Но если вам срочно нужен смартфон, а возможности приобрести другой нет, или вам девайс дорог как память — почему бы не оживить его таким способом? А вы как считаете?

Подпишись на наш блог, чтобы не пропустить новые интересные посты!

Показать полностью 17
Отличная работа, все прочитано!