Pull to refresh

Comments 36

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

Недавно мне стало скучно, и я ради прикола решил применить описанную в моей прошлой статье практику написания нативных приложений под Android-смартфоны без загрузки самого "ведра". По итогу у меня получилось написать что-то типа альтернативной прошивки, с которой можно даже звонить! Кроме того, под капотом было реализовано довольно много различных узконаправленных подсистем:

  1. Графическая подсистема с отрисовкой прозрачных/непрозрачных картинок, умножением цвета, автоматическим управлением формата пикселя (на смартфоне 16-битный фреймбуфер, т.е 565, на 32х-битном фреймбуфере все должно работать также), отрисовкой примитивов и растровых моноширинных шрифтов. Изначально хотел её делать на GLES, но нативный рендерер мне завести пока не удалось (буду копать исходники ведра, чтобы понять шаги инициализации), на софтрендере работает не очень плавно, но вполне шустро.

  2. Простой механизм для анимаций. Я изначально хотел слизать UX для прошивки с первых версий iOS, поэтому без анимаций никуда. Пока что есть примитивный интерполятор нескольких значений (X, Y, поворот и.т.п), который вполне работает.

  3. Обработка ввода с тачскрина с распознаванием базовых жестов (свайпы). Ну, тут все очевидно, правда пока распознается только одно нажатие - мультитача ещё нет.

  4. Простенький драйвер модема. Звонить и отправлять СМС-ки умеет.

  5. GUI. Причём я решил реализовать интерфейс самым нетривиальным по мобильным меркам способ - концепцией Immediate GUI (т.е вызвали GUI::Button - получили кнопку на экране, GUI::TextField - текстовое поле и всё это с минимальным количеством стейтов). Для сторонних приложений есть механизм «экранов».

  6. Менеджер питания. Замер уровня заряда АКБ, статус ЗУ, управление подсветкой - это все сюда.

Интересно ли вам почитать об этом и узнать, как я на деле выкинул Android и запилил собственную прошивку? :)

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

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

Ещё можно покурить тему на arduino.ru, вполне возможно, что на ваш дисплей даташит и распиновка уже найдены.

Опознать бы дисплей с планшета. NeuTab N7 Pro, на дисплее примерно такой набор символов d070BE018030, на шлейфе fpc70063 p3832. Сам по себе планшет морально очень старый, Андроид 4.4, динамика нет, камера не функционирует, аккумулятор всё, остаётся из полезного дисплей в 7 дюймов.

Сфотографируйте шлейф дисплея и коннектор на материнской плате, скажу конкретно.

Кажись у вас 60-пин матрица. Это тоже TTL-дисплей, можно использовать в своих проектах, но его потянут либо отдельные скалеры, либо очень мощные одноплатники (либо ПЛИС) из-за высокого разрешения. Часть схемы с похожего планшета, но с 7" матрицей (шлейф дожен быть совместимым). Распиновка на схеме. Обратите внимание, что пины гамма-коррекции обязательны, иначе тёмные пиксели будут немного мерцать (не критично, но всё же).

60-пиновая, скорее, и есть. Крайний правый вывод с обозначением 60. Увы, без фото — камера на смартфоне унылая, других возможностей нет.
Разрешение по спецификациям — 1024x600.
З.Ы. + за меня добавьте.

Конечно в них практически всегда есть HDMI, но это совершенно не выход для портативного устройства: прожорливый чип скалера будет очень негативно влиять на время работы от АКБ

А что за устройства вы хотите подключать через АКБ? Всё более менее интересное само чаще всего требует 5В/2А, а мелкие и простые платы часто в экране с HDMI вообще не нуждаются, так как есть OLED дисплеи и e-ink.

Всё более менее интересное само чаще всего требует 5В/2А

Не требует. На входе платы всегда стоит линейный регулятор, который преобразует 5В в 3.3В, при этом вне зависимости от падения напряжения (т.е если подать 4.5, или 3.7 - все равно будет 3.3в), и те же 5В уходят в КП, который затем уже формирует напряжения для ядра (~1.2в) и остальной периферии (~1.8в). Кроме того, 2А платы потребляют только в пике, как и смартфоны при поиске сети, в обычной ситуации потребление не слишком большое даже с подключенным дисплеем. Сами литий-ионные АКБ выдерживают до 2А нагрузки (если убитые - то меньше).

Я OrangePi питал от USB-порта ПК (0.5А), работает норм, если не подключать USB-устройства и не юзать сеть. Малинки без проблем от юсб работают.

Я OrangePi питал от USB-порта ПК (0.5А), работает норм, если не подключать USB-устройства и не юзать сеть. Малинки без проблем от юсб работают

вы намного прокаченнее меня в этой теме, поэтому спорить не особо имеет смысл, только скажу, что я работаю с OrangePi/RaspberryPi и больное место этих устройств - это качественный БП и минимум 2А. То что оно там во что-то преобразуется не важно. От USB ПК тоже подключал, но с даунвольтом и пониженной частотой, что на мой взгляд уже хак, а не стандартный режим работы. С такой логикой можно Core i9 запустить от пальчиковой батарейки. Вы же оборудование используете для работы, а не только в качестве спортивного интереса.

Ну и если занудствовать, то вы написали про "любой одноплатник", а "одноплатник питающийся от АКБ" и уж тем более "мобильный телефон" это устройства с уклоном в мобильность или автономную работу, что является отдельной категорий одноплатных устройств, так что вы либо про все говорите, либо только про автономные. Простой пример, у меня дома два одноплатных устройства Eltex NV-501 и Eltex NV701, первое завелось только от третьего БП, два других не позволяли ему работать стабильно, все БП 5В/2А. Модель 701 уже 5В/3А. В штатном режиме с более слабым питанием оно не работает.

