Flipper Zero — приехали экраны, стартурем массовое производство | Новые функции

j13ws-uzy2uezze4g5tlq5o2nz8.jpeg

Good news everyone! Нам наконец приехали LCD-экраны. Это значит, что у нас есть все необходимые компоненты для начала массового производства Флипперов. Сейчас у нас есть 60k экранов, и этого хватит, чтобы произвести Флипперы, заказанные бэкерами на Кикстартере, а также часть предзаказов, сделанных на нашем сайте. Внутри истории о том, что мы делали все это время, а также план по производству и доставке.


hj9dnk2hr_bys-dbctmzrcioqdo.jpeg
Коробки с LCD экранами для Flipper Zero

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

Что мы делали, пока ждали компоненты?

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

Над Флиппером работает команда больше 30 человек full time. Уже проделана огромная работа, и многое ещё впереди.

  • Написано более 90k строк кода
  • Закрыто более 2000 задач в Jira
  • 85% из заявленных функций Флиппера уже реализовано
  • Написаны первые прототипы мобильных приложений под Android и iOS
  • Написано десктопное приложение qFlipper под Windows/macOS/Linux
  • Для 20 труднодоступных компонентов подобрано и протестировано более 60 альтернатив (ЭТО БЫЛО ОЧЕНЬ БОЛЬНО)

image-loader.svgНомер задач в Jira перевалил за 2 тысячи

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

Новые функции в Sub-GHz

Новое приложение Sub-GHz уже умеет расшифровывать сигналы более 50 разных производителей пультов, и база постоянно дополняется. Мы надеемся, что силами сообщества сможем собрать саму полную открытую базу данных радиопротоколов разных производителей.

Частотный анализатор


Для того чтобы принять сигнал от пульта, нужно сначала настроить приемник на нужную частоту. Но что делать, если вы не знаете на какой частоте работает пульт? Для этого мы сделали функцию частотного анализатора. Она сканирует все частоты и показывает, на какой частоте слышен сильный сигнал рядом.
[Видео] Частотный анализатор показывает на какой частоте работает пульт

Разумеется, эта функция не заменит полноценный частотный анализатор, ее значения могут быть неточными и показываться с погрешностью, но она даст понимание, в каком частотном диапазоне работает пульт. Почти всегда это каналы в популярных диапазаонах 315/433/868 MHz.

Перехват сигнала

Основная задача Sub-GHz — анализировать услышанные сигналы. Теперь функция перехвата сигнала стала по-настоящему мощной. Можно легко понять на каком протоколе работает конкретный радио пульт и сразу увидеть декодированный сигнал на экране. Иконка замочка показывает, используется ли в протоколе шифрование или нет.

[Видео] Флиппер перехваты и расшифровывает сигналы пультов

Нужно установить базы данных на SD-карту
image-loader.svg
Для расшифровки динамических протоколов, Флиппер использует ключи и мануфактурные коды производителей. Эти файлы устанавливаются на SD-карту вместе с остальными базами данных при обновлении прошивки. Чтобы получить актуальные базы данных, нужно вставить SD-карту и обновить прошивку через qFlipper или Web Updater.

Запись RAW сигнала

В случаях, когда Флиппер совсем не знает протокол, он все равно способен перехватить сигнал в сыром виде. Эта функция записывает все услышанные в эфире сигналы в сыром виде без обработки сразу на SD-карту.

[Видео] Запись сырого радио-сигнала без декодирования

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

Флиппер — не SDR
image-loader.svg
Важно понимать, что радиомодуль во Флиппере — это не SDR, поэтому вам необходимо заранее знать точную частоту и модуляцию сигнала, чтобы он был корректно записан через функцию RAW.

BadUSB появился

Функция BadUSB теперь работает! Мы потратили много сил на разработку режима USB HID и переключение назад в обычный режим. Теперь эта функция работает стабильно и надёжно.

Язык скриптов для BadUSB совместим с Rubber Ducky Language, поэтому можно будет переиспользовать уже созданные скрипты для USB Rubber Ducky и других подобных устройств.

[Видео] Флиппер прикидывается USB клавиатурой и вводит любую последовательность символов

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

USB <-> UART мост


aoxqtcfimzkwrrjpe7t6ie7ecrs.jpeg
Благодаря гребенке GPIO во Флиппере его можно использовать как универсальный USB мост для разных промышленных протоколов. Пока мы реализовали самый популярный протокол UART, который является стандартом де-факто для отладочных портов и консолей в железках. Теперь вам не нужны USB-UART переходники, ведь всегда с собой есть Флиппер.

В этом режиме также реализована поддержка пинов DTR/RTS, поэтому таким адаптером можно прошивать устройства вроде ESP8266/ESP32, которые требуют управляющих сигналов помимо RX/TX линий.

[Видео] Флиппер переключается в режим UART-адаптера и выводит лог загрузки одноплатного компьютера

