Що всередині блакитного дельфіна

Що всередині блакитного дельфіна



Препаруємо дельфіна: що у Flipper Zero

Для того, щоб ефективно розробляти під Flipper, треба не тільки розуміти, як писати код, а й розуміти, що у нього всередині.

На «великих» комп'ютерах є купа рівнів абстракції та апаратних засобів зробити життя користувача та розробника простіше. У результаті, навіть якщо ви пишете на голому С, вас все одно не хвилює, як конкретно по PCI передається інформація, як працює система живлення процесора і яка там мікросхема використовується для зберігання BIOS/UEFI.

Тут все не так, надто близько до заліза відбувається технологія. Стаття – це короткий екскурс у те, як влаштований Flipper із залізної точки зору. Поїхали.

Для початку, давайте його розберемо. В принципі, розбирання досить просте, дуже простіше, ніж деякі ноутбуки. Але деякі тонкощі все ж таки є.

Для початку, варто витягнути microSD-карту та вимкнути фліппер (Settings-Power-Power OFF-OFF):

Перша дія напрошується сама собою - 4 гвинти ззаду (червоні позначки, 1). Тут чатує перша тонкість - потрібна довга викрутка, глибина залягання гвинтів - приблизно 12мм.

Після викручування гвинтів настає черга двох клямок - у місцях, позначених синіми стрілками, 2. Вони легко клацають, якщо нігтем розширити щілину між половинками корпусу. Головне не перестаратися - піни для iButton (зелене, 3) проходять усередині довгої трубки в задній половинці корпусу для захисту від механічного впливу вбік, але їй дуже зручно їх і виламати, якщо підняти з сильним перекосом. Тому клацаємо клямки по одній і знімаємо вертикально вгору половинку.Боятися не треба, воно не настільки крихке, як вам зараз уявилося, але і піднімати під 90 ° половинку з боку USB-роз'єму теж не варто.

Відкладаємо половинку убік. Там розташовані дві антени, 125kHz та 13MHz RFID, але плата з ними приклеєна до корпусу, і подивитися на них не вдасться.

Натомість у нас є інша половинка:


Для подальшого розбору – відлупуємо вузький шлейф:

Викручуємо один утоплений гвинт:

І другий, що кріпить маленьку плату із пружинними пінами:

Тепер її можна дістати:

На ній: три IR-світлодіоди, один IR-приймач, iButton-піни:

Ну і кілька обв'язки, куди ж без неї.

Тепер, коли плата більше не заважає, можна викрутити ще один гвинт:

І витягнути основний модуль з другої половинки корпусу (ось тут стане в нагоді заздалегідь витягнута microSD-карта, якщо її не витягнути, на цьому кроці вона заважатиме):

До речі, розробники фліппера – ошуканці. Я був упевнений, що навколо отворів GPIO — корпуси гнізд PBS:

А виявляється, це просто їхня імітація в пластиці корпусу.

Ще на цій половинці – віконце з IR-фільтром. На відміну від скла екрана закріплено не УЗ-зварюванням, а просто на піні, що плавиться:

Розбираємо далі внутрішній модуль. Для цього від'єднуємо шлейф, що залишився:

І тепер треба звільнити плату із засувок. В принципі, її можна і не діставати, подальшому розбору вона не заважає, але якщо вже почав, зупинитися важко.

Зсуваємо плату у напрямку до нижніх клямок, а потім піднімаємо плату «наверх» (перпендикулярно модулю) в точці один, звільняючи її від однієї клямки, і зрушуємо в точці два у напрямку до верхніх клямок, звільняючи нижні.

Тепер так само, зрушуючи плату вниз (точка три), звільняємо верхню клямку і витягуємо (точка 4) з бокової клямки.Оп, плата вільна:

До речі, оцініть, що для зменшення товщини в пластиці зроблені отвори під найвищі компоненти:

До речі, один з отворів залишився, зважаючи на все, від попереднього дизайну плати — навпроти нього на платі порожнеча. Запитав розробників, так і виявилося. Більше того, операційників два теж тому — коли виникла потреба переробити схемотехніку цієї частини, механіка вже була зафіксована і прес-форму переробляти вже не можна було, тому будь-які зміни у схемотехніці доводилося узгоджувати з корпусом. Ось тут простіше було поставити чотиривірний ОУ, але не вийшло, довелося ставити два подвійні.

Продовжуємо розбирати частину, що залишилася. Ось цей гвинт так і проситься бути відкрученим для подальшого розбирання, але це не так: він просто зміцнює помаранчеву деталь