OrangePi на AllWinner H тоже вполне себе портативные устройства) H - A без вывод на дисплей и с эзернетом :)

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

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

я об этом автору и говорю, а он утверждает что всё будет работать от пальчиковой батарейки годами. У любого SoC свои причуды и свой сегмент рынка. Формально Intel NUC тоже одноплатники, но от АКБ их не особо есть смысл эксплуатировать.

Что?) Где я такое утверждаю?)

Вы же понимаете, что под капотом логика работает не на 5в, а мало-мальски живой АКБ от старого смартфона способен обеспечить стабильную работу без просадок?) Это изначально МОБИЛЬНЫЕ чипсеты.

Что?) Где я такое утверждаю?)

"Я OrangePi питал от USB-порта ПК (0.5А), работает норм"

Вы же понимаете, что под капотом логика работает не на 5в

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

а мало-мальски живой АКБ от старого смартфона способен обеспечить стабильную работу без просадок?

Вы у меня спрашиваете?

Это изначально МОБИЛЬНЫЕ чипсеты

Никто не сомневается что их можно питать от АКБ, тут вопрос целесообразности. Если ваше устройство будет питаться от АКБ и не будет регулярно переходить в режимы низкого энергопотребления, то никакой мобильности у вас не будет, потому что АКБ будет пустеть на глазах и ваша мобильность превратится в тыкву. У меня есть читалка Digma E500, её АКБ разряжается в спящем режиме год, а в режиме чтения - месяц. Вот это мобильность. А TFT/LCD/HDMI это не про мобильность и если я держу в руках OrangePi на H3 и у него есть Ethernet, 4USB, HDMI и я вынужден клеить на него радиатор чтобы он вообще работал, то это не про мобильность. Отсюда и моя претензия к вашим выводам в статье. Поэтому вы либо четко и однозначно в статье обозначаете применимость ваших рассуждений к мобильным вариантам исполнения (и HDMI там даже не будет распаян), либо ваши слова про внешнее питание и HDMI не имеют смысла и можно не городить городушку и подключать любой HDMI экран, так как вы все равно "сидите у розетки".

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

Если и есть какие-то действитеьльно жрущие платформы типа интеловских или Jetson - что мешает объединить два АКБ последовательно!?

А разве такие платформы не ориентированы таки на стационарное использование?

Для чипсета нет понятия "стационарный", "не стационарный" - ему нужен источник питания. Напряжения всей плате раздают контроллеры питания, которые изначально проектируются с уклоном на то, чтобы работать и от АКБ, и от 5в.

Хоть он будет от АКБ, хоть он будет от 5В БП - лишь бы выдерживал необходимое потреблени

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

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

когда я работал в банке, у нас целая стойка 3 часа работать могла от АКБ, только АКБ тех было три штуки размером с автомобиль Matiz.

Лично я не очень люблю дисплеи со скалерами из-за их дороговизны и лишнего потребления (хотя судя по всему, не очень большому - ~100мА кушает скалер). Но для быстрых проектов это норм решение.

@bodyawmа по поводу камер можете что-нибудь сказать? легко ли использовать камеру из старого мобильника?

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

Соотношения цена/качество или цена/время_разработки не оставят камерам из старых телефонов никаких шансов. Модули OVxxxx действительно есть, с документацией и самой разной оптикой, и даже по нормальной цене. Их массово подключают к "Малинкам", и не имеют потом головной боли.

Сименсы фоткают очень даже ничего))

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

да, с сименса хорошо ходили модули, а с нокий требовался обратный к дисплеям интерфейс, причем раньше многих стал высокоскоростной и последовательный.
по mipi-csi нормальных документов пока мне не попадалось.

да, с сименса хорошо ходили модули,

Это которые внешние?

Давно это было, задолго до стм32, лет 20 назад, но решалась и на 8бит. Атмегах, и напрямую на лпт.
Имхо классический параллельный интерфейс.
И внешних к телефону не было, т.к. там были аналоговый звук, зарядка и уарт.

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


https://wiki.archlinux.org/title/Kernel_module_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9):

С помощью файлов в /etc/modprobe.d/
Создайте .conf файл в /etc/modprobe.d/ и добавьте строку для каждого модуля, который вы хотите запретить, используя ключевое слово blacklist. Например, если вы хотите запретить загружать модуль pcspkr:


/etc/modprobe.d/nobeep.conf


Do not load the 'pcspkr' module on boot.

blacklist pcspkr
Примечание: Команда blacklist запретит автоматическую загрузку модуля, но этот модуль всё равно может загрузиться, если от него зависит какой-то не запрещённый модуль или если он загружен вручную.
Можно изменить такое поведение. Команда install заставляет modprobe запускать вашу собственную команду вместо вставки модуля в ядро как обычно. Поэтому вы можете насильно сделать так, чтобы модуль никогда не загружался:


/etc/modprobe.d/blacklist.conf

install имя_модуля /bin/true

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


Просто добавьте module_blacklist=модуль1, модуль2, модуль3 в вашем загрузчике в строку ядра, как описано в статье Параметры ядра.


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

Статья хорошая. Эх, где бы найти крошечный экранчик как можно меньше, но с разрешением равно или больше 256x192.

А ты недавнюю статью про Fly чекни))

Sign up to leave a comment.