Это перевод. Статья опубликована 27 мая 2018 года


Фитнес-трекер до и после разборки

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

  • действительно маленький форм-фактор (примерно 15?40 мм);
  • Bluetooth low energy (BLE);
  • OLED-дисплей (96?32 пикселя);
  • аккумулятор;
  • USB-зарядка;
  • акселерометр;
  • вибромотор;
  • цена около $10 (!).

Снаружи на задней панели единственный идентификатор — это наклейка «FCC ID: 2AHFTID115». Если погуглить, то это вроде как соответствует устройству ID115 и можно даже найти несколько фотографий его внутренностей. Оглядываясь назад, на одной из этих фотографий, если сильно постараться, можно разглядеть название самой крупной интегральной схемы (IC): N51822. Это говорит о том, что здесь может быть микроконтроллер (MCU) nRF51822 от Nordic, 32-битный процессор ARM M0 со встроенной поддержкой BLE, который теоретически достаточно легко запрограммировать на другие вещи, которые должен делать браслет.

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

Открыть корпус оказалось не так-то просто. Чёрная пластиковая крышка приклеена к серому заднику. Я попробовал фен, чтобы размягчить клей, и терпеливо резал его маленьким ножичком, стараясь не слишком повредить пластик. После вскрытия я убедился, что там действительно nRF51822. Позже я купил практически идентичный браслет с MCU от Texas Instrument. Имейте в виду, что есть варианты.


nRF51822 и шариковая ручка для масштаба

Поиск способа коммуникации


В документации говорится, что чип можно запрограммировать/отладить с помощью двухконтактного интерфейса ARM Serial Wire Debug (SWD). Если мы хотим установить канал коммуникации с чипом, то это означает две вещи:

  • Нам понадобится программатор SWD (например, Segger J-Link).
  • Нам понадобится доступ к двум контактам SWD на микроконтроллере, а именно SWDIO (данные) и SWDCLK (тактовые импульсы).

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




Передняя и обратная стороны печатной платы. Шариковая ручка для масштаба и полупроизвольные названия для открытых контактных площадок

С помощью такого же дешёвого USB-микроскопа я сделал несколько снимков передней и обратной сторон платы и попытался отследить дорожки от микроконтроллера до контактных площадок.




Дорожки к контактам SWDIO и SWDCLK на передней и задней сторонах платы

Обратите внимание, что это многослойная печатная плата со сквозными отверстиями, поэтому следует проверять дорожки с обеих сторон платы. По этим фотографиям можно отследить дорожки от контактов SWDIO и SWDCLK на чипе до контактных площадок IO и CLK. Так мы убедимся, что пометка CLK на плате соответствует SWDCLK на MCU, а непомеченный контакт — это вывод SWDIO. Теперь можно подготовить нашу первую таблицу сопоставления:

Вывод nRF51822 Площадка Описание
SWDIO IO Вывод данных для программирования SWD
SWDCLK CLK Вывод тактовой частоты для программирования SWD

Хирургия после вскрытия


Получив доступ к двум контактным площадкам SWD, я припаял очень тонкие проводки к ним и ко всем остальным доступным контактам.



Немного поморгаем


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

  • Мы правильно отследили контакты SWDIO/SWDCLK.
  • Программатор SWD работает, и компьютер может подавать команды.
  • Мы можем скомпилировать программу Arm и корректно использовать Nordic SDK.
  • Мы можем прошить скомпилированную программу в чип.
  • Чип правильно работает и загружает нашу программу.

В качестве “hello, world” в данном случае может выступить программа, включающая и выключающая светодиод. И даже это не элементарно, потому что на плате нет встроенного светодиода, а если добавить внешний, то всё равно нужно выяснить, к чему его подключать. Это добавляет ещё одно измерение в пространственную модель проблемы. Согласно теореме об отсутствии бесплатного сыра я просто подключил два светодиода на контакты P1 и P2 с надеждой, что мы сможем добраться до этих контактных площадок с MCU.


День плохих проводов

Драйверы и программы командной строки для программатора J-Link SWD лежат на сайте Segger. Если вы на macOS и используете Homebrew, то ищите формулу Cask в caskroom/drivers/segger-jlink. Связь с программатором SWD устанавливается из утилиты командной строки JLinkExe.

