Документация проекта “Балалайка”

Протокол обмена

Общие сведения

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

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0xXX Идентификатор получателя пакета
2 type uint8_t 0xXX Тип пакета
... data ... ... Блок данных (зависит от типа пакета)
N checksum uint8_t 0xXX Котрольная сумма пакета - младший байт суммы всех байтов пакета

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

Данные, для передачи которых требуется больше одного байта (uint16_t, uint32_t) передаются в формате little endian. Выбор данного формата позволяет обойтись без дополнительных конвертаций при использовании платформ x86, AVR и ARM.

В последнем байте пакета содержится контрольная сумма (checksum), вычисляемая как младший байт суммы всех байтов пакета.

Пакеты бывают двух типов:

  1. Пакет типа “Запрос
  2. Пакет типа “Ответ

Пара Запрос-Ответ формирует сущность “Команда”. Команды специфичны для каждого типа устройства, которое может работать в данной сети:

  • Головное устройство;
  • Датчик ФПГ;
  • Датчик двигательной активности;
  • Датчик температуры.

Описание общих полей

Поле “Стартовый байт” - start_byte

Стартовый байт всегда равен 0xAA и используется для определения начала пакета.

Поле “Идентификатор получателя пакета” - id

Идентификатор получателя пакета используется для определения адреса, куда передается запрос.

Идентификаторы получателя пакета приведены в таблице ниже.

Поле ID Получатель пакета
0x00 Компьютер (хост-устройство)
0x01 Головной модуль
0x10 Датчик температуры
0x30 Датчик двигательной активности
0x40 Датчик ФПГ

Поле “Тип пакета” - type

Тип пакета определяет данные, содержащиеся в пакете, которые либо запрашиваются в запросе, либо содержатся в ответе.

Типы пакетов приведены в таблице ниже.

Поле type Тип пакета
0x01 Пакет команды “Управление состоянием”
0x02 Пакет контроля регистров ADS1299
0xA0 Пакет с данными от одной ADS1299
0xA1 Пакет с данными от двух ADS1299
0xA3 Пакет с данными от четырех ADS1299
0xB0 Пакет с данными регистров ADS1299
0x10 Пакет с данными температуры
0x20 Пакет с данными о статусе аккумулятора
0x30 Пакет с углами Эйлера (данные IMU)
0x31 Пакет с кватернионом (данные IMU)
0x32 Пакет с сырыми данными (данные IMU)
0x40 Пакет с пульсом (данные ФПГ)
0x41 Пакет с сатурацией крови (данные ФПГ)
0x42 Пакет с сырыми данными (данные ФПГ)

Поле “Контрольная сумма пакета” - checksum

Контрольная сумма пакета - checksum определяется как младший байт суммы всех байтов пакета.

void NDK_CalcCheckSumForPacket(uint8_t * packet, uint8_t len)
{
    uint8_t checkSum = 0x00;
    for (uint8_t i = 0; i < len - 1; i++)
    {
        checkSum += *packet;
        packet++;
    }
    *packet = checkSum;
  }

Пример реализации вычисления контрольной суммы, где:

  • packet - указатель на массив с пакетом данных;
  • len - длина массива

В результате выполнения данной функции контрольная сумма записывается в последний байт пакета.

Формат запроса для команд

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

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0xXX Идентификатор получателя пакета
2 type uint8_t 0x01 Тип пакета - пакет команды “Управление состоянием”
3 action uint8_t 0xXX Действие, которое необходимо выполнить
4 param uint8_t 0xXX Параметр для действия
5 data uint8_t 0xXX Данные для действия
6 payload uint8_t 0xXX Дополнительные данные для действия
7 checksum uint8_t 0xXX Котрольная сумма пакета - младший байт суммы всех байтов пакета

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

Возможные значения полей param, data, payload, специфичны для отдельно взятых устройств и возможных действий.

Модуль двигательной активности

_images/module_bno055.jpg

Технические характеристики

  • Размеры: TBA
  • Напряжение питания: TBA
  • Потребляемые ток, пиковый: TBA

Подключение к головному устройству

Подключение к головному устройству осуществляется по протоколу RS-485 через разъем SH04, расположенному на плате. Распиновка приведена на рисунке ниже.

_images/sh04w.png

Выполняемые команды