До речі, оцініть, яка краса:

Ця деталька одночасно тримає ремінець і направляє для карти пам'яті, однією деталькою, щоб менше робити прес-форм.

Загалом, нехай шуруп вас не дурить і залишається там, де був. Для подальшого не потрібна викрутка, досить просто розкрити дві половинки внутрішнього модуля як книжку з боку GPIO. Там невелика клямка (синя стрілка), але її зламати складно.

Розділитись частинам заважає провід до батареї, його треба відключити:

Обережніше зі шлейфом, його треба акуратно витягнути через отвір у корпусі.
І у нас дві половинки:

Давайте від'єднаємо шлейф (запам'ятовуйте, як він встановлений, нічого вам не завадить вставити його потім нагору ногами і дивуватися, чому не працює):

До речі, помнете маленьку плату? Яка з пінами домофону. Я спочатку подумав, що там якесь сміття прилипло до плати. А потім придивився:

І знаєте що? Ніфіга це не сміття.Це крихітний TVS-діод для захисту від статики у корпусі WLCSP – Wafer Level Chip Scale Package. Тобто, це найнатуральніша кремнієва вафля, нарізана на окремі компоненти і напаяна прям так на плату, без корпусу.

На основній платі також є такі:

Я навіть спеціально пішов на кухню, знайшов сірник і поклав поряд. Мені здається, штук 50 по об'єму в сірникову голівку поміститься.

Продовжуємо розбирати. Від'єднуємо пластикову накладку із клавіатурою від основної плати.
Для цього викручуємо два гвинти (сині), і розділяючи з боку USB-роз'єму, звільняємо клямку (червона)

Розглядаємо складну конструкцію клавіатури:

О, дельфінчику. Замість вічка — дірочка.

Хоча насправді там дірочка не просто так, а для штифта:

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

Окреме спасибі конструктору, який використовував у фліппері всього два типорозміри гвинтів: довгі і короткі. Короткі використовуються при прикручуванні рамки з клавіатурою до плати, для кріплення помаранчевої деталі та плати з IR та iButton:

Загалом, все, ми розібрали фліппер:

Однак, не сильно просунулися у розумінні того, з чого він складається. Давайте це виправимо.


У процесі колупання в даташитах і ставлення питань розробникам намалювалася ось така схема:

Вона страшна та незрозуміла, але це лише на перший погляд. Давайте розглядати її уважно та з коментарями.

Для початку є основний мікроконтролер, на якому будується пристрій, STM32WB55.

Має два ядра. Одне основне, Cortex M4, FPU, до 64 MHz, навіть MPU є (MMU немає звичайно), 219.48 балів CoreMark.Для порівняння, у коханої ардуїнщиками ATmega2560 – 4.25 балів, у ESP8266 – 191 бала. Втім, у embedded пузомірки навряд чи відіграють хоч якусь роль, вибір йде швидше за периферією, режимами сну та споживанням у них, ціною та в нових реаліях — за наявності на складах. А чиста здатність процесора пережовувати числа трапляється рідко.

Друге ядро ​​— Cortex M0+, але загалом усім абсолютно було б байдуже, якщо воно було M1, M2, M-1, M√(-1), тому що розробник до нього доступу не має. Ядро повністю віддано під керування радіо-стеком, і все що може зробити розробник - це завантажити туди одну з декількох версій бінарника, що різняться різними фічами, відправляти туди команди, пересилати та приймати дані для радіо.

Бінарники є різні: BLE peripheral, BLE central, BLE peripheral+central, Thread, Zigbee, чистий 802.15.4, BLE+Zigbee, BLE+Thread, BLE+802.15.4 тощо. Нещодавно перейшли з BLE peripheral+central на BLE peripheral заради економії пам'яті, але тепер фліппер не вміє підключатися до інших пристроїв як майстер, тільки як ведене. Втім, завдань, у яких до нього треба підключити BLE-клавіатуру, було, скажімо, мало.

Цікавий факт: ST називає бінар для другого ядра як «copro», і що найстрашніше, розробники з цим погоджуються. Бінарники зашифровані і розшифровуються завантажувачем безпосередньо на чіпі. Тому лов у них багів — дуже цікава річ. Наприклад, одна з попередніх версій бінарника за певних умов та довгої роботи випалювала щось у тракті BLE, у самому кремнії, від чого він переставав працювати на прийом. Після капання на мізки ST вони визнали баг та випустили апдейт. І таких ситуацій, дрібних і не дуже вагон за весь час розробки.