Затем я скачал Nordic nRF5 SDK (я использую версию 12.3.0). Из примеров SDK понятно, что нам понадобится компилятор, способный компилировать программы Arm. Поэтому я установил ещё gcc-arm-embedded (тоже доступный на Homebrew).

Изучив документацию SDK и форумы разработчиков Nordic, я выяснил, что их SDK чаще всего используют с платами разработки вроде этой. SDK предварительно сконфигурирован для нескольких вариантов таких плат. Поскольку мы контачим непосредственно с контроллером, то придётся настроить некоторые параметры SDK.

Я потратил много времени на понимание экосистемы nRF5, но в конце концов всё-таки смог запустить программу на чипе! На видео показаны два мигающих светодиода. На данном этапе я создал репозиторий Github и сбросил туда программу с рабочим Makefile. Одним из самых главных секретов стало то, что на самом деле есть несколько вариантов nRF51822, а в моём всего лишь 16 КБ памяти. Так что пришлось ещё подправить скрипт компоновщика.

Цифровой ввод-вывод


Как я уже говорил, задача с миганием светодиодов предусматривала некоторые надежды и метод тыка, какие из контактов MCU ведут к P1 и P2, где подключены светодиоды. Простейшая стратегия — подключать все выводы по очереди и поочередно подавать высокое и низкое напряжение. К моему удивлению, оба светодиода загорелись! Ещё больше я удивился, когда заработал вибромотор!

Итак, метод тыка дополнил таблицу:

Вывод nRF51822 Площадка Описание
P0.30 P1 Цифровой GPIO
P0.00 P2 Цифровой GPIO
P0.01 - Вибродвигатель

printf


Способность передавать данные на компьютер незаменима при отладке. Программатор J-Link поддерживает передачу в реальном времени (RTT) как для отправки, так и для получения данных с чипа. Чтобы использовать RTT, нужно сделать #include "SEGGER_RTT.h" и вызвать SEGGER_RTT_WriteString(). Для получения данных на компьютере вызовите интерфейс командной строки jlinkrttlogger, который поставляется в комплекте J-Link.

OLED


Ещё одна сложная задача — заставить работать OLED. В самых распространённых OLED на рынке работает драйвер/контроллер ssd1306, и обычно коммуникация с MCU осуществляется по последовательному интерфейсу, используя или SPI, или I?C. Вот пример от Adafruit.

Я не нашёл такой дисплей ни в одном из обычных магазинов. И размер 96?32 у него нестандартный. Поиск по идентификатору QT1316P01A на дисплее выдаёт китайские сайты типа Aliexpress, но там нет никакой документации, кроме наименований выводов:


Именования выводов OLED с Aliexpress

Если список не врёт, то контакты SCL, SDA и RES# указывают нам, что это вариант I?C. Если дорожки между тремя выводами nRF51822 и этими тремя выводами OLED, то мы сделаем шаг вперёд. Вернёмся к микроскопу.




Дорожки контактов данных OLED

Обновляем таблицу соответствий:

Вывод nRF51822 Площадка Описание
P0.21 - Вывод OLED SDA
P0.22 - Вывод OLED SCL
P0.24 - Вывод OLED RES#

Протокол I?C гораздо более продвинутый, чем какой-нибудь простой последовательный протокол вроде UART. Одно из преимуществ в том, что он поддерживает по несколько устройств master и slave на одной шине. Это немного усложняет дело: как минимум, нужно сказать MCU, для какого slave подаются команды. Так что на высоком уровне кроме физических контактов есть ещё «логический» адрес OLED-дисплея.

К счастью, один из примеров в nRF5 SDK — это сканер I?C. Он опрашивает со все возможные логические адреса и сообщает, если там что-то установлено. Моя модифицированная версия здесь. Он выдаёт такой лог:

$ make
# ...
$ make flash
# ...
$ make log
# ...
TWI scanner.
TWI device detected at 0x3c.


Отличная новость! У нас есть веские основания полагать, что дисплей правильно идентифицирован и это действительно вариант I?C. Поиск в гугле говорит, что 0x3c — типичный адрес для таких устройств.

Теперь мы готовы отправить какие-то пиксели на дисплей. На этом уровне нет абстракции через библиотеку. В документации ssd1306 можно найти низкоуровневый способ передачи данных. Процесс состоит из последовательности команд конфигурации, которые устанавливают ориентацию дисплея, режим записи, размер и т.д. Затем в графическую память дисплея (GDDRAM) отправляется последовательность байт, которые отображаются на экране.

