Как стать автором
Обновить

Делаем из битого планшета одноплатник: подключаем Android-устройства к дешевым микроконтроллерам через UART

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров9.8K
Всего голосов 35: ↑40 и ↓-5+45
Комментарии33

Комментарии 33

Друзья! Надеюсь материал вам был полезен. Теперь, по традиции, рассмотрим наш будущий контент-план:

  1. Проект с машиной потихоньку развивается. Само собой машина не новая, потребовала после покупки некоторые вложения (система охлаждения не герметична, а по мнению прошлого владельца доводить антифриз до кипения, который при разгерметизации кипит на 95гр. и кататься на вентиляторе - норма). Я сейчас вообще почти денег, у меня долг 20 тыщ и надо купить радиатор с новым расширительным, но ребята из ТаймВеба помогают, за что им большое спасибо.

  2. Меня давно просят вернуть "классические" обзорно-технические статьи на редкие и диковинные смартфоны. Таковым на следующей неделе станет BlackBerry Priv - очень редкий, ценный и дорогой смартфон с QWERTY-клавиатурой! Я ходил с этим девайсом на протяжении более полугода как с основным и готов расписать все плюсики и минусы этого красавца.

  3. Многие читатели-олды давно предлагают мне параллельно с текстовым блогом пилить и видосы на YouTube. Я с этим согласен и у меня уже есть некоторые мысли для первых видосов (в основном, адаптация прошлых статей, потом будут параллельно видосы с новыми статьями). Осталось подкопить на китайскую пародию на гопро, штатив, петличку и адекватный микро для закадровой записи (уложусь в пределах 10-15к т.к все самое бомжатское) и думаю можно начинать :)

А ещё вчера мне подогнали крутейший девайс - Nokia N900!

А пару недель назад, ко мне приезжал читатель (тоже из Ейска) и лично привез Xperia X8, за что ему большое спасибо :) Очень приятно.

можно больше инфы или ссылку про "проект с машиной", перерыл ваши статьи до конца 2023 и не нашёл упоминаний

Это будущий проект, он только на подходе.

MaFrance351 верно подметил, проект пока только в планах. Сейчас занимаюсь машиной.

Салют, а я свой HTC One отправил вместе с «Дезиркой» и буком, или он у меня где-то валяется ещё? Там выход на матрицу вроде бы убился (ну или сама матрица, не сильно легче). Пытался вроде Линягу вкорячить, должен быть разлочен бут. С ним такое прокатит?

Привет. Да, они у меня :)

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

Где конкретно выход на матрицу убился? На дезике? Ну, там буты лоченные с завода, но если HSPL живой то легко разлачиваются и да, линух тогда можно вкорячить) Но думаю там скорее шлейф крякнул.

Дезик жив, Х Уан сдох. Криво вставил шлейф и не заметил, всё пожёг %( обидно до чертей

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

А что мешает подключить Rpi Pico как USB serial устройство? Просто подключив через переходник к usb. Это должно работать без аппаратного ковыряния телефона/планшета, если он достаточно современный конечно. Отсутствие возможности зарядки телефона без отключения как единственный минут.

Нет дров на UART -> USB преобразователь к сожалению. Пробовал и не на одном девайсе.

Но! Если есть исходный код ядра для устройства, то ничего не мешает собрать внешний линкуемый модуль и потом просто сделать insmod :)

А вот интересно, на каких устройствах нет этого драйвера, а на каких есть? На моём Google Pixel 8 Pro я подключал esp32-c3 по usb к смартфону, и через какой-то serial terminal из Google Play без всякого рута мог работать с последовательным портом, полноценно читал и писал в порт. Т.е. usb-serial драйвер в ядра есть, со стороны андроида тоже что-то есть, раз рут не требуется. Andoid 14, версия ядра 5.15.131-android14-11-gd99d9fe08e0c-ab11209359

Не факт, что драйвер в ядре есть. Возможно прям в программе USB-стек заюзали напрямую, Android это позволяет!

чем дальше чем больше драйверов, но никто ничего не гарантирует...

Так в Pico нет конвертера USB-UART. Там программная его реализация средствами самого чипа RP2040. Поэтому запросто может быть, что FT232 или CH340 работают, а малина - неа.