Багато в чому це відбувається тому, що контролер новий, і порожня сторінка ERRATA зовсім не означає, що помилок немає, вона означає, що заповнювати її будуть перші користувачі.


Із процесором розібралися, йдемо далі. Живлення. О, харчування це складно!

У нас є роз'єм, з якого приходить 5в, у нас є акумулятор, який видає 2.8-4.2в та контролери, які хочуть не більше 3.3в.

Загалом, є bq25896 – контролер зарядки батареї, який вміє її заряджати. Він же вміє робити з напруги батареї 5в (в основному для того, щоб живити інші пристрої через той же USB, типу, як працює в телефонах: вставили зарядку, заряджається, вставили клавіатуру/флешку/мишку - на неї подався 5в і вона почала працювати ). Розробники вирішили не робити з фліппера повербанк, зате зробили з цієї фічі керовані 5в на гребінці. Керовані вони умовно, тому що при підключенні фліппера USB вони там все одно з'являться, хочете ви того чи ні. Але ними можна керувати під час живлення від акумулятора. Також їх використовує для підтяжки iButton.

Цей bq25896 управляється по I2C, і може включати-вимикати свій Step-Up за бажанням користувача.

Ідеальний діод, вказаний на схемі - це конструкція з мосфету, яка веде себе як діод, але на відміну від нього, не просаджує на собі піввольта. Ось він:

У пристрої це виглядає так:

Великий мосфет і два транзистори в одному корпусі нижче.


Ще у bq25896 є кумедна фіча - shipping mode.

На кнопку «назад» повішено не тільки GPIO процесора, а й один із контактів bq25896, який запускає його з вимкненого стану. Тобто.на фабриці в контролер заливається прошивка, робляться необхідні тести, потім контролер здійснює харакірі - просить bq25896 вимкнутись, той вимикається і обрубує контролеру живлення (крім RTC, про це трохи нижче), і тепер пристрій може дуже довго лежати в коробочці, не витрачаючи заряд, цей shipping mode (коли на початку статті ми робили Settings-Power-Power OFF-OFF, то це якраз воно). Але за довгим натисканням (~1с) кнопки "назад" bq25896 прокидається і включає пристрій. А за дуже довгим (~15с) він перезавантажує весь девайс харчування. У процесора є, звичайно, спосіб ресета (і програмного, і апаратного), але довге натискання - це спосіб перезавантажити взагалі ВСІ, все одно, що акумулятор від'єднати.


Окрім bq25896 (Charger) є ще bq27220 (Gauge). Тобто. вимірник.

Він має шунт, він вважає струм, напруга, відсоток заряду, цикли зарядки, жвавість батареї і так далі.

Підключається так само, I2C і віддає це контролеру.

Ось цей екран у Setting-Power-Info – це і є дані з гаужу.

Незважаючи на те, що він вимірює батарею, на відміну від контролера зарядки живиться він не від неї, а від загальної лінії 3.3 (про неї буде нижче), так що при відключеному пристрої нічого не споживає.

Ось він, на платі, поруч із шунтом, який раз на вісім його більший:

У частині вимірювання заряду, його, звичайно, можна замінити, на ADC мікроконтролера, який вимірює напругу батареї. Але зайвого ADC, за словами розробників, не було, тому вирішили поставити гаудж.

Ось шматочок гербера, на якому видно, як підключений шунт - за чотирипровідною схемою, яку ще називають "схемою кельвіна".

Це робиться для того, щоб падіння напруги на провідниках до опору не додалося до падіння напруги на самому опорі. Особливо важливо це, коли опір вимірювального шунта можна порівняти з опіром провідників на друкованій платі.

Ось, наприклад, як рекомендують розводити шунти:


Ще від батареї безпосередньо RS3221 - це малоспоживаючий лінійний регулятор, який робить 3.3в для роботи RTC основного контролера.

RTC споживає вкрай мало, тому втрати на лінійному стабілізаторі некритичні, але годинник фліппера не збивається при відключенні живлення і поки він їде в посилці до користувача.


Тепер про все інше. Далі йдуть пристрої, які хочуть не більше 3.3в, тому для них є два DC-DC стабілізатори, LM3281. На одному стабілізаторі висять 3.3в на гребінці і SD-карта, на другому - все інше: bq27220 (Gauge), lp5562 (драйвер світлодіода та підсвічування екрану), ST25R3916 (NFC), CC1101 (трансівер SubGhz)

Стабілізатори ці Step-Down, тому при зниженні напруги батареї нижче 3.3, цих шинах буде напруга батареї, а чи не 3.3, тобто. до 2.8 ст.

