Espruino:Примеры/Техническая информация о Bangle.js: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlig...»)
 
Нет описания правки
 
(не показаны 4 промежуточные версии 1 участника)
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


=<ref>[ www.espruino.com - ]</ref>=
=Техническая информация о Bangle.js<ref>[https://www.espruino.com/Bangle.js+Technical www.espruino.com - Bangle.js Technical Information]</ref>=


Общую информацию о Bangle.js читайте в [https://www.espruino.com/Bangle.js этой статье].


Эта статья содержит более подробную информацию о внутренней начинке [[Bangle.js]]. Если вы просто пишете [[JS]]-код, то вам она, скорее всего, не понадобится, но будет интересна, если планируете модифицировать прошивку [[Bangle.js]].


<syntaxhighlight lang="javascript" enclose="div">
== Функции ==


</syntaxhighlight>
* Водостойкость уровня [[IP68]]: до 10 метров под водой
* Процессор [[Nordic nRF52832]] [[ARM Cortex-M4]] 62 МГц с поддержкой [[BLE]]
* [[RAM-память]] – 64 Кб, встроенная в чип [[flash-память]] – 512 Кб, внешняя [[flash-память]] – 4 Мб
* 1.3-дюймовый 16-битный [[LCD-дисплей]] 240х240 с двумя сенсорными зонами
* Приёмник [[GPS]]/[[Glonass]] ([[UBlox]])
* [[Пульсометр]]
* [[3-осевой акселерометр]] (с шагомером и функцией определения касаний)
* [[3-осевой магнетометр]]
* [[Вибрационный мотор]]
* Батарея на 350 мА·ч, позволяющая 1 неделю работать в режиме ожидания
* Пластиковый корпус 5 x 5 x 1.7 см с кольцом из нержавеющей стали
* Можно разобрать, открутив всего 4 шурупа
 
== Код ==
 
[[Espruino]]-версия для [[Bangle.js]] имеет несколько специальных модификаций:
* Файл ''«jswrap_bangle.c»'' содержит все функции '''Bangle.*''' и почти весь функционал [[Bangle.js]].
* Некоторый функционал (вроде меню) написан на [[JavaScript]] и встроен в прошивку. Эти [[JavaScript]]-файлы можно найти [https://github.com/espruino/Espruino/tree/master/libs/js/banglejs тут].
* Сборка описана в файле '''BANGLEJS.py''':
** Устройство '''SPIFLASH''' вызывает определение '''SPIFLASH_BASE''', что включает в ''«jshardware.c»'' поддержку внешней [[flash-памяти]] с шиной [[SPI]]
* Загрузчик начинается с '''0x7A000''' (на 4 Кб меньше, чем у стандартного загрузчика '''SDK12'''), потому что изначально это '''SDK11'''-устройство.
 
== Аппаратная начинка Bangle.js ==
 
Хотите заглянуть внутрь [[Bangle.js]]? Ознакомьтесь с [http://wikihandbk.com/wiki/Espruino:Примеры/Разборка_Bangle.js этим руководством].
* [http://kionixfs.kionix.com/en/datasheet/KX023-1025%20Specifications%20Rev%2012.0.pdf Акселерометр KX023]
* [https://www.espruino.com/files/GMC303.pdf 3-осевой компас GMC303]
* Пульсометр BD 1668 (даташита нет). Всё аналоговое – компаратор на операционном усилителе, сравнивающий две световые волны
* 32-мегабитная flash-память – тот же набор команд, что и у [https://media.digikey.com/pdf/Data%20Sheets/Macronix/MX25U12835F.pdf Macronix MX25]
* LCD-дисплей 240х240 с [https://www.rhydolabz.com/documents/33/ST7789.pdf драйвером ST7789] (8-битный параллельный интерфейс)
* Сенсорный контроллер Holtek – возможно, [https://www.holtek.com.tw/documents/10179/11842/BS83A02A-4_A04A-3-4v171.pdf BS83A02A] с 2 сенсорными зонами
* GPS-модуль – это [https://www.u-blox.com/sites/default/files/products/documents/u-blox8-M8_ReceiverDescrProtSpec_%28UBX-13003221%29_Public.pdf UBlox UBX-M8130]
* Литий-ионная батарея 502527
 
== GPS ==
 
Как уже говорилось выше, [[GPS-модуль]] – это [[UBlox UBX-M8130]].
 
В момент загрузки он сообщает ROM CORE 3.01, PROTVER=18.00*11.
 
[[Espruino]] осуществляет приём и парсинг NMEA-данных через GPS UART при вызове Bangle.setGPSPower(1).
 
Но вы также можете настраивать [[GPS]], отправляя команды UBLOX UBX (см. [https://github.com/espruino/BangleApps/blob/master/testing/GPS-comms.js тут]).
 
== GPIO-контакты ==
 
IO-контакты подключены к nRF52. Кроме того, у Bangle.js есть IO-расширитель для подачи питания на другие вещи.
 
=== nRF52 ===
 
{| class="wikitable"
|-
|| '''Контакт'''
|| '''Название'''
|| '''Примечания'''
|-
|| D0
|| LCD_D0
||Биты 0-7 задаются вместе с помощью<span style="color:#808080;">(</span><span style="color:#808080;">char</span><span style="color:#808080;"><nowiki>*)</nowiki></span><span style="color:#808080;">P</span><span style="color:#808080;">0_</span><span style="color:#808080;">OUT</span>
|-
|| D1
|| LCD_D1
||Биты 0-7 задаются вместе с помощью </span><span style="color:#808080;">(</span><span style="color:#808080;">char</span><span style="color:#808080;"><nowiki>*)</nowiki></span><span style="color:#808080;">P</span><span style="color:#808080;">0_</span><span style="color:#808080;">OUT</span>
|-
|| D2
|| LCD_D2
||Биты 0-7 задаются вместе с помощью </span><span style="color:#808080;">(</span><span style="color:#808080;">char</span><span style="color:#808080;"><nowiki>*)</nowiki></span><span style="color:#808080;">P</span><span style="color:#808080;">0_</span><span style="color:#808080;">OUT</span>
|-
|| D3
|| LCD_D3
||Биты 0-7 задаются вместе с помощью </span><span style="color:#808080;">(</span><span style="color:#808080;">char</span><span style="color:#808080;"><nowiki>*)</nowiki></span><span style="color:#808080;">P</span><span style="color:#808080;">0_</span><span style="color:#808080;">OUT</span>
|-
|| D4
|| LCD_D4
||Биты 0-7 задаются вместе с помощью </span><span style="color:#808080;">(</span><span style="color:#808080;">char</span><span style="color:#808080;"><nowiki>*)</nowiki></span><span style="color:#808080;">P</span><span style="color:#808080;">0_</span><span style="color:#808080;">OUT</span>
|-
|| D5
|| LCD_D5
||Биты 0-7 задаются вместе с помощью </span><span style="color:#808080;">(</span><span style="color:#808080;">char</span><span style="color:#808080;"><nowiki>*)</nowiki></span><span style="color:#808080;">P</span><span style="color:#808080;">0_</span><span style="color:#808080;">OUT</span>
|-
|| D6
|| LCD_D6
||Биты 0-7 задаются вместе с помощью </span><span style="color:#808080;">(</span><span style="color:#808080;">char</span><span style="color:#808080;"><nowiki>*)</nowiki></span><span style="color:#808080;">P</span><span style="color:#808080;">0_</span><span style="color:#808080;">OUT</span>
|-
|| D7
|| LCD_D7
||Биты 0-7 задаются вместе с помощью </span><span style="color:#808080;">(</span><span style="color:#808080;">char</span><span style="color:#808080;"><nowiki>*)</nowiki></span><span style="color:#808080;">P</span><span style="color:#808080;">0_</span><span style="color:#808080;">OUT</span>
|-
|| D8
|| LCD_DC
||
|-
|| D9
|| LCD_CLK
||
|-
|| D10
|| LCD_CS
||
|-
|| D11
|| Правая тач-зона
|| Инвертированный
|-
|| D12
|| Зарядка батареи при LOW
|| Входной подтягивающий резистор
|-
|| D13
|| Вибрация, активный HIGH
||
|-
|| D14
|| I2C_SCK
||
|-
|| D15
|| I2C_SDA
||
|-
|| D16
|| Левая тач-зона
|| Инвертированный
|-
|| D17
|| D3 flash-памяти (RST – подключить к VCC)
||
|-
|| D18
|| Динамик (если есть). Если нет, то инвертированный вывод пульсометра
||
|-
|| D19
|| SCLK flash-памяти
||
|-
|| D20
|| D1 flash-памяти (MISO)
||
|-
|| D21
|| CS flash-памяти
||
|-
|| D22
|| Средняя кнопка
|| Инвертированный
|-
|| D23
|| Верхняя кнопка
|| Инвертированный
|-
|| D24
|| Нижняя кнопка
|| Инвертированный
|-
|| D25
|| RX-линия GPS
||
|-
|| D26
|| TX-линия GPS
||
|-
|| D27
|| D0 flash-памяти (MOSI)
||
|-
|| D28
|| Сброс IO-расширителя
||
|-
|| D29
|| Аналоговые данные пульсометра
||
|-
|| D30
|| Уровень батареи
|| 0.51 – низкий, 0.62 – хороший
|-
|| D31
|| D2 flash-памяти (WP – подключить к GND)
||
|-
|}
 
=== IO-расширитель ===
 
{| class="wikitable"
|-
|| '''Маска'''
|| '''Описание '''
|| '''Значение по умолчанию'''
|-
|| 0x01
|| GPS
|| 0
|-
|| 0x02
||
||
|-
|| 0x04
||
||
|-
|| 0x08
||
||
|-
|| 0x10
||
||
|-
|| 0x20
|| Подсветка LCD-дисплея
|| 1
|-
|| 0x40
|| Сброс LCD-дисплея
|| 1
|-
|| 0x80
|| Пульсометр
|| 1
|-
|}
 
[[File:Bangle.js_Technical_PCB.jpg|center]]
 
== Плата пульсометра ==
 
В правой нижней части платы (рядом с надписью R6) есть две контактные площадки для динамика.
 
Рядом с одной из них есть надпись «+» – она идёт напрямую к 3.3 вольтам, а другая через транзистор идёт к контакту D18.
 
Таким образом, D18 инвертирован, и его можно использовать только для вывода. В то же время на него подаётся питание (притянут вниз при помощи MMDT3904), так что с его помощью можно управлять относительно высокой нагрузкой (примерно до 100 мА).
 
Сам пульсометр питается от IO-расширителя и оснащён только одним аналоговым выводом – D29.
 
[[File:Bangle.js_Technical_SWD.jpg|center]]
 
[[File:Bangle.js_Technical_HRM.jpg|center]]
 
== Контакты для зарядки ==
 
Две круглые золотые контактные площадки сзади подключены к зарядной цепи Bangle.js. Левая площадка подключена к GND, а правая – к 5-вольтовой линии для зарядки.
 
[[File:Bangle.js_Technical_Charging-pins.jpg|center]]
 
== I2C ==
 
Контакт D14 – это SCK, а D15 – это SDA.
* 0x0C – магнетометр GMC303
* 0x1E – акселерометр KX023
* 0x20 – IO-расширитель
* 0x7C – неизвестно. Был проверен только один раз OEM-прошивкой


=См.также=
=См.также=


{{ads}}
 


=Внешние ссылки=
=Внешние ссылки=
Строка 19: Строка 277:
<references />
<references />


{{Навигационная таблица/Espruino}}
{{Навигационная таблица/Портал/Espruino}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 15:08, 20 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Техническая информация о Bangle.js[1]

Общую информацию о Bangle.js читайте в этой статье.

Эта статья содержит более подробную информацию о внутренней начинке Bangle.js. Если вы просто пишете JS-код, то вам она, скорее всего, не понадобится, но будет интересна, если планируете модифицировать прошивку Bangle.js.

Функции

Код

Espruino-версия для Bangle.js имеет несколько специальных модификаций:

  • Файл «jswrap_bangle.c» содержит все функции Bangle.* и почти весь функционал Bangle.js.
  • Некоторый функционал (вроде меню) написан на JavaScript и встроен в прошивку. Эти JavaScript-файлы можно найти тут.
  • Сборка описана в файле BANGLEJS.py:
    • Устройство SPIFLASH вызывает определение SPIFLASH_BASE, что включает в «jshardware.c» поддержку внешней flash-памяти с шиной SPI
  • Загрузчик начинается с 0x7A000 (на 4 Кб меньше, чем у стандартного загрузчика SDK12), потому что изначально это SDK11-устройство.

Аппаратная начинка Bangle.js

Хотите заглянуть внутрь Bangle.js? Ознакомьтесь с этим руководством.

  • Акселерометр KX023
  • 3-осевой компас GMC303
  • Пульсометр BD 1668 (даташита нет). Всё аналоговое – компаратор на операционном усилителе, сравнивающий две световые волны
  • 32-мегабитная flash-память – тот же набор команд, что и у Macronix MX25
  • LCD-дисплей 240х240 с драйвером ST7789 (8-битный параллельный интерфейс)
  • Сенсорный контроллер Holtek – возможно, BS83A02A с 2 сенсорными зонами
  • GPS-модуль – это UBlox UBX-M8130
  • Литий-ионная батарея 502527

GPS

Как уже говорилось выше, GPS-модуль – это UBlox UBX-M8130.

В момент загрузки он сообщает ROM CORE 3.01, PROTVER=18.00*11.

Espruino осуществляет приём и парсинг NMEA-данных через GPS UART при вызове Bangle.setGPSPower(1).

Но вы также можете настраивать GPS, отправляя команды UBLOX UBX (см. тут).

GPIO-контакты

IO-контакты подключены к nRF52. Кроме того, у Bangle.js есть IO-расширитель для подачи питания на другие вещи.

nRF52

Контакт Название Примечания
D0 LCD_D0 Биты 0-7 задаются вместе с помощью(char*)P0_OUT
D1 LCD_D1 Биты 0-7 задаются вместе с помощью (char*)P0_OUT
D2 LCD_D2 Биты 0-7 задаются вместе с помощью (char*)P0_OUT
D3 LCD_D3 Биты 0-7 задаются вместе с помощью (char*)P0_OUT
D4 LCD_D4 Биты 0-7 задаются вместе с помощью (char*)P0_OUT
D5 LCD_D5 Биты 0-7 задаются вместе с помощью (char*)P0_OUT
D6 LCD_D6 Биты 0-7 задаются вместе с помощью (char*)P0_OUT
D7 LCD_D7 Биты 0-7 задаются вместе с помощью (char*)P0_OUT
D8 LCD_DC
D9 LCD_CLK
D10 LCD_CS
D11 Правая тач-зона Инвертированный
D12 Зарядка батареи при LOW Входной подтягивающий резистор
D13 Вибрация, активный HIGH
D14 I2C_SCK
D15 I2C_SDA
D16 Левая тач-зона Инвертированный
D17 D3 flash-памяти (RST – подключить к VCC)
D18 Динамик (если есть). Если нет, то инвертированный вывод пульсометра
D19 SCLK flash-памяти
D20 D1 flash-памяти (MISO)
D21 CS flash-памяти
D22 Средняя кнопка Инвертированный
D23 Верхняя кнопка Инвертированный
D24 Нижняя кнопка Инвертированный
D25 RX-линия GPS
D26 TX-линия GPS
D27 D0 flash-памяти (MOSI)
D28 Сброс IO-расширителя
D29 Аналоговые данные пульсометра
D30 Уровень батареи 0.51 – низкий, 0.62 – хороший
D31 D2 flash-памяти (WP – подключить к GND)

IO-расширитель

Маска Описание Значение по умолчанию
0x01 GPS 0
0x02
0x04
0x08
0x10
0x20 Подсветка LCD-дисплея 1
0x40 Сброс LCD-дисплея 1
0x80 Пульсометр 1

Плата пульсометра

В правой нижней части платы (рядом с надписью R6) есть две контактные площадки для динамика.

Рядом с одной из них есть надпись «+» – она идёт напрямую к 3.3 вольтам, а другая через транзистор идёт к контакту D18.

Таким образом, D18 инвертирован, и его можно использовать только для вывода. В то же время на него подаётся питание (притянут вниз при помощи MMDT3904), так что с его помощью можно управлять относительно высокой нагрузкой (примерно до 100 мА).

Сам пульсометр питается от IO-расширителя и оснащён только одним аналоговым выводом – D29.

Контакты для зарядки

Две круглые золотые контактные площадки сзади подключены к зарядной цепи Bangle.js. Левая площадка подключена к GND, а правая – к 5-вольтовой линии для зарядки.

I2C

Контакт D14 – это SCK, а D15 – это SDA.

  • 0x0C – магнетометр GMC303
  • 0x1E – акселерометр KX023
  • 0x20 – IO-расширитель
  • 0x7C – неизвестно. Был проверен только один раз OEM-прошивкой

См.также

Внешние ссылки