
Все началось с того, что я забыла ключ от ворот во двор и вспомнила свою прошлогоднюю идею сделать что-то, похожеена Флиппер, но компактнее, дабы всегда носить с собой. В прошлом году до реализации не дошли руки, а вот в этот раз — дошли.
Приглашаю под кат, чтобы посмотреть, что получилось и обсудить, как можно сделать лучше :)
Flipper Zero
Flipper Zero — портативное многофункциональное Тамагочи-подобное устройство, разработанное для взаимодействия с системами контроля доступа и другими системами, использующими для связи радиоканал. Устройство способно считывать, копировать и эмулировать метки RFID и NFC, радиопульты, iButton и цифровые ключи доступа, а также имеет интерфейс GPIO. (с) Wikipedia

Впрочем, думаю, что это всем известно и так. Команда Флиппера провела потрясающую работу, сделав очень качественную, интересную и проработанную штуку, о которой еще и знает примерно каждый, кто хоть немного заинтересован.
Широкая известность - это еще и экосистема. Кроме самого устройства существует несколько проектов модифицированных прошивок, большое количество сторонних приложений (можно посмотреть тут — Flipper Lab), десятки модулей расширения, как от самой команды, так и сторонних.
У меня Флиппер тоже есть. Он прекрасен, но, как я писала год назад, слишком большой, чтобы носить его с собой всегда. А ведь никогда не знаешь, когда забудешь ключи! Что же делать? Правильно. Делать свой :)
Первый вариант
Итак, поехали. Для начала формализуем требования:
Тотже функционал: SubGHz, NFC, RFID, ИК, iButton, GPIO. Здесь все просто — реализуем эти узлы примерно так же, как во Флиппере, схемы которого доступны на сайте.
Максимальная компактность. Тут два варианта — или отказаться от автономного режима вообще, а вместе с ним — от экрана и батареи, или все же сохранить автономность. Выберем второе, использовав компактный и доступный экран на SSD1306, а вместо большого аккумулятора используем CR2032 (или перезаряжаемый вариант — LIR2032). Да, запас энергии теперь куда меньше, поэтому режимом тамагочи придется пожертвовать — будем полностью выключать питание через минуту неактивности.
Совместимость с прошивками Флиппера в бинарном виде. Конечно, прошивки открыты и ничего не мешает внести небольшие изменения, но это все‑таки снижает удобство. А в нашем устройстве экран OLED, который инициализируется иначе и «просто так» работать не будет. Что делать? А мы добавим еще один STM32 между экраном и сердцем устройства — STM32WB55! И заодно попросим его эмулировать ответы от PMIC и Fuel Gauge и управлять питанием.
Минимальная стоимость и простота производства. Немного упростим девайс и выберем компоненты, доступные в JLCPCB прямо сразу.
Для разработкиплаты я решила попробовать KiCad. Долгое время мне казалось, что он слишком сырой и даже недорогие EDA вроде DeepTrace заведомо лучше, не говоря уж про Altium, но один друг активно рекламировал кикад, так что — почему бы и нет?

Плата четырехслойная, два слоя отданы под GND и VCC, два внешних — сигнальные. До сих пор многие думают, что многослойные платы — это сложно. На самом же деле даже 4 слоя существенно упрощают работу и почти убирают сложности с правильной разводкой земли и питания. Срок же изготовления и стоимость у китайцев растут совсем незначительно — три дня вместо одного.

Чем заняться, пока платы не пришли?
Напишем прошивку второго MCU, инициализирующую дисплей.
Это несложно — принимаем данные для дисплея по одному SPI, фильтруем всё, кроме посылок с данными, инициализируем дисплей самостоятельно, а данные изображения отправляем, как есть (в данном случае, их формат совпадает).
Кстати, на картинке слева видно, что будет, если обрабатывать данные недостаточно быстро :)
Проходит две недели, и платы у меня на столе. Но увидела я их раньше — можно попросить китайцев сфотографировать собранные платы до отправки. Вот так:

Вместо STM32WB55RGV использован модуль STM32WB5MMG — это то же самое, только с интегрированными антенной, кварцевыми кристаллами и некоторой другой обвязкой. Отлично, подумала я, плата будет проще!
Как оказалось, решение было так себе :) У чипов есть однократно записываемая память, то место, где хранится уникальное имя Флиппера, его версия, регион и другие данные. У отдельных MCU эта область пуста. А у модулей MMG заняты первые 8 байт данными калибровки антенны, и это именно те 8 байт, которые нам нужны!

В первой версии, конечно, ошибок было порядком. Перепутаны MISO и MOSI у NFC-чипа. Перепутана часть ножек ОУ, на котором собран RFID. Центральная кнопка замыкается на землю, а должна на VCC.
Но версия на то и тестовая, чтобы все это выявить, так получается даже быстрее, чем очень-очень внимательно пытаться проверить всё до заказа.
И к счастью, у нас в команде есть джедай Олег, способный перекоммутировать перемычками дорожки на расстоянии 0,1 мм не только без микроскопа, но даже без лампы и лупы! Мне, например, это сложно даже с микроскопом :) Я все-таки кот, у меня немножко лапки!
Kiisu

Почему Kiisu? Надо же было как-то назвать, не используя слово Flipper, ведь мы не имеем отношения к Flipper Devices Inc :)
Kiisu — котенок или кошечка на эстонском языке. Вполне подходит, как мне кажется — у нас милое маленькое устройство, но при этом способное на многое.
Кроме того, я просто люблю котов.
В этой версии было решено не только исправить ошибки, но и переделать формфактор под размер кредитной карты. Да, размеры стали больше, но это позволило перенести все компоненты на одну сторону, уменьшив толщину до четырех миллиметров (это примерно 5 пластиковых карт, сложенных вместе). А значит, Киису теперь можно просто положить в кошелек и всегда брать с собой!
Что еще изменилось?
Само собой, были исправлены ошибки.
Вместо модуля STM32WB5MMG теперь обычный STM32WB55RGV. Да, пользователь сможет записать в OTP-память все, что ему нравится.
Добавились датчик влажности и температуры, акселерометр и компас LSM303, возможность установить ToF дальнометр VL53xxx и датчик качества воздуха BME680.
Добавилсядатчик света (а на самом деле — просто фототранзистор) и вместе с ним — возможность проверять светодиодные лампы и мониторы на предмет мерцания.
Плата стала шестислойной.


Что дальше?
В течение 1–2 месяцев мы планируем начать продажи Киису всем желающим. Пока — в Европе, но работаем и над другими вариантами. Ожидаемая цена — в районе 60 EUR, но это пока не очень точно.
И конечно, мы планируем дальше вносить улучшения, причем оперативно. Форм‑фактор останется таким же и больше меняться не будет, но нам не нужно выпускать сразу миллион штук — а это позволяет действовать куда гибче.
Напишите в комментариях, что бы вам хотелось добавить, чтобы сделать Кошечку лучше, и возможно, уже в четвертой версии оно появится!