Для правильной конфигурации я изучил библиотеку ssd1306 от Adafruit и попытался эмулировать подобные команды. Именно на это ушла львиная часть времени в данном проекте. Узнать все детали оказалось весьма трудоёмким занятием, и всё равно некоторые вещи я не могу объяснить. Тем не менее, оно работает!


Отображение жёстко закодированного растрового рисунка

Код этого примера здесь.

С такими настройками дисплей делится на 4 строки (страницы) и 96 столбцов. Так что страницы по 8 пикселей в высоту. Первый отправленный байт расположится «вертикально» в первом столбце первой страницы. Второй байт займёт второй столбец, затем третий и так далее, вплоть до 96-го столбца, когда он возвращается и начинает с первого столбца на второй странице.

Таково ожидаемое поведение. Как показано на видео, наблюдаемое поведение отличается: сначала заполняются нечётные столбцы, затем чётные, и только потом он возвращается ко второй странице.

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

Путешествие в страну Arduino


Копаясь в библиотеке ssd1306 от Adafruit для Arduino, я всё время думал, что хорошо бы иметь способ «имитации» специфичных битов Arduino, чтобы протестировать их на nRF51822. Оказывается, гораздо более опытные люди тоже думали на эту тему — именно это делает удивительный проект sandeepmistry/arduino-nRF5. Он реализует основные библиотеки Arduino с помощью nRF5 SDK.

С помощью этого проекта мы можем открыть Arduino IDE, выбрать плату nRF5 — и использовать богатую экосистему Arduino. Я форкнул проект и добавил поддержку платы из нашего браслета. Его можно выбрать в раскрывающемся меню Tools > Board > ID115 Fitness Bracelet (nRF51822).




Библиотека ssd1306 от Adafruit в оригинальном виде (вверху) и с патчем (внизу)

Это также означает, что теперь мы можем использовать библиотеку OLED от Adafruit. К моему удивлению и облегчению, произошло то же самое странное поведение с заполнением сначала нечётных, а потом чётных столбцов OLED! Я с удовольствием форкнул библиотеку и внедрил тот же хак. По сравнению с низкоуровневым подходом, теперь у нас есть доступ к разнообразным классным абстракциям, например, выводу текста:


Более привычный “Hello, world!”

Аналоговый ввод-вывод


Кроме цифровых сигналов «включить/выключить», у nRF51822 есть 10 контактов для аналогового ввода. Это полезно, например, для чтения текущего заряда аккумулятора. Судя по документации, чтение аналоговых контактов выдаёт 10-битное значение. Поэтому если на входе находится 0V, то мы прочитаем 0, а если там VCC, мы прочитаем 1023 с промежуточными значениями между ними.

Я периодически считывал значения аналоговых входов и составил графики самых интересных сигналов:




Эффект встряхивания платы и зарядки аккумулятора по данным с аналоговых входов

Я убеждён, что контакт P0.05 относится к заряду аккумулятора, потому что значение увеличивается и уменьшается по мере зарядки и разрядки. Подозреваю, что контакт P0.26 подключен к одному из выходов акселерометра, поскольку он сходит с ума при встряхивании платы. Контакты P0.03 и P0.04 тоже могут быть подключены к различным выходам акселерометра, но здесь на сигнал со входа скорее всего накладывается некий эффект второго порядка. Например, на первом графике обратите внимание, как уровень заряда батареи (вывод 5) изменяется, когда акселерометру требуется больше энергии. Это пример эффекта второго порядка.

Код можно найти в этом наброске. Исходные данные и скрипт построения графика здесь. Теперь можно добавить несколько строк в нашу таблицу соответствия:

Вывод nRF51822 Площадка Описание
P0.05 - Аналоговый вход — связан с зарядом батареи
P0.26 - Аналоговый вход — одна ось акселерометра
P0.03 - Аналоговый вход — одна ось акселерометра (вероятно)
P0.04 - Аналоговый вход — одна ось акселерометра (вероятно)

Кнопка