Команда на получение углов Эйлера

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x30 Идентификатор получателя пакета. 0x30 - получатель - Датчик ДА
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x30 Параметр для действия. 0x30 - Данные углов Эйлера.
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x0B Котрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 20 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x01 Идентификатор получателя пакета 0x01 - получатель - Головной модуль
2 type uint8_t 0x30 0x30 - Данные углов Эйлера
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 heading uint16_t 0xXX

Один из углов Эйлера - рысканье. 1 градус = 16 LSB

Порядок байт - little endian

8 0xXX
9 roll uint16_t 0xXX

Один из углов Эйлера - крен. 1 градус = 16 LSB

Порядок байт - little endian

10 0xXX
11 pitch uint16_t 0xXX

Один из углов Эйлера - тангаж. 1 градус = 16 LSB

Порядок байт - little endian

12
13 lin_acc_x uint16_t 0xXX

Линейное ускорение по оси X. 1 м/с^2 = 100 LSB

Порядок байт - little endian

14
15 lin_acc_y uint16_t 0xXX

Линейное ускорение по оси Y. 1 м/с^2 = 100 LSB

Порядок байт - little endian

16
17 lin_acc_z uint16_t 0xXX

Линейное ускорение по оси Z. 1 м/с^2 = 100 LSB

Порядок байт - little endian

18
19 checksum uint8_t 0xXX Контрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений
  • Поле systime содержит значение системного времени модуля с дискретностью миллисекунда
  • Поле heading содержит значение одного из углов Эйлера - рысканье. Диапазон значений: от 0° до 360°. (поворот по часовой стрелке увеличивает значение)
  • Поле roll содержит значение одного из углов Эйлера - крен. Диапазон значений: от -90° до 90°. (увеличивается с увеличинеим наклона)
  • Поле pitch содержит значение одного из углов Эйлера - тангаж. Диапазон значений: от -180° до 180° (поворот по часовой стрелке увеличивает значение)
  • Поля lin_acc_x, lin_acc_y, lin_acc_z содержат значения линейного ускорения по соответствующим осям
Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 30 01 00 30 00 00 0B

Ответ: AA 01 30 FA 27 00 00 00 00 C3 FE 98 FF 01 00 FE FF 00 00 52

Интерпретация ответа:

  • тип пакета - данные кватерниона
  • systime = 00 00 27 FA = 10 234 мc,
  • heading = 00 00 = 0°,
  • roll = FE C3 = -19.8125°,
  • pitch = FF 98 = -6.5°,
  • acc_x = 00 01 = 0.01 м/с2,
  • acc_y = FF FE = -0.02 м/с2,
  • acc_z = 00 00 = 0 м/с2.

Команда на получение кватернионов

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x30 Идентификатор получателя пакета. 0x30 - получатель - Датчик ДА
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x31 Параметр для действия. 0x40 - Данные кватернионов
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x0C Контрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 16 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x01 Идентификатор получателя пакета 0x01 - получатель - Головной модуль
2 type uint8_t 0x31 0x31 - Данные кватернионов
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 w uint16_t 0xXX

Значение кватерниона. 1 кватернион = 2^14 LSB

Порядок байт - little endian

8 0xXX
9 x uint16_t 0xXX

Значение кватерниона. 1 кватернион = 2^14 LSB

Порядок байт - little endian

10 0xXX
11 y uint16_t 0xXX

Значение кватерниона. 1 кватернион = 2^14 LSB

Порядок байт - little endian

12
13 z uint16_t 0xXX

Значение кватерниона. 1 кватернион = 2^14 LSB

Порядок байт - little endian

14
15 checksum uint8_t 0xXX Контрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений
  • Поле systime содержит значение системного времени модуля с дискретностью миллисекунда
  • Поля w, x, y, z содержат значения кватернионов
Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 30 01 00 31 00 00 0C

Ответ: AA 01 31 A1 0E 00 00 F5 3E 8A 03 F4 0A FF FF 47

Интерпретация ответа:

  • тип пакета - данные кватерниона
  • systime = 00 00 0E A1 = 3745 мс,
  • w = 3E F5 = 0.98370361328125,
  • x = 03 8A = 0.0552978515625,
  • y = 0A F4 = 0.171142578125,
  • z = FF FF = -0.00006103515625.