Пока функция USB Serial реализована в черновом интерфейсе, скоро пользовательский интерфейс будет выглядеть так:
image-loader.svg
В настройках этого режима доступны такие опции:

  • COM Port — какой виртуальный USB COM-порт использовать. При выборе 0 (CLI) режим активируется на порту основной консоли Флиппера. При выборе 1 будет создан второй COM-порт, а основная консоль останется доступна по старому порту в операционной системе
  • Baudrate — скорость порта. Можно задать скорость вручную, в зависимости от вашего устройства, либо выбрать режим Host, тогда Baudrate будет задан автоматичеки при подключении к консоли в операционной системе, например с помощью утилит screen или minicom
  • UART Pins — во Флиппере есть два аппаратных UART: на пинах 13,14 (USART) и 15,16 (LPUART)
  • DTR/CTR — настройка задает пины для управляющих сигналов. Так как они реализованы полностью программно, можно задать любые цифровые пины на гребенке GPIO

Новый qFlipper

Программа qFlipper — это десктопная кроссплатформенная утилита для обновления прошивки, баз данных, создания бекапов и прочего во Флиппере. Она написана на Qt и работает во всех популярных операционных системах: Windows/macOS/Linux.

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

[Видео] Обновление прошивки и баз данных на Флиппере через qFlipper

Flipper Protobuf RPC

Флиппер теперь имеет Protobuf RPC API, доступный как по USB, так и через Bluetooth LE. Этот протокол используется для обновления баз данных на SD-карте и любых других внешних взаимодействий с Флиппером. Например, через него можно транслировать экран на компьютер:

[Видео] Удаленное управление флиппером через обычную консоль

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

Для удобной работы с RPC мы подготовили высокоуровневую библиотеку на Go, позволяющую с лёгкостью работать с API Флиппера. Надеемся, что вскоре появятся реализации и на других популярных языках.

Страдания от замены компонентов

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

Фейл с питанием

Это один из примеров наиболее болезненной замены. В предыдущих постах мы писали, что не можем купить DC-DC конвертеры. Нам пришлось заменить их на альтернативные. Например, мы заменили DC-DC конвертер TI TPS62743 на его аналог TI LM3281YFQR.

image-loader.svg

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

Оказалось, что виноваты пульсации на 3.3v линии питания процессора, при том что в даташите на процессор STM32WB55 не сказано, что пульсации могут мешать работе. Вот тема на форуме ST об этой проблеме: Power supply ripple/pulsation causing BLE TX to fail

Так выглядит проблема и ее решение на осциллограмме:
image-loader.svgПроблемное питание процессора (красным) и с применением фильтра (желтым)

Красным показан обычный выходной сигнал LM3281 в ECO-режиме, полностью соответствующий даташиту. Видно пульсации в диапазоне 40mV. Это абсолютно нормально для этой микросхемы и не является проблемой. Однако в процессе тестов выяснилось, что если нарастание фронта превышает 6V/ms, то работа Bluetooth LE нарушается. Желтым показан сигнал, который нам удалось получить после применения доработки.

Пришлось отклониться от даташита LM3281: ухудшить добротность L14 в LC-цепи при помощи дополнительного сопротивления, что сильно сгладило «горки»; и добавить дополнительный LC-фильтр, чтобы максимально отдалиться от проблемной величины.

Особое внимание было уделено стабильности работы подсистемы и итоговому потреблению. Внимательный читатель может заметить, что LM3281 поддерживает PWM-режим, в котором пульсаций нет. К сожалению, вариант с переключеним в PWM-режим пришлось отбросить в самом начале из за повышенного энергопотребления и отсутствием гарантий от ST, что проблема затрагивает только BLE.

image-loader.svg
Наше решение проблемы с пульсациями питания на LM3281

Модуль Wi-Fi

Первая версия платы для разработчиков основывалась на модуле ST-Link V3, который сейчас недоступен к покупке. Мы долго вели переговоры с ST, надеясь получить 6 тысяч этих плат, заказанных бэкерами, но пока кажется, что этот модуль еще долго не появится в продаже.

Мы вышли из ситуации, спроектировав полностью новую плату на основе ESP32-S2 (Это совершенно новая версия ESP32, не тот старый чип к которому все привыкли). Функции отладки она выполняет за счёт проекта Black Magic Probe для которого мы затащили поддержку STM32WB55 и планируем дальше ее поддерживать.

m-zdjgffd8qtcetiioqgymkt4dm.jpeg
Отладочный модуль ST-Link заменен на Wi-Fi модуль

Благодаря Wi-Fi на борту, плата может выполнять гораздо более широкий спектр задач и теперь полезна не только разработчикам. После отгрузки всем бэкерам, заказавшим Devboard, этот модуль будет доступен в открытой продаже. Не переживайте, если не заказали его в BackerKit.

341qe69l_yezb8ulj5excrsytuw.jpegФото первой версии платы Wi-Fi модуля

План производства

Мы официально перешли в стадию MP (Mass Production) c нашим заводом. В течение 4 недель производственная линия достигнет мощности 1k устройств в неделю и будет постепенно увеличиваться до 10k в неделю.

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

otjzid55eqtwklfpq7x4rippfug.jpeg
Теперь экраны закрыты нормальной защитной пленкой
u7pvb2wm0lcmskuicwbooiqbzye.jpeg

© Habrahabr.ru