В оригинальной прошивке прикосновение к браслету в определённой точке включает дисплей. При удержании этой точки запускается хронометр, если я правильно помню. Это не физическая кнопка, а какая-то ёмкостная сенсорная штука, которая работает на удивление хорошо. Используя тот же подход, что для поиска цифровых выходов, я нашёл место подключения к MCU (видео).

Код лежит здесь.

Вывод nRF51822 Площадка Описание
P0.10 - Цифровой вход — встроенная кнопка

Bluetooth low energy (BLE)


Функциональность BLE на чипах nRF5 реализована через нечто под названием SoftDevice. Это предварительно скомпилированный двоичный файл со стеком BLE. Он прошивается независимо от приложения. Есть много версий SoftDevice, в зависимости от версии SDK и версии чипа.

В документации приводится некая матрица зависимости (к сожалению, на неё нельзя поставить прямую ссылку). Она показывает, с какой SDK поставляются разные версии чипа — и какая там стоит версия SoftDevice. В нашем случае на чипе стоит отметка QFAAH0, у этой микросхемы 256 КБ флэш-памяти, 16 КБ оперативной памяти и заявлена совместимость с SoftDevice s130.

Мой SDK версии 12.3 уже содержит несколько примеров использования SoftDevice s130. По сравнению с предыдущими программами, которые прямо зашиваются в микросхемы с адреса 0x0, теперь нужно прошить SoftDevice с адреса 0x0, а саму программу — с адреса 0x1b000. После загрузки и инициализации двоичный файл SoftDevice перейдёт к этому адресу и передаст управление нашей программе. Чтобы проиллюстрировать, я взял тот же пример с морганием светодиодов, но изменил его для прошивки SoftDevice (код). Наблюдаемое поведение не изменилось, разве что следует заранее прошить SoftDevice:

$ make
# ...
$ make flash-softdevice
# ...
$ make flash
# ...
$ make log
# ...
Hello, world!


Пожалуй, самое простое приложение для Bluetooth — превращение устройства в маячок. Устройство только транслирует своё присутствие. Один из таких примеров есть в SDK под названием ble_app_beacon. Он предполагает, что SoftDevice s130 уже прошит.

Здесь тоже низкоуровневая коммуникация с чипом всё усложняет по сравнению с программированием через SDK. Кроме настройки размера оперативной памяти (это знание тяжко мне далось в примере со светодиодами), выявилась ещё одна трудно отслеживаемая проблема. Как оказалось, для выполнения чувствительных ко времени задач стек BLE использует генератор тактовой частоты. В примерах SDK предполагается наличие внешнего кварцевого генератора. Когда я это понял после тысяч попыток printf, то изменил флаг конфигурации на использование синтетического генератора тактовых импульсов, и проблема решилась. Исходный код маячка здесь.

BLE + Arduino


Когда пример BLE заработал с nRF5 SDK, зная о ловушках с оперативной памятью и генератором, я снова посмотрел на среду Arduino. И опять там оказался славный проект sandeepmistry/arduino-BLEPeripheral (от того же парня, что и arduino-nRF5!), который обеспечивает отличные абстракции поверх внутренней настройки BLE.

К моему удивлению, не пришлось даже форкать библиотеку. Автор проекта arduino-nrf5 потратил время и добавил конфигурацию всех плат и настроек, так что теперь выбор правильного генератора тактовых импульсов для SoftDevice сводится к простому выбору из выпадающего меню Tools > Low Frequency Clock > Synthesized. Потрясающе. Я по-быстрому написал пример с включением зелёного светодиода по Bluetooth (с этим приложением). Его работа показана на видео.

Дальнейшие планы


После возни с этой платой бесчисленные часы в течение нескольких недель у меня чешутся руки засунуть её подальше за стиральную машину и забыть на некоторое время.