Команда на получение сырых данных

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x30 Идентификатор получателя пакета. 0x30 - получатель - Датчик ДА
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x32 Параметр для действия. 0x32 - Сырые данные
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x0D Контрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 26 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x01 Идентификатор получателя пакета 0x01 - получатель - Головной модуль
2 type uint8_t 0x32 0x32 - Сырые данные
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 acc_x uint16_t 0xXX

Данные акселерометра по оси X. 1 м/с^2 = 100 LSB

Порядок байт - little endian

8 0xXX
9 acc_y uint16_t 0xXX

Данные акселерометра по оси Y. 1 м/с^2 = 100 LSB

Порядок байт - little endian

10 0xXX
11 acc_z uint16_t 0xXX

Данные акселерометра по оси Z. 1 м/с^2 = 100 LSB

Порядок байт - little endian

12 0xXX
13 mag_x uint16_t 0xXX

Данные магнитометра по оси X. 1 мкТ = 16 LSB

Порядок байт - little endian

14 0xXX
15 mag_y uint16_t 0xXX

Данные магнитометра по оси Y. 1 мкТ = 16 LSB

Порядок байт - little endian

16 0xXX
17 mag_z   0xXX

Данные магнитометра по оси Z. 1 мкТ = 16 LSB

Порядок байт - little endian

18 0xXX
19 gyro_x int16_t 0xXX

Данные гироскопа по оси X. 1 Dps = 16 LSB

Порядок байт - little endian

20 0xXX
21 gyro_y int16_t 0xXX

Данные гироскопа по оси Y. 1 Dps = 16 LSB

Порядок байт - little endian

22 0xXX
23 gyro_z int16_t 0xXX

Данные гироскопа по оси Z. 1 Dps = 16 LSB

Порядок байт - little endian

24 0xXX
25 checksum uint8_t 0xXX Контрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений
  • Поле systime содержит значение системного времени модуля с дискретностью миллисекунда
  • Поля acc_x, acc_y, acc_z содержат данные акселерометра по соответствующим осям
  • Поля mag_x, mag_y, mag_z содержат данные магнитометра по соответствующим осям
  • Поля gyro_x, gyro_y, gyro_z содержат данные гироскопа по соответствующим осям
Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 30 01 00 32 00 00 0D

Ответ: AA 01 32 3F 0C 00 00 B7 FE 69 00 99 03 D0 00 C4 FF 77 FE FF FF 01 00 01 00 EA

Интерпретация ответа:

  • тип пакета - сырые данные ДА
  • systime = 00 00 0C 3F = 3135 мс,
  • acc_x = FE B7 = -3.29 м/с^2,
  • acc_y = 00 69 = 1.05 м/с^2,
  • acc_z = 03 99 = 9.21 м/с^2,
  • mag_x = 00 D0 = 13 1 мкТ,
  • mag_y = FF C4 = -3.75 1 мкТ,
  • mag_z = FE 77 = -24.5625 1 мкТ,
  • gyro_x = FF FF = -0.0625 Dps,
  • gyro_y = 00 01 = 0.0625 Dps,
  • gyro_z = 00 01 = 0.0625 Dps.

Модуль температуры

_images/module_tmp112.jpg

Технические характеристики

  • Размеры: TBA
  • Напряжение питания: TBA
  • Потребляемые ток, пиковый: TBA

Подключение к головному устройству

Подключение к головному устройству осуществляется по протоколу RS-485 через разъем SH04, расположенному на плате. Распиновка приведена на рисунке ниже.

_images/sh04w.png

Выполняемые команды

Команда на получение температуры

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x10 Идентификатор получателя пакета. 0x10 - получатель - Датчик температуры
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x10 Параметр для действия. 0x10 - данные температуры
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0xCB Контрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 13 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x01 Идентификатор получателя пакета 0x01 - получатель - Головное устройство
2 type uint8_t 0x10 0x10 - Данные темперратуры
3 sensor_id uint8_t 0x00 Идентификатор сенсора
4 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

5 0xXX
6 0xXX
7 0xXX
8 currentTemp uint32_t 0xXX

Данные температуры в градусах Цельсия

Полученное значение необходимо разделить на 10000

Порядок байт - little endian

9 0xXX
10 0xXX
11 0xXX
12 checksum uint8_t 0xXX Контрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений
  • Поле systime содержит значение системного времени модуля с дискретностью 1 миллисекунда.
  • Поле currentTemp содержит значение температуры в градусах цельсия (Полученное значение необходимо разделить на 10000).
Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 10 01 00 10 00 00 CB

