Я Андрей, и я наконец-то созрел до того, чтобы перестать читать Пикабу… и начать писать.
Долго сидел в режиме «пассивного потребления контента», но в какой-то момент понял: у меня накопилось достаточно историй, наблюдений и граблей, чтобы тоже что-то принести в эту ленту.
Так что давайте знакомиться.
Часть 1. Техническая
(или «Как я подружился с железом и иногда оно побеждает»)
Я инженер-программист, занимаюсь встраиваемыми системами (embedded, но по душевному состоянию Senior FPGA developer, хоть это и далековато от микроконтроллеров...).
Если по-простому — я тот человек, который заставляет маленькие железки делать нужные вещи. Иногда даже так, как задумано. И иногда даже полезные.
Это мир, где код напрямую трогает «железо», и за каждую строчку приходится отвечать:
памяти мало
процессор не прощает
тайминги важны
а отладка иногда превращается в шаманство с осциллографом или логическим анализатором.
Здесь нельзя просто «написать и забыть». Здесь ты либо понимаешь, что происходит, либо долго смотришь на устройство и думаешь, почему оно живёт своей жизнью.
О чём буду писать:
интересные (и иногда странные) проекты
расчлененку различных устройств (а что там унутре?)
реальные проблемы и как я их решал
идеи и варианты реализации
типичные грабли начинающих embedded-разработчиков
ну и просто мысли про всю эту IT/embedded-движуху
"А не купить ли" - интересные товары, найденные на просторах интернета
Часть 2. Спортивная
(или «Зачем я добровольно бегаю больше 10 км»)
Второй мой большой интерес — бег.
Если в embedded всё строится на логике, то бег — это почти всегда про переговоры с самим собой:
Причина моего провала очевидна: я мало тренировался. И кроме того, я мало тренировался. И ещё — я мало тренировался. Это если так, вкратце
Я не профессиональный спортсмен — обычный любитель, который внезапно решил "пора бежать".
Бегаю несколько лет, участвую в стартах на разных дистанциях (5, 10, 21.1, 42.2 и более километров), иногда ставлю личные рекорды, иногда просто выхожу «проветрить голову» на 10–15 км.
Иногда под дождём. Иногда в снег и метель. Иногда зря. Но - всегда стараюсь выполнить тренерский план.
Если интересно, буду делиться:
как начать бегать с нуля и не бросить
что происходит в голове на длинных дистанциях
как совмещать сидячую работу инженера и активность
обзоры кроссовок, гаджетов и питания (с занудным инженерным подходом, да)
В общем, здесь будет смесь: Микроконтроллеры, баги, бег, немного боли и немного радости.
Если вам откликается хоть одна из этих тем — оставайтесь, должно быть интересно.
Первая отечественная игровая консоль на процессоре, который полностью разработан и производится в России. Цена устройства - 6.300 рублей.
Компания Микрон выпустила в свободную продажу отладочную плату (девкит) игровой консоли MikBoy. Устройство предназначено для школьников, студентов и просто энтузиастов.
MikBoy построен на базе полностью российского микроконтроллера MIK32 "Амур" (К1948ВК015/018), который базируется на российской имплементации RISC-V от компании Yadro - Syntacore SCR1.
Процессор MikBoy разработан, отлажен и производится в России на собственных мощностях компании "Микрон".
Максимальная тактовая частота процессора - 32МГц. Помимо SCR1, на одном кристалле расположился кварцевый резонатор, LDO, 16КБ ОЗУ, 8КБ EEPROM, а также 256-битная OTP-зона. Поскольку 8КБ EEPROM может быть маловато для игр, в процессоре предусмотрен XIP SPI Flash контроллер, который позволит подключить флэху объёмом до 8 мегабайт.
В качестве дисплея используется 1.8" TFT-TN матрица с параллельным MIPI DBI интерфейсом (контроллер ILITek/Solomon Tech) и разрешением 128x160
В консоли присутствует внешний ЦАП для звука с усилителем мощности и 3.5мм джеком, 5 аппаратных кнопок, слот для карт расширения, чарджер литиевых аккумуляторов и программатор на базе CH347T. В качестве органов управления представлено 5 кнопок - DPAD и две дополнительные.
По производительности консоль близка к телефонам начала нулевых годов - уровня Samsung C100/X100, а также Motorola E398 и C350 (клок ниже чем максимальный у Neptune LTE, но ядро современнее и теоретически должно быть быстрее ARM7TDMI). Единственный слабый, по моему мнению, момент - отсутствие возможности расширения RAM.
Основная аудитория - обучающиеся микроэлектронике и программированию, а также энтузиасты и любители портировать Doom на всё подряд. Приобрести консоль можно здесь.
Я уже написал пацанам в посте на Хабре, если выйдут на связь - сделаем коллабу и в обмен на две-три консоли я напишу для них статью и сделаю видос😎 Горжусь ребятами которые не просто переклеили шилдик, а сами разработали процессор с нуля (в паре с пацанами из Yadro), отладили, начали массовое производство и еще и почти Consumer-grade гаджет на нем запилили. Настоящие слоники и двигатели технического прогресса в России :)
Привет всем, кто читает. Пред история была проста, как три копейки. Разработал я значится мини метеостанцию под ESP32, чтобы удаленно видеть температуру и прочие параметры при моем отсутствии на дачном участке (кстати меня данное устройство спасло от головной боли и больших финансовых потерь, однажды выключили свет на улице в мороз из-за аварии на более 3-х часов, далее я увидел что температура начала падать, пождал еще пару часов, увидел что температура не поднимается, срочно выехал на такси в свой участок, а котёл сволочь в ошибке из-за падения давления и естественно он не запустился, три минуты восстановления, и я был счастлив так как понимал к чему это могло привести). В итоге получился девайс с огромным потенциалом, в общем устройство может передавать данные измеренной телеметрии по WiFi на удаленный проплаченный сервер MQTT который находится в РФ (Москва) (причины просты, при блокировках сети всё работает без проблем и нет посредников), и пришло осознание, что данное устройство легко может работать в соло или стать системой Hive Mind Sensor Node (сенсорный узел) для сотни таких же) и самое главное оно дешевое)!
Давно хотел написать, но как-то не хватало времени.
Я - тимлид из мира embedded. Годы в RTOS и MISRA. Heisenbugs, которые проявляются только при -35 °C и определённой фазе луны. Сертификации, traceability, где каждая строчка кода может стоить жизни или миллионов. Длинные циклы - 5-10 лет от идеи до EOL. Ответственность реальная, физическая.
А теперь я присматриваюсь к web-сервисам. SaaS, full-stack команды, Next.js + tRPC + Drizzle + Vercel + AI-агенты в промпте. И… о боже, что это за мир? 😭
Move fast and break things как официальная религия
В embedded: если сломаешь - может сломаться самолёт / кардиостимулятор / конвейер на заводе.
В web: если сломаешь - откат за 5 минут, 404 на главной - это плохо, но не конец света.
Команды гордятся velocity и DORA-метриками, а не тем, что система не упадёт через 12 лет в sleep-режиме с потреблением 8 мкА. И хотя Сэм Альтман заменил Move fast and break things на Move fast with stable infrastructure, но до некоторых это еще не дошло.
Боль лида: заставлять людей думать о worst-case, когда им важнее ship в эту пятницу.
Tool churn как национальный спорт
В embedded: toolchain меняется раз в 5-7 лет. Ты знаешь свой STVD / IAR / Keil / GCC как родного.
«Мы мигрировали на новый стек и стало в 3 раза быстрее!» - без бенчмарков, без p99, без учёта CDN.
Боль лида: каждые полгода объяснять, почему не стоит переписывать фронт «потому что модно», когда продукт и так работает.
Buzzwords вместо цифр
«Blazing fast», «revolutionary DX», «edge-first experience», «AI-powered future»... Вот это вот все.
В embedded ты приходишь с графиком потребления, latency worst-case, coverage 98.7%.
В web часто: «feels snappier», «users love the animation».
Боль лида: просить метрики, а в ответ - скриншот Lighthouse 98/100 (на localhost с пустой БД).
Резюме как коллекция наклеек
LinkedIn / резюме веб-разработчика:
Next.js 15 App Router Server Actions
tRPC + Zod + Prisma + Drizzle ORM
Tailwind + shadcn/ui + Radix + Framer Motion
Vercel + Turborepo + Bun + AI code review
Резюме в embedded:
STVD + Cosmic
Опыт портирования на 7 разных MCU
Оптимизация до 4 КБ RAM
Сертификация ISO 26262 ASIL-D
Боль лида: понять, кто реально может решить проблему, а кто просто хорошо гуглит хайповые комбинации.
Качество = good enough for MVP
В embedded: качество - это не выбор, это физический закон.
В web: «Мы в проде A/B-тестируем», «если упадёт - добавим feature flag».
Переписывание фронта каждые 1.5-2 года без видимой бизнес-ценности - норма. Боль лида: внутренний конфликт «это же можно было сделать надёжно с первого раза, зачем теперь страдать?».
Личный бренд важнее кода
Twitter/X, DEV.to, TikTok - там продают не код, а личность.
«Я принёс Zustand в команду - теперь DX на 10× лучше».
В embedded ты известен по баг-репортам, которые починил, а не по твитам.
Боль лида: видеть, как junior получает офферы за хайповые посты, а не за реальные достижения.
Отсутствие долгосрочной ответственности
В embedded: ты пишешь код, который будет жить 10-15 лет.
В web: продукт могут закрыть через 18 месяцев, команда разбежится, код выбросят.
Боль лида: привычка думать на 10 лет вперёд сталкивается с «да ладно, потом перепишем».
Почему так больно?
Embedded - это инженерия + физика + ответственность за жизни/деньги/безопасность.
Web (особенно consumer/SaaS) - это шоу-бизнес + маркетинг + программирование.
Ты приходишь со сварочной маской и гаечным ключом в мир, где все в ярких кроссовках и снимают сторис с кофе.
Но... есть и свет в конце тоннеля.
Многие B2B/SaaS с высокими требованиями к надёжности (финтех, healthtech, enterprise) специально ищут людей из embedded / systems на роли staff / lead / architect. Потому что мы приносим именно то, чего там катастрофически не хватает: дисциплину, скептицизм, long-term thinking, умение считать реальные метрики.
Так что если переживу этот культурный шок - возможно, стану тем самым «embedded guy», который заставит веб-команду думать о p99 и rollback plan'ах.
Я работал над небольшим инструментом под названием polluSensWeb. Он изначально создавался для моего собственного отладки и тестирования, но в итоге я стал использовать его достаточно часто, чтобы привести в порядок и поделиться с другими.
Это браузерный UART-ридер для датчиков качества воздуха, таких как PM2.5, VOC, CO2 и подобных. Никакой установки не требуется. Вы подключаете USB–UART адаптер, открываете страницу и начинаете считывать и строить графики данных. Инструмент обрабатывает сырые бинарные кадры, включая проверку контрольной суммы, и отображает значения в реальном времени. Всё работает локально в браузере и не требует подключения к интернету, кроме отправки вебхуков.
Датчики описываются с помощью JSON-конфигураций, которые задают структуру кадров, смещения полей и тип контрольной суммы. Это позволяет легко добавлять поддержку новых датчиков без написания отдельного драйвера. На данный момент поддерживается 25 датчиков, в основном популярные модули для измерения PM и газов.
Вы легко можете сравнивать работу разных датчиков до их интеграции в свой проект.
Недавно я добавил опциональную поддержку вебхуков, чтобы разобранные данные датчиков можно было пересылать в другие системы. Типичные сценарии использования — локальные решения вроде Node-RED или Home Assistant, а также сетевые сообщества, такие как SensorCommunity или Narodmon, которые принимают HTTP-загрузки. Это позволяет обойтись без запуска серверной части или вспомогательных скриптов для передачи данных.
Это практический инструмент, предназначенный для отладки и проверки корректности работы протоколов датчиков. Он в основном существует потому, что мне надоели закрытые интерфейсы производителей, проприетарное ПО и разовые скрипты, лишь чтобы увидеть, что датчик реально передаёт по UART.
Если у вас есть другой датчик с UART-интерфейсом и USB–UART конвертер, я с радостью помогу с JSON-конфигурацией для него, чтобы вы могли попробовать — оставьте комментарий.
Будучи творческим человеком и техногиком, я обожаю при первой возможности апгрейдить своё оборудование. Время от времени я мониторю маркетплейсы в поисках чего-то новенького и в этот раз я наткнулся на настоящий мультитул для Embedded-разработчика — контроллер I2C/SPI/UART/JTAG в одной коробочке и всё это всего за 1.000 рублей... Конечно я не смог пройти мимо этой штучки и в рамках сегодняшней статьи хочу рассказать что оно из себя представляет и как с ним работать. Жду вас под катом!
❯ Что за устройство?
На самом деле такой формат статей для меня «в новинку», до этого я ни разу не делал обзоров на оборудование. Да и мой инструментарий слишком зауряден, чтобы делать ещё одну статью уровня «почему Quciko T12 лучше любой 900M станции» или «почему Вам не стоит покупать компрессорный люкей в 2025 году». Однако обзоров на сегодняшний гаджет я не нашёл, несмотря на его огромную пользу как для Embedded-разработчиков и инженеров, так и мастеров по ремонту смартфонов, планшетов и ноутбуков.
Во время подготовки статьи о том, как я написал BIOS для игровой консоли от Waveshare, в рекомендациях мне попадались другие товары от этого производителя — в том числе и сегодняшний гаджет. Меня сразу привлекла возможность переключения 3v3->5v логики и обширный набор поддерживаемых шин. В официальной вики были описаны следующие характеристики:
Шины: 1x SPI с двумя чип-селектами (можно подключить до двух устройств на одну шину), 1x I2C, 1x JTAG (полноценный, с ресетом!) и 2x UART с дополнительными линиями CTS/RTS для совместимости с классическими COM-портами.
Используемый контроллер: WCH CH347. Некоторым читателям чип может показаться знакомым по аналогии с классическим CH341A.
Питание: 5В, 3.3В, потребление ~65мА на VBus. Есть самовосстанавливающийся предохранитель на «входе».
Waveshare — достаточно известный бренд, под которым реализуются одноплатные компьютеры, «бутербродная» периферия для них и инструменты.
Я сразу смекнул, что смогу использовать гаджет как для восстановления программно-убитых устройств по типу КПК, так и для отладки своих собственных самоделок, благо набор шин к этому располагает. Устройство приехало ко мне примерно через месяц, в небольшом пакетике и брендовой коробочке, в которую входило само устройство, кабель USB Type-B (ну почему не Type-C?), Dupont-провода в IDC-коннекторе для всех шин, а также небольшой мануал. Нареканий к доставке кроме скорости не возникло.
Сам гаджет представляет из себя компактную металлическую коробочку с «ушками» для удобного крепления на столе или стене. Сверху расположена шпаргалка по распиновке и режимам работы CH347, а также светодиодные индикаторы для UART.
Разбирается гаджет очень просто: достаточно лишь открутить несколько винтов с обеих боковых пластин устройства и перед нами открывается вид на плату. Схемотехника здесь простейшая: самовосстанавливающийся предохранитель, линейный регулятор AMS1117, который питает контроллер и нагрузку на VCC (до ~600мА), сам CH347, а также набор ключей для согласования режимов работы. CH347 — это не просто ASIC, а вполне себе полноценный микроконтроллер, прошивку которого можно обновить, правда SDK для использования CH347 как МК производитель не предоставляет.
После подключения гаджет радостно зажег индикатор PWR, подтвердив свою работоспособность, а значит пришло время протестировать возможные варианты использования!
❯ UART
С UART всё просто и понятно: нам достаточно лишь выбрать желаемый режим работы (M0 — двухканальный UART, остальные режимы — UART + I2C/SPI или UART + JTAG) с помощью тумблера и подключить/припаять Dupont'ы к соответствующим пинам на плате. UART здесь достаточно быстрый: при двухканальном режиме работы, на UART0 можно добиться до 9Мб/с (мегабод), а на UART1 — до 7.5Мб/с.
Провода в разъёмы установлены не бездумно — у них есть цветовая маркировка и логика помимо «красный — VCC, чёрный — GND».
В качестве теста я решил снять лог загрузки со своего проекта самодельной игровой консоли. Для работы с UART я привык использовать Putty: сначала я припаял RX/TX и массу, затем запустил Putty и выбрал COM-порт, соответствующий первому каналу, установил бодрейт в 115200 и включил консоль:
Всё работает! В целом, гаджет можно использовать и для прошивки более сложных устройств: например многие смартфоны и кнопочные телефоны всё ещё имеют альтернативный режим прошивки через UART, а ретро-телефоны Samsung и LG так вообще не имеют альтернатив — если нет специального JIG, то остаётся лишь вызванивать RX/TX с разъёма и подпаиваться напрямую к UART процессора!
❯ SPI/I2C
С SPI и I2C уже всё чуточку интереснее. Дело в том, что как вы уже могли понять — чип использует свой собственный проприетарный протокол для организации моста между программой на ПК и шиной данных. Для работы с этим протоколом производитель предоставляет уже готовую библиотеку для Windows начиная с 2000, так что возможно у чипа есть перспективы для оживления легаси пром. оборудования. Для Linux же есть альтернативные драйвера, которые пробрасывают CH347 как обычные spidev и i2c-dev устройства.
Драйвер можно скачать здесь
Для проверки коммуникации можно использовать специальную тестовую программу из SDK, которая позволяет отправлять произвольные данные и даже прошивать флэшки 25 'ой и EEPROM'ки 24'ой серии.
Давайте же попробуем написать что-нибудь полезное! Например, подключим к гаджету 1.8-дюймовый дисплей и что-нибудь на него выведем.
С разводкой дисплея проблем не возникает: SDO к MOSI, SCK к CLK, VCC к VCC и BL (питание подсветки), однако для управления DBI-дисплеями необходимы ещё две дополнительные линии: D/C (линия, определяющая как интерпретировать байт на входе), а также RESET для аппаратного сброса контроллера. И с этим проблем тоже не возникает: у контроллера есть как минимум четыре свободных GPIO, два из которых мы с вами и будем использовать для управления линиями дисплея — GPIO6 (CTS на UART1) и GPIO7 (RTS на UART).
Далее я начал изучать PDF-ку с документацией сомнительного качества и писать код инициализации. Начинается всё с получения контекста устройства с помощью функции CH347OpenDevice, которая принимает в себя индекс нужного контроллера в системе и возвращает непонятный идентификатор (вероятно WinUSB?). Интересно то, что в остальном API используется не идентификатор, а как раз тот самый индекс, который в большинстве случаев будет 0. Далее мы получаем информацию об устройстве и сверяем режим работы, если он отличается от нужного — выбрасываем исключение:
/* Initialize CH347 */ deviceHandle = CH347OpenDevice(deviceIndex); if (!deviceHandle) thrownew std::runtime_error("Failed to open CH347 device");
Далее настраиваем SPI-контроллер. На выбор есть все три существующих режима, настройки полярности и возможность вручную дергать один из двух доступных ChipSelect'ов, а также тайминги. Частота работы определяется предустановленным набором делителей — 60МГц, 30МГц, 15МГц и т.п. Не забываем настроить таймаут каждой USB-транзакции:
if (!CH347SPI_Init(deviceIndex, &cfg)) thrownew std::runtime_error("Failed to initialize SPI");
И инициализируем дисплей. Здесь есть важный момент: функция CH347GPIO_Set устанавливает состояние всего GPIO-контроллера в чипе и поэтому принимает в себя три битовые маски с конфигурацией каждого пина. Функции GPIO стандартные — вход/выход, плюс обработка прерываний с помощью специального callback'а:
Теперь можно запустить программу и посмотреть на результат. Если вы увидели шум (или мусор) на экране — значит вы всё делаете правильно и контроллер успешно проинициализирован.
На фото можно заметить перемычку между CS и массой, однако не все контроллеры дисплеев толерантны к постоянному низкому уровню на CS. На моей практике контроллеры ILI отказывались проходить инициализацию, если не разграничивать каждую транзакцию с помощью CS.
Теперь можно что-нибудь вывести. Подготавливаем изображение, преобразовав в 16-битный массив пикселей, переводим контроллер в режим записи в VRAM, отправляем изображение:
Потенциальных применений у такого гаджета много: можно сделать красивые анимированные часы, мониторинг датчиков, показ уведомлений или дублировать окно с основного ПК. А ведь когда-то ради такого покупали LPT-провода, дисплеи от Сименсов и вручную превращали параллельную шину в последовательную...
❯ Заключение
Вот такой интересный гаджет выпустила компания Waveshare — и, что радует, по очень приятной цене! Ссылку по понятным причинам прилагать не буду, но при желании вы сможете его найти на всех трёх крупных маркетплейсах. Кроме того, можно купить Breakout-плату с тем же самым чипом за ~500 рублей, но там не будет таких удобных переключателей и Dupont'ов.
К сожалению, теста JTAG в статье не будет. У меня пока нет готовых к работе необычных гаджетов, где можно было бы протестировать OpenOCD... однако мой HTC Dream всё ещё ждёт свою прошивку модема!
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Если вам понравилась статья...
И у вас появилось желание что-то мне задонатить (например прикольный гаджет) - пишите мне в телегу или в комментариях :) Без вашей помощи статьи бы не выходили! А ещё у меня есть Boosty.
Что думаете о таком преобразователе?
Что думаете об обзорах на оборудование? Есть смысл рассказывать о всяких ништяках, что я иногда покупаю для работы?
В наше время эталоном плавности и производительности среди мобильных устройств принято считать iPhone. Действительно, инженеры Apple проделали довольно большую работу по оптимизации скорости отрисовки и плавности интерфейса, однако не одним iPhone мы были едины!
В 2004 году, Palm выпустила уникальный смартфон, который сочетал в себе привычный интерфейс, широкий функционал, невероятную производительность и... эмулятор M68k. Я решил разобраться, в чём-же заключается его главный секрет и готов рассказать вам о Treo 650 во всех подробностях!
Для ЛЛ: особая архитектура ОС
❯ Предыстория
Устройства Palm всегда были уникальными и концептуально отличались от других карманных компьютеров. Пока другие производители гнались за самым мощным железом и функционалом, Palm делала акцент на обратную совместимость программ, высокую производительность и синхронизацию с ПК. История портативных гаджетов Palm начинается с КПК Pilot 1000, который вышел в 1996 году и стал одним из первых действительно массовых гаджетов в таком форм-факторе.
Pilot 1000 отдаленно напоминал современные смартфоны: у него был интерфейс, адаптированный для работы стилусом или пальцем, функционал органайзера, а также возможность установки сторонних программ и синхронизации с ПК. При этом у Palm'ов была одна очень интересная особенность: для ввода текста предлагалось использовать не виртуальную клавиатуру, а развитую технологию рукописного ввода Graffiti, которая стала визитной карточкой компании на протяжении долгих лет! Внутри Pilot'а был современный для тех лет процессор Motorola MC68328, работавший на частоте 16МГц и целых 128КБ оперативной памяти, а розничная цена составляла всего 299$, что обеспечило популярность модели и интерес со стороны разработчиков софта.
Прототип Pilot 1000, представляющий из себя Breakout-плату для MC68328!
После успеха Pilot 1000, Palm продолжила развивать линейку КПК на всё той-же аппаратной платформе, постепенно проводя её апгрейды: сначала вышел Pilot Personal/Professional с поддержкой модема от 3Com, затем Pilot III с 2МБ оперативной памяти, подсветкой экрана и ИК-портом, а годом позже и флагманский Palm VII с доступом к интернету с помощью сети Mobitex. К 2000 году для PalmOS вышло довольно много различного софта, причём большинство было платным и для его покупки надо было выписывать чек или покупать физическую копию на диске.
К 2001-ому году, Palm начала терять позиции на рынке карманных компьютеров из-за появления Microsoft PocketPC: операционная система на базе Windows CE имела многозадачность, позволяла легко портировать программы с ПК благодаря схожему API и поддерживала самые разные архитектуры процессоров. Несмотря на то, что устройства на PPC были значительно дороже, многие пользователи отдавали предпочтение именно им — и с этим нужно было что-то делать.
Маленькое инженерное чудо!
В марте 2001 года компания представила новую модель — m505, которая отличалась наличием 16-битного цветного дисплея, новым процессором Motorola Dragonball VZ, работавшем на частоте 33МГц и целыми восемью мегабайтами оперативной памяти, а также новой операционной системой PalmOS 4.0. Кроме этого, компания начала лицензировать PalmOS сторонним производителям, благодаря чему появилась линейка самобытных КПК Sony CLIÉ.
Однако уже в 2002 году, сомнительные перспективы низкочастотных процессоров Dragonball и устаревшей архитектуры m68k были очевидны для Palm и они решились на рискованный шаг: в новой линейке Tungsten они решили перейти на процессоры TI OMAP с архитектурой ARM. Но как тогда быть с уже существующим софтом, который распространялся на дисках? Правильно — встроить эмулятор m68k (PACE) в новую систему PalmOS 5.0 «Garnet»!
И если на первый взгляд эта затея кажется глупой, вы просто сравните Dragonball VZ и TI OMAP 1510:
Ядро: M68EC000 (корни идут от CMOS-версии M68k из 1985 года) vs ARM925T (почти самое современное ядро ARM на момент появления Tungsten, современнее только ARM926E)
Частота: 33МГц vs 144МГц
MIPS (число миллионов инструкций в секунду): 5.4 MIPS vs ~159 MIPS
Кэш-память: Отсутствует vs 16КБ для инструкций и 8КБ для данных
Таким образом, программы для m68k на ARM Palm'ах работали не хуже, чем на оригинальных устройствах, однако с SDK для новых устройств был очень неприятный нюанс...
В том же 2002 году, Palm выпустила первое устройство, где отошла от концепции рукописного ввода и установила полноценную QWERTY-клавиатуру — Tungsten W. Влияние BlackBerry на тенденции бизнес-устройств в те годы было очевидным, поэтому Palm разработали не просто КПК, а целый коммуникатор — с собственным радиомодулем, дисплеем высокого разрешения и... почему-то всё тем-же процессором Dragonball VZ!
Пс, если кому-то Tungsten W не нужен или вы хотите его продать — пните в комментариях пожалуйста. Можно даже нерабочий — ремонтировать такие штучки для меня одно удовольствие!
На то время процессор в Tungsten W казался малость устаревшим... Но сейчас я понимаю — по сути это один из немногих смартфонов с процессором m68k помимо Motorola Accompli!
А через год компания Handspring, созданная выходцами из Palm, представила своё собственное видение смартфона на PalmOS — Treo 600, который является кровным братом Treo 650, о котором мы с вами сегодня и поговорим. Но перед тем, как переходить к обзору устройства — мы с вами сначала его разберём и узнаем, что у него скрывается «под капотом» — здесь действительно есть на что посмотреть!
Свой Treo 650 я купил на китайской онлайн-барахолке примерно за 1.900 рублей вместе с кабелем, а выкупить и привезти его в Россию мне помогли подписчики Роман, Андрей и сервис YouCanBuy, за что вам огромное спасибо.
❯ Что внутри?
Разборка начинается с снятия задней крышки и выкручивания шести винтиков по периметру устройства. Однако перед разборкой я сразу обратил внимание на необычный 6-пиновый АКБ, который явно напоминал HTC'шные аккумуляторы тех лет. Главная их особенность в том, что на BMS (плата защиты) распаяны дополнительные чипы для обмена информацией о модели аккумулятора, его заряде, температуре и другие необходимые данные. Если запитать коммуникатор HTC тех лет от «лабораторника» просто подключив плюс и минус, то гаджет скорее всего включится, но драйвер контроллера питания не даст разрешение на старт зарядки и в меню не будет виден индикатор уровня заряда.
Владельцы HTC Gene/O2 Xda Mini II поймут...
После разборки нас встречает «бутербродная» плата и до боли знакомая схемотехника. К сожалению, в процессе эксплуатации гаджет залили водой — на защитных экранах и контактах видны следы лёгкой коррозии, а на тест-поинтах и пятачках не распаянных SMD-компонентов — заметные потемнения.
Где-то я это уже увидел... Но пока это всё ещё лишь предположения
Начнём пожалуй с верхней части бутерброда — платы, на которой виднеется слот под сим и IMEI. Крепится она на двух винтах и подключена с помощью разъёма штырькового типа. Думаю всем читателям уже очевидно, что это GSM-модем устройства, однако даже такая банальная вещь реализована здесь весьма необычным способом. Дело в том, что в коммуникаторах нулевых, использование внешних модемов было отнюдь не редкостью. В тех-же самых устройствах RoverPC и O2 можно было встретить внешние платы-модемы Telit, припаянные к основной плате методом поверхностного монтажа. Однако здесь, судя по всему, если радиочасть устройства выходила из строя, можно было самому просто поменять плату с модемом на другую и продолжать пользоваться смартфоном как ни в чем не бывало!
Конструктивно модем достаточно прост и построен на относительно распространенной компонентной базе тех лет:
В качестве Baseband-процессора процессора используется система на кристалле Broadcom BCM2132. На самом деле, этот SoC самодостаточен и способен в одиночку выполнять практически все функции необходимые для простого кнопочного телефона. Состоит он из одного ядра ARM926EJ, способного работать на частоте до 74МГц, DSP-сопроцессора на архитектуре Teaklite, контроллера дисплея, камеры, SD-карт, NAND-флэшек, а также шин общего назначения — I2C, SPI, UART, USB.
Чуть правее расположилась так называемая eMCP-микросхема Spansion S71PL032JA0, которая в одном корпусе содержит как оперативную, так и флэш-память, позволяя значительно сэкономить место на плате. Объём памяти скромный — 2МБ PSRAM и 4МБ NOR-памяти. Классика!
Выше процессора находится чип Infineon PMB6258, которыйвыполняет задачи RF-фронтэнда или трансивера. Простыми словами, именно он ответственен за преобразование аналогового сигнала с антенны в цифровой пакет, который затем обрабатывает DSP в Baseband'е. Справедливо и обратное: когда Baseband подготовил GSM-пакет, он отсылает его в трансивер, а тот «пускает» его в эфир!
Рядом с PMB6258 расположился чип PMB2259, который выполняет роль VGA-драйвера или же усилителя сигнала. Вполне возможно, что это некий предусилитель, поскольку рядом с флэш-памятью скрывается ещё один безымянный GSM-усилитель.
Принципиальная схема трансивера в паре с бейсбендом Infineon S-Gold
С модемом закончили, здесь всё стандартно. Пора разбирать и изучать гаджет дальше: вытаскиваем шлейф клавиатуры и видим очень интересный парт-номер...
HTC... Ну мало-ли, в те годы они были крупным ODM и OEM-производителем, может Palm Treo просто собирали на их заводах?!
После снятия защитных экранов сомнений больше не осталось: рядом с процессором расположился чип производства самой HTC — 30H80049. Точное его назначение мне неизвестно, но по опыту с другими коммуникаторами этого вендора осмелюсь предположить, что он выполняет роль контроллера питания. Поскольку чипы HTC используются только в собственных разработках компании — становится очевидным, что аппаратную часть Palm Treo разработал именитый тайваньский производитель! Кто бы мог подумать?
Также косвенно это подтверждает тот факт, что кроме PalmOS были Treo с Windows Mobile на борту, а как известно — HTC один из главных производителей устройств на WM.
Далее мы видим сердце основной части устройства — топовый для своих лет чипсет Intel PXA270. На самом деле, о крутости этого процессора можно рассказывать часами, чипы на базе микроархитектуры XScale были легендарными в гиковских и промышленных кругах благодаря хорошей документации, отличной производительности и наличию порта Linux. Но давайте по порядку:
Одно ARMv5-совместимое ядро, построенное на собственной микроархитектуре Intel XScale, способное работать на частоте до 624МГц. Также PXA270 поддерживал набор SIMD-инструкций Wireless MMX (олды смахнули слезу, услышав знакомую аббревиатуру).
32 килобайта L1-кэша инструкций + 32 килобайта L1-кэша данных.
Возможность выполнения до 800 миллионов инструкций в секунду (MIPS) при максимальной рабочей частоте.
Контроллеры шин общего назначения: UART, I2C, SPI, USB.
Периферийные модули для управления DRAM, NAND и NOR-памятью, а также контроллер SD-карт.
Контроллеры клавиатуры, дисплея, ШИМ, GPIO и даже встроенный RTC...
64МБ встроенной NOR-памяти типа StrataFlash
И всё это будучи изготовленным на 180нм техпроцессе!
Чуть ниже процессора расположился один-единственный чип SDRAM-памяти производства Infineon объёмом в 32МБ, а также микросхема NAND-памяти M-Systems объёмом аж в 64МБ. Одна флэшка под систему, вторая под пользовательские данные — где такое ещё можно увидеть?!
Над процессором можно заметить микросхему Broadcom BCM2035, которая выполняет роль Bluetooth-контроллера.
Около разъёма можно наблюдать ещё два «питальника» устройства: ШИМ-контроллер MAX1887, а также контроллер зарядки аккумулятора MAX1874E. Чуть ниже расположилась неизвестная микросхема, судя по характерной для Sony маркировке — это контроллер дисплея.
Не менее интересен и сам дисплей смартфона — это крупная 2.8" матрица Sony ACX533AKM с разрешением аж в 320x320, выполненная по технологии TFT-LCD (LTPS). По меркам 2004 года это очень большое разрешение для кнопочного устройства, примерно как в наше время 4K в смартфоне!
Лично меня удивляет тот факт, что на шлейфе присутствует нетипично-большое количество обвязки и в первую очередь внешняя микросхема формирования BIAS-напряжения (контрастности) TI TPS65110, который обычно встроен в сам кристалл дешифратора. Кроме того, похоже что сразу на шлейфе распаян драйвер подсветки — такое тоже встретишь не часто!
Ну что-ж, теперь мы знаем, что у Treo 650 находится «под капотом». На самом деле, у смартфона достаточно необычный даже по меркам тех лет конструктив, местами он напоминает плату самого первого коммуникатора от HTC — Wallaby и именно благодаря этой характерной преемственности, я сразу же понял откуда идут корни устройства!
С оценкой аппаратной части устройства мы закончили, давайте перейдем к программной!
❯ PalmOS — это чудо?
После включения нас встречает калибровка тачскрина, диалог первоначальной настройки и наконец главный экран. У Treo была интересная особенность: концепции рабочего стола в привычном понимании у него могло и не быть, а главным экраном являлось меню приложений, которое было разделено на несколько подгрупп.
В отличии от современников на Windows Mobile, Treo работает невероятно быстро. Почти все приложения открываются моментально и сразу готовы к работе, никаких экранов загрузки, ANR и тормозящих интерфейсов — всё работает так, как в новом iPhone сразу после покупки. И хотя iPhone куда более плавный, чем Treo 650, в некоторых кейсах смартфон от Palm показывает себя не хуже, а то и лучше какого-нибудь iPhone 15 на самой последней iOS!
За такой впечатляющей производительностью скрывается сразу две архитектурные тайны PalmOS. Первая заключается в том, что система от Palm «однозадачная» — и в ней одновременно может работать только один процесс, а для реализации отложных задач предлагается использовать кооперативную многозадачность и события. На самом деле, в ядре системы есть потоки и задачи, однако API для них задокументировано плохо, а планировщик включается лишь по запросу. Таким образом, приложению доступно практически всё процессорное время без необходимости делить его на кванты.
Вторая тайна удивит вас не меньше: помните в начале статьи я рассказывал о встроенном эмуляторе m68k — PACE? Дело в том, что Palm по каким-то причинам не успела портировать системные приложения на ARM и поэтому почти все системные и сторонние программы написаны для архитектуры m68k и выполняются в эмуляторе, сохраняя при этом невероятную производительность! А секрет здесь прост: дело в том, что PACE эмулирует только само процессорное ядро, но не весь КПК Palm. Когда программа вызывает системную функцию, эмулятор её перехватывает и вызывает соответствующую нативную реализацию для ARM.
По такой-же концепции написан эмулятор PPSSPP, а также слой совместимости с x86 в Windows 10 for ARM. По сути, это превращает нативные m68k-приложения в что-то типа интерпретируемых...
Интересно также то, что у PalmOS по сути и не было концепции файловой системы. Приложения хранили свои данные в собственных базах данных, которых могло быть несколько, а сделано это было для упрощения процесса синхронизации с компьютером. Для этого у Palm'ов была очень удобная программа — HotSync. С её помощью производился процесс авторизации пользователя, устанавливался софт (но никто не мешал устанавливать программы с SD-карты), делались бэкапы, а также переносились мультимедийные файлы.
Процесс синхронизации
Не менее интересна реализация сетевого стека в Palm'е, которая позволяет прицепить PPP вообще к любым портам в Treo. Сеть через UART? Пожалуйста. Сеть через ИК-порт — тоже без проблем. Сеть через BT или модем 3Com от модели 1998 года? Вообще без проблем! Можно было подключить даже Wi-Fi модуль в формате SDIO-карточки!
Однако в современном интернете у Treo 650 уже всё не так хорошо. К почтовым серверам с SSL он подключится не может, а браузер даже OpenNet не открывает. Это очень грустно...
Зато у Treo 650 всё хорошо с играми. В своё время известный мобильный издатель Astraware портировал на PalmOS многие Shareware-хиты нулевых. Здесь есть полноценная Zuma, Raging Thunder, классические игры Atari, арканоиды, головоломки и множество других игр из нулевых. Не все они работают идеально быстро (в том числе из-за необходимости эмуляции m68k), но поиграть было во что!
А для тех, кому не хватает нативных приложений, есть экзотическая Java-машина от IBM с поддержкой MIDP 2.0. Благодаря ей появляется возможность играть в легендарные игры для J2ME-телефонов, если они не используют специфичное API по типу 3D...
❯ Заключение
Вот такими были смартфоны Palm в начале нулевых годов. По правде сказать, Treo контрастирует на фоне Windows Mobile и Symbian-смартфонов не только невероятной производительностью, но и весьма странными архитектурными решениями. Уж чего-чего, но однозадачную ОС в смартфоне 2006 года точно не ожидаешь встретить, когда даже в самых недорогих и простых кнопочниках трудится полноценная RTOS!
Однако Treo 650 кажется диковинкой только в наше время. В те годы это было желаемое устройство для тех, кому необходимо много переписываться, читать и даже играть... Надеюсь, вам было интересно!
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Что думаете о Palm Treo 650/680?
Что думаете о сравнении производительности с iPhone?
Что думаете о таком формате статей?
Если вам понравилась статья...
И у вас появилось желание что-то мне задонатить (например прикольный гаджет) - пишите мне в телегу или в комментариях :) Без вашей помощи статьи бы не выходили!