Комментарии (76)


  1. datacompboy
    12.06.2018 16:03

    Восхитительный пример буханки и троллейбуса! Но блин, какие возможности открываются!!!
    Автор — молодец и рукочёс!


  1. SADKO
    12.06.2018 16:49

    Ну, это есть как бы и не взлом, а скорее перепрошивка…


    1. tormozedison
      12.06.2018 17:13

      Маленький кликбейтик. В оригинале там hacking, более широкий термин.


  1. tormozedison
    12.06.2018 17:14

    А если ещё чуть допилить, можно будет запускать на браслете всё написанное для Arduboy, надо только придумать, как управлять.


  1. JohnDoe_71Rus
    12.06.2018 17:46

    можно менять прошивку не вскрывая пациента?


    1. Iv38
      12.06.2018 19:13

      Не вскрывая вообще? Сложно сказать. Если производитель реализовал загрузку по воздуху, то наверное можно, но нужно знать протокол, а автор этим явно не занимался. Наверное можно реализовать загрузку по воздуху в своей прошивке, но изначально браслет все равно придется вскрыть.


    1. BigBeaver
      12.06.2018 20:39

      Нужно вскрыть 1 раз и залить туда BLE-DFU. После этого можно перепрошивать по радио, сколько душе угодно.


      1. tormozedison
        12.06.2018 21:23
        +1

        И это будет не таким уж медленным процессом, поскольку размер прошивки невелик. Но если аплоадер слетит — опять залезать внутрь.


        1. BigBeaver
          12.06.2018 21:34
          +1

          Честно говоря, не вижу ему причин слетать, это стандартная фича. Юолее того, сам загрузчик и/или softdevice можно тоже обновлять по воздуху.

          Из моего опыта работы с камнями от Nordic, по радио прошить не дольше, чем по кабелю (если закрыть глаза на то, что для прошивки по BLE нужно закинуть прошивку в телефон, но это можно автоматизировать с помощью того же дропбокса) — на компиляцию часто больше времени уходит. Ну то есть, какой-нибудь AtTiny13A с его 1к флэшем вы будете дольше прошивать.


          1. esaulenka
            13.06.2018 16:19

            Слетать? Элементарно! Структура DFU-загрузчика: infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk52.v0.9.0%2Fexamples_ble_dfu.html
            Достаточно сломать стрелочку с номером 2, и всё — кирпич готов.
            Т.е. хочу сказать, что нормальный надёжный загрузчик — это чуть сложнее готового примера. Ну и тем более, он получается совсем не совместимым с ардуино-скетчем, который в статье так хвалят.


            1. BigBeaver
              13.06.2018 16:26

              Так не ломайте. Либо предусмотрите оверрайд в своем загрузчике (добавьте хардресет или еще что, раз уж все ранво разковыряли). Это не rocket science.

              А ардуиноподход я не продвигаю — у нордика очень хорошая SDK и документация. Также у них очень хорошие политики в отношении errata и revision history. Порог вхождения лишь немного выше ардуиновского, но оно того стоит.


  1. Alex_Q
    12.06.2018 17:49
    +1

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


    1. tormozedison
      12.06.2018 18:07

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

      Когда же собака хомячит, характер перемещения нижней челюсти другой, это учесть.


      1. artiom_n
        12.06.2018 18:50

        Пишите статью: «Определение типа движения нижней челюсти собаки, с помощью нейронной сети и фитнес-браслета».


        1. tormozedison
          12.06.2018 18:57
          +1

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


          1. stychos
            12.06.2018 23:43

            Да и просто на шее должно достаточно быть — при лае, собака ритмично трясёт девайс с несколько большей амплитудой, нежели при жратве, когда она сначала сильно опускает девайс, потом ритмично (но не столь истово) двигает им, а потом поднимает.


            1. ntfs1984
              13.06.2018 10:27

              Мужики, не усложняйте, при лае собака лает, а следовательно читать лучше не движения челюстей, а звук :)


              1. ser-mk
                13.06.2018 13:10

                но среди всех звуков нужно различать лай, да еще только конкретной собаки)


              1. stychos
                13.06.2018 14:18

                Так в браслете микрофона-то и не наблюдается.


                1. lonelymyp
                  13.06.2018 20:58

                  Акселерометр с аналоговым выходом вполне заменяет микрофон.


    1. FluffyMan
      12.06.2018 18:50

      Золотые слова.


    1. kalininmr
      12.06.2018 21:08
      +3

      изверги


      1. tormozedison
        12.06.2018 21:25

        Чем? Что плохого сделает кошке/собаке вибрация? Это же не электрошоковый ошейник.


        1. LynXzp
          12.06.2018 23:28
          +1

          Не вибрация. Есть пытка такая — не давать спать, например.

          Здоровые кошки спят минимум 12-14 часов в сутки, но мы часто не замечаем, как много времени они тратят на сон. Все потому, что отрезки сна и бодрствования у домашних кошек непродолжительны.
          Изменять биоритмы кошке на те что вам нравятся… эм… прокрустово ложе какое-то.


          1. stychos
            12.06.2018 23:44
            +2

            А вот со стороны кошака изменять мои биоритмы на те, что нравятся ему — это вполне ок, ага.


            1. LynXzp
              12.06.2018 23:57

              Он будет Вас раз в сутки, Вы его 20. Ага, это и есть пытка. (Будить каждые 15 минут когда пытаешься заснуть)

              Не, я не против, но только если у Вас есть данные что это «не принесет страдания», ну или в целях научного эксперимента чтобы определить это. В противном случае это «жестокое обращение с животными», просто позвоните в местную организацию защиты прав животных они проконсультируют (кто их на это платит интересно).


              1. stychos
                13.06.2018 00:00

                Не знаю, как ваш, но мой меня будит намного чаще чем раз за ночь. Плюс, выше речь о том, что имея такие возможности, можно пытаться и анализировать поведение питомца. Мой, например, ночью начинает ломиться в дверь. Вот при громких звуках, пусть ошейник его немного развлечёт, например.


                1. LynXzp
                  13.06.2018 00:04

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


                  1. Alex_Q
                    13.06.2018 01:00
                    +1

                    В моём случае это бурманские кошки, они очень человеко-ориентированные. Им скучно без человека, вот и будят ради общения.


          1. BigBeaver
            12.06.2018 23:45

            Это называется дрессировка. В обмен кошка получает бесплатную еду и medicare.


            1. LynXzp
              13.06.2018 00:24

              Тогда растягивание человека до длины прокрустового ложе тоже дрессировка.

              Дрессиро?вка живо?тных (от фр. dresser «выправлять; обучать») — комплекс обучающих действий над животными, предпринимаемых для выработки и закрепления различных условных рефлексов и навыков.
              Увеличить длительность цикла сна/бодрствования, скажем вдвое, это не рефлекс и не навык. Это физиологическая особенность, в крайнем случае привычка (по определению почти подходит). Про выработку привычек говорят про людей, а не животных. Про животных нашел что можно даже повлиять на инстинкты. В общем почти доказал ваше утверждение, но так почти что скорее нет чем да.


              1. BigBeaver
                13.06.2018 10:12

                del


        1. kalininmr
          13.06.2018 00:06
          +1

          не будет давать спать нормально.
          кошка спит в течении суток регулярно. у них организм такой.


    1. iShkval
      13.06.2018 14:41

      Ещё добавить функционал слежки чтобы кошка не прыгала по стол и можно запускать в продажу :)


  1. t3hk0d3
    12.06.2018 17:54

    Узнаю Букинговский браслет.
    К сожалению так себе игрушка — приложение для смартфона крайне корявое, а сам он держит заряд всего пару дней.


    1. sev
      14.06.2018 15:19

      Кросспост на Thundercats? :D


      1. t3hk0d3
        14.06.2018 15:44

        Ну сам автор гораздо раньше запостил в другой группе. Просто в Thundercats больше народу. :D


  1. ffs
    12.06.2018 18:10

    Надо такое с xiaomi amazfit bip мутить. Батарейка на месяц, gps, для управления кнопка + сенсорный экран.


    1. tormozedison
      12.06.2018 19:00
      +2

      Там может быть вообще всё другое, и наработки из данной статьи применить будет некуда.


    1. avf1906
      12.06.2018 22:17

      band3 вроде тоже nordic стоит, а вот если с gps, то уже что-то помощнее скорее всего.


    1. lart
      12.06.2018 23:40
      +1

      В Amazfit Bip стоит STM32L476JE + DA14580. Тут подробнее: 4pda.ru/forum/index.php?showtopic=845160&st=14020#entry71988118
      Осталось только вызвонить периферию и можно писать свою прошивку, почти на все компоненты есть даташиты


      1. hoary
        14.06.2018 13:19

        Было бы круто подменить процесс обновления, чтобы тот же gadgetbridge смог обновить прошивку, не разбирая часы.


  1. hardegor
    12.06.2018 19:20
    +2

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


    1. tmin10
      12.06.2018 22:33
      +4

      Так там же приведена прямая ссылка на документацию по чипу в самом начале. А форум упомянут в контексте приёмов работы с официальным SDK на него.


      1. hardegor
        13.06.2018 07:03

        Ага-ага, а зачем он пишет:

        Одним из самых главных секретов стало то, что на самом деле есть несколько вариантов nRF51822, а в моём всего лишь 16 КБ памяти.

        Либо статья «высосана из пальца», либо и вправду «героически преодолевал трудности».


    1. shekelgruber
      12.06.2018 23:40
      -1

      Что характерно — чел сначала производит впечатление вменяемого, и даже знает, что при наличии интерфейса SWD можно не только прошивать устройство, но и отлаживать его, а потом — все равно достает из помойки убогую Arduino IDE и предлагает использовать это убожество, имея в своем распоряжении все средства для нормальной работы.


      1. BigBeaver
        12.06.2018 23:42

        Кстати, да. Разработчикам под NRF дается бесплатная лицензия на Segger. С родной SDK и документацией работать одна радость.


      1. hardegor
        13.06.2018 07:06

        Техногиковый хацкер, что еще о нём сказать… поэтому использование Ардуино обязательно — остальные не поймут как это без него. :)


      1. DASM
        13.06.2018 13:30

        Хотел уж написать «а что Вы вообще полезного когда-либо написали, в отличии от автора статьи», но увидев Вашу карму вопрос снялся сам с собой. Но за троллинг мало платят, лучше на пенсии займитесь


      1. balamutang
        13.06.2018 16:01

        человек просто любопытствует «что там внутри», а чтоб что-то «нормальное делать» — это надо все библиотеки заново написать, в проф сообществе STM32 не принято библиотеками делиться в отличии от ардуинщиков. ну и кроме прочего еще нужна идея что с этим браслетом делать (кроме браслета).
        собственно поэтому почти каждая вторая история про STM32 — натягивание совы на глобус ардуины на stm32, т.к. на элементарные вещи, доступные в ардуине чуть ли не из коробки — могут уйти недели


        1. BigBeaver
          13.06.2018 16:19

          NRF это не STM32.


          1. balamutang
            13.06.2018 16:26

            да, косяк, увидел знакомые слова «интерфейс SWD», «J-Link» и Остапа понесло :)


            1. BigBeaver
              13.06.2018 16:28

              У нордика есть DevZone, где полно желающих ответить на вопросы любой сложности и/или тупизны.

              P.S. Че-то я начинаю в этом треде себя чувствовать их рекламным агентом.


    1. rustavelli
      13.06.2018 13:01

      тоже недавно этим занимался. Вот есть ключ BTS555 с даташитом. Хочется вместо этого переусложненного документа просто почитать на форуме: паяешь к 4й ноге резистор на 1кОм и на 100А у тебя на этом резисторе будет 30 вольт при питании в 42В.


      1. hardegor
        13.06.2018 22:03

        Я вот тоже сяду и напишу на java обработку финансов, чего там делов-то — лет дцать назад написал на нём курсовую, а сейчас на форумах поспрашиваю и напишу, но вот когда моя обработка ошибется на миллиончик-другой…
        К сожалению BTS555 это не пульт от телевизора, и она не предназначена для использования полными «чайниками», если вы собрались применить такую сложную детальку, то придется вначале разобраться как её применять. Почитайте например разные Application Notes by Infineon about PROFET — там приведены примеры и схемы включения. Нет желания — ставьте банальный MOSFET, хотя с ним тоже придется разбираться и уметь делители считать.


        1. rustavelli
          14.06.2018 14:43

          Спасибо, нашел Application Note PROFET™+ current sense на 30 страниц. Гораздо подробнее и понятнее, чем в даташите.


    1. esaulenka
      13.06.2018 16:12
      +1

      А Вы сами пробовали читать документацию нордика? Очень интересное чтиво, рекомендую.
      В частности, там написано про ремап. Все ноги, за исключением радио и аналога, можно назначить КУДА УГОДНО.


      1. BigBeaver
        13.06.2018 16:21

        И кроме пинов для программатора/отладчика.
        Есть еще исключения. По крайней мере для 52 серии — QSPI, например, не ремаппится.


  1. azt59
    12.06.2018 23:39

    Интересный подход, метод тыка, а почему бы не реверсить штатную прошивку? Тогда бы и адрес i2c и многое другое можно было выбрать из нее


    1. nafgne
      13.06.2018 11:20

      А она доступна?


      1. azt59
        13.06.2018 22:13

        У человека jtag работает, сделать дамп, и реверсить


        1. BigBeaver
          13.06.2018 22:32

          У NRF есть защита от чтения флэг памяти, емнип.


          1. azt59
            13.06.2018 23:36

            Насколько я помню в этом чипе данная защита имеет ошибки и память дампится, но нужно немножко поколдовать


            1. BigBeaver
              13.06.2018 23:51

              Хмм, интересно. На 51 серию вообще, вроде, много (относительно) жалоб было.


  1. siargy
    12.06.2018 23:39
    +1

    я бы сказал не взлом а реверсинжыниринг


    1. LynXzp
      13.06.2018 00:26

      Поменять текстовое сообщение без исходников это тоже уже hack. Взлом или нет — другой вопрос.


  1. 0o0
    12.06.2018 23:51
    +2

    Для масштаба может лучше линейку, а не ручку неизвестных размеров?


  1. mixmax
    13.06.2018 08:07

    1) отвратительный околомашинный перевод, автор перевода если сам не в курсе общеупотребительной радиоэлектронной терминологии то мог хотя бы проконсультироваться прежде чем называть пины (или выводы, для радетелей за чистоту языка) — «штырями», а акроним GPIO расшифровывать и переводить (facepalm)… и такое по всему тексту, речь в которрм идет именно про хакинг а не про «взлом»


    2) автор оригинальной статьи молодец, но про троллейбус из буханки уже написали ) браслеты поддерживает апп Zeroner health (и возможно другие поделия дядюшки Ляо) — он умееть заливать прошивку OTA и гораздо практичнее и интереснее было бы отреверсить протокол обмена/слить и поковырять бинарники прошивки, чтоб организовать нормальную поддержку уведомлений или вообще расширить возможности браслетов. Вообще, такие девайсы при цене в $10, наличии цветного OLED 0.94” и оптического пульсометра в последних моделях на али выглядят как интересная цель для софт-модов. Тем более что китайцы наверняка занимаются дата-харвестингом и сливают кучу всякой инфы в поднебесную, не говоря уж про кривой перевод приложения и его глюки.


    1. m1rko Автор
      13.06.2018 08:44

      мог хотя бы проконсультироваться
      OK, в следующий раз проконсультируюсь с вами, спасибо за помощь! Вот бы все были такими добрыми и бескорыстными!


      1. mixmax
        13.06.2018 08:59

        С ролью консультанта вполне справился бы и гугл, believe me ;)


        1. m1rko Автор
          13.06.2018 09:05

          Жаль, ну ладно.


  1. Dru4
    13.06.2018 08:20

    Жаль не указана модель браслета.


  1. Frankenstine
    13.06.2018 14:29

    Всю статью ждал, когда же автор дойдёт до полезного применения девайса. Не дождался :) Примерно как «взлом микроскопа и превращение его в молоток»…


    1. balamutang
      13.06.2018 15:53

      ну он намекнул в конце на стиралку, возможно теперь она будет с олед экраном и управлением через блютус :)


  1. mixmax
    14.06.2018 11:50

    У меня по счастливой случайности оказался похожий браслет ( www.amazon.com/Wireless-Pedometer-Bluetooth-Bracelet-Monitoring/dp/B0779C5661 ) а вчера наконец дошли руки его чуток пощупать поближе. По MAC-у вендора определить не удалось и судя по косвенным признакам там действительно внутри nRF51ххх от Nordic, девайс умеет в OTA/DFU, а поснифать протокол обмена данными трекера и попробовать выдернуть саму прошивку можно пытаться из аппов предназначенных для смартфона (в конкретном случае — вышеупомянутый Zeroner Health play.google.com/store/apps/details?id=com.healthy.zeroner_pro или LinkSmart play.google.com/store/apps/details?id=com.linkfit.heart&hl=en).

    Вот лог pastebin.com/Yjm0ab2m можно даже переименовать девайс, записав соответствующую characteristic но после ребута имя слетает на дефолтное…
    Если кому интересно поковырять дальше — велкам в ПМ


    1. mixmax
      14.06.2018 12:16
      +1

      хм, как оказывается, собственно, все уже придумано до нас — habr.com/post/391109 ))