Ответ: AA 01 10 00 F5 71 94 00 34 8C 03 00 78

Интерпретация ответа:

  • тип пакета - данные температуры;
  • systime = 00 94 71 F5 = 9728501 мс,
  • температура = 00 03 8C 34 = 23.2 °C.

Модуль ФПГ

_images/module_ppg.png

Технические характеристики

  • Размеры: TBA
  • Напряжение питания: TBA
  • Потребляемые ток, пиковый: TBA

Подключение к головному устройству

Подключение к головному устройству осуществляется по протоколу RS-485 через разъем SH04, расположенному на плате модуля ФПГ. Распиновка приведена на рисунке ниже.

_images/sh04w.png

Выполняемые команды

Команда на получение пульса

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x40 Параметр для действия. 0x40 - Данные пульса
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x2B Контрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 12 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x01 Идентификатор получателя пакета 0x01 - получатель - Головное устройство
2 type uint8_t 0x40 0x40 - Данные пульса
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 pulse uint32_t 0xXX

Частота сердечных сокращений в Уд/с

Порядок байт - little endian

8 0xXX
9 0xXX
10 0xXX
11 checksum uint8_t 0xXX Контрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений
  • Поле systime содержит значение системного времени модуля с дискретностью 1 миллисекунда.
  • Поле pulse содержит значение частоты сердечных сокращений.
Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 40 01 00 40 00 00 2B

Ответ: AA 01 40 xx xx xx xx xx xx xx xx xx

Интерпретация ответа:

  • тип пакета - данные пульса,
  • systime = 1,
  • пульс = 10 уд/мин.

Команда на получение сатурации

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x41 Параметр для действия. 0x41 - Данные сатурации крови.
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x2C Контрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 12 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x01 Идентификатор получателя пакета 0x01 - получатель - Головное устройство
2 type uint8_t 0x41 0x41 - Данные сатурации крови
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 spo uint32_t 0xXX

Сатурация крови в процентах.

Порядок байт - little endian

8 0xXX
9 0xXX
10 0xXX
11 checksum uint8_t 0xXX Контрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений
  • Поле systick содержит значение системного времени модуля с дискретностью 1 миллисекунда.
  • Поля spo содержат значения сатурации крови в процентах.
Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 40 01 00 41 00 00 2C

Ответ: AA 01 41 xx xx xx xx xx xx xx xx xx

Интерпретация ответа:

  • тип пакета - данные сатурации,
  • systime = 1,
  • сатурация = 10%.

Команда на получение сырых данных

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x42 Параметр для действия. 0x42 - Сырые данные
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x2D Контрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 26 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x01 Идентификатор получателя пакета 0x01 - получатель - Головное устройство
2 type uint8_t 0x42 0x42 - Сырые данные
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 ppg_raw_red uint32_t 0xXX

Сырые данные датчика ФПГ с красного светодиода в отсчетах АЦП. Безразмерная величина.

Порядок байт - little endian

8 0xXX
9 0xXX
10 0xXX
11 ppg_raw_ir uint32_t 0xXX

Сырые данные датчика ФПГ с ИК-светодиода в отсчетах АЦП. Безразмерная величина.

Порядок байт - little endian

12 0xXX
13 0xXX
14 0xXX
15 ppg_raw_green uint32_t 0xXX

Сырые данные датчика ФПГ с зеленого светодиода в осчетах АЦП. Безразмерная величина.

Порядок байт - little endian

16 0xXX
17 0xXX
18 0xXX
19 acc_x int16_t 0xXX

Линейное ускорение по оси X в 1 м/с2 = 100 LSB.

Порядок байт - little endian

20 0xXX
21 acc_y int16_t 0xXX

Линейное ускорение по оси Y в 1 м/с2 = 100 LSB.

Порядок байт - little endian

22 0xXX
23 acc_z int16_t 0xXX

Линейное ускорение по оси Z в 1 м/с2 = 100 LSB.

Порядок байт - little endian

24 0xXX
25 checksum uint8_t 0xXX Контрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений
  • Поле systick содержит значение системного времени модуля с дискретностью 1 миллисекунда.
  • Поля ppg_red, ppg_ir и ppg_green содержат значения освещенности, снятые с фотодиода по соответствующему каналу (цвету светодиода). Размерность - отсчеты АЦП и поэтому данная величина безразмерная.
  • Поля acc_x, acc_y и acc_z содержат значения линейного ускорения по соответствующим осям в формате 1 м/с2 = 100 LSB. Т.е 1 = 0.01 м/с2.