Верно

При этом, у RPi Pico, как вы верно отметили, есть USB и стек TinyUSB. т.е фактически никто не мешает заюзать USB Accessory API, или напрямую дергать API для USB (в стиле libusb) линукса и напрямую управлять bulk-транзакциями :)

«ногодрыг» через BT-радиоканал

Идея не нова была даже платка с PIC.

Хорош еще вариант с USB входом, но вроде не часто такие делали.

USB-хосты есть даже на самых дешевых планшетах тех лет. Почему? Потому что в чипсетах помимо OTG-хоста был еще и полноценные USB-хосты, куда очень часто подключали Wi-Fi модули. Именно поэтому они выполнены в виде отдельных плат.

Убедится в этом можно, глянув на плату любого планшета на аллвиннере тех лет :) Так что идея с USB вполне имеет право на жизнь. А вот с BT есть куча проблем.

Хмм... А я то к экрану фоторезисторы прижимаю...

Вот если б можно было дергать ноги через libgpiod, то было бы интереснее и проще использовать

В MTK GPIO можно из sysfs дергать, если вы сможете их достать с проца :) Также, можно экспортировать i2c в юзерспейс, я рассказывал как с аккаунта-псевдонима

@MDXE1337

Почти у всех этих устройств есть еще один итерфейс - тот, который для SIM карты предназначался. Его никак задействовать нельзя? Я понимаю, что это сомнительно, но вдруг?

AT команды в контроллер сотового модема Android как то же посылает.

Да и у (micro)SD интерфейса, помнится, был какой-то режим, который не запоминающее устройство, а для всяких хитрых устройств расширения.

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

Интерфейсом SIM управляет прошивка радиомодуля. Android общается с модемом с помощью RIL - абстракции от конкретной системы команд для модема, настолько лоулевельных операций там нет.

У MicroSD есть два режима: SDIO и SPI. Однако работает с ним модуль MMC, который не умеет обычно ничего, кроме как читать SD-карты)

Через ЦАП единственный адекватный вариант - так передают программы на спектрум через "аукс".

Android общается с модемом с помощью RIL - абстракции от конкретной системы команд для модема, настолько лоулевельных операций там нет.

Т.е. с sendEnvelopeWithStatus на практике ничего полезного сделать нельзя?

 Однако работает с ним модуль MMC, который не умеет обычно ничего, кроме как читать SD-карты)

Выходит, те NFC SD, которые в свое время пытались выпускать для тех, у кого прямо в телефоне интерфейса не было - работали с весьма ограниченным числом моделей телефонов?

Т.е. с sendEnvelopeWithStatus на практике ничего полезного сделать нельзя?

Маловероятно.

Выходит, те NFC SD, которые в свое время пытались выпускать для тех, у кого прямо в телефоне интерфейса не было - работали с весьма ограниченным числом моделей телефонов?

Видимо так. Я вообще особо не видел SDIO модулей в форм-факторе MicroSD (не SD)

Смотри фокус. Есть такая штука как "меню SIM" - оно же "SIM Toolkit". И это меню фактически работает не на самом телефоне, а именно на SIM-карте. Телефон рисует меню, но на каждое действие пользователя отправляет в симку запросы.

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

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

SDIO (точнее, подключение чего-то иного, нежели карт памяти) в потребительских девайсах уже мало где остался. Это КПКшное явление.

поскольку просто взять и открыть /dev/ttyMT3 с помощью FileInputStream 

здесь должна быть картинка с Арагорном

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

Но с совсем старыми где андройд меньше 6 будут проблемы подружить с современным андройд сдк.

Ноль проблем. Пилю под Android 2.2+, юзая самый последний SDK :)

В статье ни слова про SELinux - а он может мешать работать с устройством UARTа, даже если его chmodнуть на 666.

SELinux можно выключить до ребута командой setenforce 0 под рутом, или же пропатчить cmdline в boot.img добавив туда параметр androidboot.selinux=permissive

Хотя, есть информация что трюк с cmdline может не прокатить если build variant == user. Подробнее: https://source.android.com/docs/security/features/selinux/validate?hl=en

Зарегистрируйтесь на Хабре, чтобы оставить комментарий