Два стабілізатори, тому що SD-карта. Вона, по-перше, по-хорошому вимагає управління харчуванням при ініціалізації, а по-друге, виявилося, що є екземпляри, які можуть ненароком просадити харчування і повісити або перезавантажити процесор, якщо буде на основній шині. Ну і 3.3 на доступних користувачеві контактах з тієї ж причини - якщо він підключить щось споживає, і напруга просяде, не справа вішати підлогу-пристрою.
До речі, з цієї ж причини, при вставці карти, на 3.3 у піні гребінки може короткочасно пропадати напруга – замість окремого транзистора для SD процесор керує входом ENABLE самого стабілізатора периферійної шини.

Від батареї безпосередньо живиться динамік (щоб був голосніше, щоб не шумів на основній лінії живлення і не навантажував DC-DC), IR-світлодіоди та вібромотор (з тих же причин), IR-приймач (TSOP753) (бо йому пофіг, він 2.5-5.5 V, а розводити зручніше):


Ще є один DC-DC (FAN48610), що цього разу підвищує:

Він підвищує напругу батареї до 5в і віддає ці 5в на антени NFC і RFID. Передавач RFID - це просто ключ, яким смикає процесор, а ST25R3916 має спеціальний вхід для напруги живлення передавача. Сенс у тому, щоб підвищити напруженість поля та дальність роботи.


Якщо ми вже почали про радіо, давайте розглянемо його докладніше.

Як я вже сказав, RFID на 125КГц це не мікросхема, як для 13МГц, а просто GPIO процесора одним він смикає антену, на другому після підсилювача на чотирьох операційних підсилювачах він дивиться на поле. Насправді там складніше, але тих, хто зацікавився, відправляю до доків:

Ось як це виглядає на платі:

Заради правди, RFID, незважаючи на слово «Radio» у скороченні, ніфіга не радіо (порахуйте розміри радіо-антени для 125КГц, так), а скоріше індуктивна — дві антени, зчитувача і карти утворюють собою трансформатор з повітряним зазором. Звідси і невелика дальність, і можливість передавати суттєву потужність.

NFC тут - це окрема мікросхема на відміну від RFID, ST25R3916, тому там все простіше, антена просто підключена до висновків мікросхеми.

Ну гаразд, не так вже й просто. Але хоч би без операційних підсилювачів!

Ось як це виглядає на платі:

Вище в кутку можна побачити якраз DC-DC, що робить 5в: від нього йде доріжка, на якій є тестпоінт 5V_1.

Антени на тій платі, що приклеєна до задньої частини корпусу, а вони підключаються спеціальними пружинними контактами.

Ось тут на одній платі контакти, а на другій контактні майданчики.


До речі, про контактні майданчики. На всіх платах є купа круглих тестпоінтів. Це зроблено для максимального покриття тестами на виробництві. Наприклад, ось ключ, який керує вібромотором:

Здавалося б, навіщо йому тестпоінти, він же простий. Ан ні, цілих три:

За ними можна перевірити коректність паяння і роботу компонентів: один з них (VBR03) це живлення, що приходить тестування, яке тестує пайку струмообмежувального резистора, другий (VBR02) - перевіряє роботу ключа, а перший (VBR01) - паяння роз'єму для шлейфу.
У схемі це виглядає так:

Тобто. на етапі тестування плат можна добре знизити ймовірність шлюбу, який інакше довелося б виявляти вручну, тестуванням «чи робить вібромотор бззз».

Тих, хто зацікавився, відправляю до статті розробників про тестування.


Переходимо до SubGHz трансівера, CC1101. Це універсальний приймач на частоти 300-348 МГц, 387-464 МГц, 779-928 МГц. Конкретна частота налаштовується програмно. Загалом це майже SDR, досить подивитися на структурну схему:

Але тільки I/Q семпли він не віддає назовні, а обробляє їх у собі відповідно до параметрами, які йому передає мікроконтролер (частота, смуга, модуляція, etc) по SPI. Тому з плюсів — переважно конфігурованість.

Однак, незважаючи на те, що сам приймач може приймати та передавати на різних частотах, залишається питання узгодження, фільтрів та антени.Для того, щоб фліппер міг працювати на всіх цих частотах, потрібно зробити додатково три ланцюжки фільтрів, що перемикаються:

Ось як це виглядає «у залізі»:


У порівнянні з цим радіочастина на 2,4 виглядає дуже просто, вона прямо йде в основний процесор:

Так само і на платі, просто доріжка вгору з балуном і парою деталей, що закінчується розчепіреною в різні боки антеною, що ховається за роз'ємами GPIO:


Що ще в нас лишилося? Засоби взаємодії з користувачем: екран та RGB-світлодіод.

Вони підключені хитро: є lp5562, чотириканальний драйвер світлодіодів, керований I2C, до якого по трьох каналах підключений світлодіод, а по четвертому - підсвічування екрану.

Він, до речі, не просто ключ із керуванням по I2C, а в нього можна ще й завантажувати короткі програми, типу плавної зміни яскравості. Плавне гасіння та запалення підсвічування зроблено саме так.

Сам екран підключений за SPI.


До речі, інтерфейси. У контролера їх більше, але задіяно на внутрішні потреби три: два SPI та один I2C. На внутрішньому I2C сидять: живлення (зарядник та гауж) та контролер світлодіода та підсвічування.

Ще є два SPI – R та D. SPI-D це екран та microSD-карта. SPI-R це NFC та RFID:

Однак, у контролера для кожної шини є кілька GPIO, на які її можна перемикати. Повної матриці комутації, як у деяких контролерів від TI тут немає, але можна відключити SPI-R від NFC/RFID і переключити його на піни GPIO, щоб можна було попрацювати з зовнішнім по SPI. Звичайно, при цьому не працюватиме NFC і RFID, тому методика така: запускаємо додаток, який треба працювати із зовнішнім пристроєм, перемикаємо SPI, працюємо із зовнішнім пристроєм, при виході з програми перемикаємо назад.

Тому і дві шини: з одного боку, SD-карта, яка не зовсім SPI-пристрій (це крім її приколів з живленням): не відпустити MISO навіть після зняття з неї chip select – норма. Але на цій шині крім неї тільки дисплей, у якого MISO (Master In, Slave out, тобто передачі даних від дисплея до контролера в даному випадку) немає. Але дисплей потрібен завжди, його шину відключати не можна, а ось NFC/RFID можна і тимчасово відключити від керування.


Здається, все. А ні, не все, залишилася клавіатура. З одного боку, самі кнопки досить прості це просто GPIO контролера. З іншого боку, там є ще кілька хитрощів, крім вищезгаданого з'єднання кнопки «назад» з контролером заряду.


Наприклад, це «залізне» перезавантаження по довгому утриманню «назад» та «вліво». Прям реально залізна там затримка на конденсаторах, потім елемент AND, вихід якого заведений на вхід RESET мікроконтролера. Таким чином, при натисканні та утриманні цих двох кнопок контролер скинеться, в якому програмному стані він не знаходився, навіть якщо у нього заборонені всі переривання.

Проте, не завжди панацея: у деяких дивних станах при налагодженні воно може таки не спрацювати. А ще може зависнути не контролер, а щось із периферії. Тоді врятує лише довге натискання «назад» для перезавантаження харчування.

Ще треба пояснити два різні способи входу до DFU. Нагадаю, у першій статті були описані два різні способи це зробити: довге натискання «назад» та «вліво», після чого кнопка «вліво» залишається затиснутою, і довге натискання «назад», «вліво» та «ок», після чого залишається затиснута кнопка «ок».

Справа в тому, що апаратний спосіб заходу в DFU лише один - затиснута кнопка "ок" при старті пристрою: вона висить на PH3-BOOT0, високий рівень на якому при запуску контролера змушує його перейти в DFU.

Однак, можливо перейти в DFU програмно - це і робить завантажувач, якщо помічає при запуску натиснуту кнопку "вліво".

Відповідно, «назад» і «вліво» лише перезапускають контролер. Те саме, ви можете зробити відключивши та підключивши акумулятор. А далі, при старті контролера має значення тільки те, чи кнопка «назад» або «ок» — для входу в DFU апаратно або програмно відповідно.

Подібні статті

  • Як отримати ефект грації дельфіна
  • Як називається нашийник з шипами всередині
  • Чим білуха відрізняється від дельфіна
  • Що всередині фільтра для акваріума
  • Що за прищ на губі всередині
  • Що всередині черепашок
  • Що знаходиться всередині окропу
  • Що знаходиться всередині градирні
  • Останні статті

  • Який найвищий водоспад у Південній Америці
  • водоемульсійний лак
  • Який раціон має бути у вівчарки
  • Паливний насос високого тиску будова
  • скільки часу линяють качки
  • У чому плюс німецької вівчарки
  • гриби рядовки як приготувати
  • кімнатні рослини які не люблять світла
  • Категорії