Примеры

Все команды приведены в HEX-формате без указания 0x, что удобно для копирования в терминал.

Запрос: AA 40 01 00 42 00 00 1D

Ответ: AA 00 42 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx

Интерпретация ответа:

  • Тип пакета - сырые данные ФПГ
  • systime = 1,
  • ppg_raw_red =,
  • ppg_raw_ir = ,
  • ppg_raw_green = ,
  • acc_x = ,
  • acc_y = ,
  • acc_z = .

Головное устройство

_images/system_balalaika.jpg

Технические характеристики

  • Размеры: TBA
  • Напряжение питания: TBA
  • Потребляемые ток, пиковый: TBA

Подключение модулей к головному устройству

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

_images/sh04w.png

Выполняемые команды

Команда на начало стриминга данных

Данная команда переводит головное устройство в режим стриминга данных с заданной ранее частотой дискретизации

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x42 Параметр для действия. 0x42 - Сырые данные
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x2D Котрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 26 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета 0x40 - получатель - Головное устройство
2 type uint8_t 0x42 0x42 - Сырые данные
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 ppg_red uint32_t 0xXX

Сырые данные датчика ФПГ с красного светодиода в отсчетах АЦП. Безразмерная величина.

Порядок байт - little endian

8 0xXX
9 0xXX
10 0xXX
11 ppg_ir uint32_t 0xXX

Сырые данные датчика ФПГ с ИК-светодиода в отсчетах АЦП. Безразмерная величина.

Порядок байт - little endian

12 0xXX
13 0xXX
14 0xXX
15 ppg_green uint32_t 0xXX

Сырые данные датчика ФПГ с зеленого светодиода в осчетах АЦП. Безразмерная величина.

Порядок байт - little endian

16 0xXX
17 0xXX
18 0xXX
19 acc_x int16_t 0xXX

Линейное ускорение по оси X в 1 м/с2 = 100 LSB.

Порядок байт - little endian

20 0xXX
21 acc_y int16_t 0xXX

Линейное ускорение по оси Y в 1 м/с2 = 100 LSB.

Порядок байт - little endian

22 0xXX
23 acc_z int16_t 0xXX

Линейное ускорение по оси Z в 1 м/с2 = 100 LSB.

Порядок байт - little endian

24 0xXX
25 checksum uint8_t 0xXX Котрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений
  • Поле systick содержит значение системного времени модуля с дискретностью 1 миллисекунда.
  • Поля ppg_red, ppg_ir и ppg_green содержат значения освещенности, снятые с фотодиода по соответствующему каналу (цвету светодиода). Размерность - отсчеты АЦП и поэтому данная величина безразмерная.
  • Поля acc_x, acc_y и acc_z содержат значения линейного ускорения по соответствующим осям в формате 1 м/с2 = 100 LSB. Т.е 1 = 0.01 м/с2.
Примеры

Все команды приведены в HEX-формате без указания 0x, что удобно для копирования в терминал.

Запрос: AA 40 01 00 42 00 00 2D

Ответ: AA 00 42 6F E3 00 00 3E 0B 00 3E E3 0B 00 00 00 00 00 00 CC FD BD 02 35 10 80

Интерпретация ответа:

  • Тип пакета - сырые данные ФПГ
  • systime = 1,
  • ppg_red =,
  • ppg_ir = ,
  • ppg_green = ,
  • acc_x = ,
  • acc_y = ,
  • acc_z = ,

Команда на получение сырых данных

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x42 Параметр для действия. 0x42 - Сырые данные
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x2D Котрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 26 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета 0x40 - получатель - Головное устройство
2 type uint8_t 0x42 0x42 - Сырые данные
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 ppg_red uint32_t 0xXX

Сырые данные датчика ФПГ с красного светодиода в отсчетах АЦП. Безразмерная величина.

Порядок байт - little endian

8 0xXX
9 0xXX
10 0xXX
11 ppg_ir uint32_t 0xXX

Сырые данные датчика ФПГ с ИК-светодиода в отсчетах АЦП. Безразмерная величина.

Порядок байт - little endian

12 0xXX
13 0xXX
14 0xXX
15 ppg_green uint32_t 0xXX

Сырые данные датчика ФПГ с зеленого светодиода в осчетах АЦП. Безразмерная величина.

Порядок байт - little endian

16 0xXX
17 0xXX
18 0xXX
19 acc_x int16_t 0xXX

Линейное ускорение по оси X в 1 м/с2 = 100 LSB.

Порядок байт - little endian

20 0xXX
21 acc_y int16_t 0xXX

Линейное ускорение по оси Y в 1 м/с2 = 100 LSB.

Порядок байт - little endian

22 0xXX
23 acc_z int16_t 0xXX

Линейное ускорение по оси Z в 1 м/с2 = 100 LSB.

Порядок байт - little endian

24 0xXX
25 checksum uint8_t 0xXX Котрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений
  • Поле systick содержит значение системного времени модуля с дискретностью 1 миллисекунда.
  • Поля ppg_red, ppg_ir и ppg_green содержат значения освещенности, снятые с фотодиода по соответствующему каналу (цвету светодиода). Размерность - отсчеты АЦП и поэтому данная величина безразмерная.
  • Поля acc_x, acc_y и acc_z содержат значения линейного ускорения по соответствующим осям в формате 1 м/с2 = 100 LSB. Т.е 1 = 0.01 м/с2.
Примеры

Все команды приведены в HEX-формате без указания 0x, что удобно для копирования в терминал.

Запрос: AA 40 01 00 42 00 00 2D

Ответ: AA 00 42 6F E3 00 00 3E 0B 00 3E E3 0B 00 00 00 00 00 00 CC FD BD 02 35 10 80

Интерпретация ответа:

  • Тип пакета - сырые данные ФПГ
  • systime = 1,
  • ppg_red =,
  • ppg_ir = ,
  • ppg_green = ,
  • acc_x = ,
  • acc_y = ,
  • acc_z = ,

Команда на получение пульса

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x40 Параметр для действия. 0x40 - Данные пульса
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x2B Котрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 12 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета 0x40 - получатель - Головное устройство
2 type uint8_t 0x40 0x40 - Данные пульса
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 pulse uint32_t 0xXX

Частота сердечных сокращений в Уд/с

Порядок байт - little endian

8 0xXX
9 0xXX
10 0xXX
11 checksum uint8_t 0xXX Котрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений

TODO сведения по имплементации значений

Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 40 01 00 40 00 00 2B

Ответ: AA 00 40 01 00 00 00 10 00 00 00 22

Интерпретация ответа: тип пакета - данные пульса, systime = 1, пульс = 10 уд/мин.

Команда на получение сатурации

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета. 0x40 - получатель - Датчик ФПГ
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x41 Параметр для действия. 0x41 - Данные сатурации крови.
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x2C Котрольная сумма пакета - младший байт суммы всех байтов пакета
Формат ответа

Длина ответа - 12 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x40 Идентификатор получателя пакета 0x40 - получатель - Головное устройство
2 type uint8_t 0x41 0x41 - Данные сатурации крови
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 spo uint32_t 0xXX

Сатурация крови в процентах.

Порядок байт - little endian

8 0xXX
9 0xXX
10 0xXX
11 checksum uint8_t 0xXX Котрольная сумма пакета - младший байт суммы всех байтов пакета
Имплементация значений

TBA

Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 40 01 00 41 00 00 2C

Ответ: AA 00 41 01 00 00 00 10 00 00 00 22

Интерпретация ответа: тип пакета - данные сатурации, systime = 1, сатурация = 10%.

Нейроустройство

Настройки UART

UART, выведенный на головном устройстве в виде порта microUSB, имеет следующие параметры:

  • Скорость - 115200
  • Количество бит данных - 8
  • Стоп бит - 1
  • Короткая запись - 115200 8N1

Изменение настроек WiFi

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

Для изменения настроек WiFi:

  1. Подключить устройство посредством microUSB-кабеля к ПК.
  2. Открыть определившийся порт посредством терминальной программы (например, putty).
  3. Несколько раз нажать Enter до появления приглашений. Залогиниться. Логин/пароль - root/409409409
  4. Выполнить configure_edison –wifi
  5. Следовать указанием мастера настройки
  6. Определить IP-адрес через ifconfig или зайти с любого компьютера в той же сети на http://balalaika.local
  7. Done.