Обновить документацию команд платы

This commit is contained in:
Данил Ярош 2026-06-26 14:46:33 +03:00
parent 01dbc9bd3b
commit aa7e92a372

View File

@ -52,8 +52,6 @@ by: Паша Николаевич
После загрузки контроллер не принимает никаких команд, кроме запросов на авторизацию.
В текущей сборке `ver_2.3.6_no_auth_prizes` флаг авторизации по умолчанию выставлен в `true`, поэтому контроллер фактически стартует уже разрешенным. Если `auth_ok=false`, логика остается прежней: интерпретатор принимает только команды `07` и `08` до успешной авторизации.
Запрос – требование зашифровать строку шестнадцатеричных символов с помощью AES256 алгоритма, используя известный ключ.
Компьютер генерирует случайную последовательность из 16 байт и отправляет ее контроллеру на шифрование. Тот ее шифрует и отвечает. Компьютер расшифровывает и проверяет на совпадение.
@ -79,6 +77,48 @@ by: Паша Николаевич
# Команды
## Список команд
| Команда | Назначение, примеры, ответы |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [[#Служебные команды\|00]] | Перезагрузить контроллер (RESET) |
| [[#Служебные команды\|01]] | Отладочная. включает-выключает подробные логи. В релизе будет отключена |
| [[#Служебные команды\|02]] | Подготовиться к приему файла. освободить место, отформатировать встроенную файловую, проверить хватит ли места. <br>_**Например**_, `02356987` - заявка на файл обновления размером 356987 байт.<br>Выполняется около 15 секунд, после чего весь прием  данных в порту заносится в файл "update.bin".<br>Ответ при приеме файла - каждый блок (4096) - размер принятого.<br>По окончании - переход снова в режим команд (подробнее – [Обновление](#Обновление)). |
| [[#Служебные команды\|03]] | Показать содержимое SPIFFS |
| [[#Служебные команды\|04]] | Запустить ОТА обновление с ранее записанным файлом SPIFFS: `/update.bin` |
| [[#Служебные команды\|05]] | Показать версию прошивки (указана в дефолтах) |
| [[#Служебные команды\|06]] | Показать MAC-адрес (без двоеточий, как в оригинале), уникальный, можно считать серийным номером |
| [[#Авторизация\|07]] | Безопасность (запрос авторизации от компа. На этот запрос создается рандомный запрос навстречу. См. [[#Алгоритм авторизации]]) |
| [[#Авторизация\|08]] | Безопасность (прием ответа от компьютера на запрос `07`. См. [[#Алгоритм авторизации]]) |
| [[#Служебные команды\|09]] | Сброс EEPROM (параметром - MAC без двоеточий, иначе не сбросится) |
| 10 | Подтверждение принятия сигнала COIN, иначе этот сигнал будет посылаться снова с периодичностью `200 мс` (сколько приняли койнов, столько и подтверждений быть должно) |
| 20X | Установить состояние выходов - всего выходов 8, давать их двоичное состояние.<br>_**Например**_, `203` - вывести 1 и 2 выходы по единичке, остальные - нолики. Соответственно, выход на разъеме будет "прижат" к земле. |
| 21XY | Установить состояние выхода номер Х в -> Y \[0,1,2(инверсия)\].<br>_**Примеры:**_<br>`2131` - Включить 3 по индексу выход<br>`2170` - Выключить 7 по индексу выход |
| [[#Отдельный раздел для призовой стойки\|25CCB]] | Витрина призов (см. [[#Отдельный раздел для призовой стойки]]): <br>`25` - запрос состояния; <br>`2501B` - выдать приз из ячейки `B`; <br>`2511B` - открыть ячейку `B`; <br>`25991`/`25990` - включить/выключить авторежим витрины. |
| 30X | Хоппер 1.<br>`301` - Включить мотор хоппера<br>`300` - Выключить мотор хоппера<br>`309` - Выдать приз (в авторежиме[^1]) |
| 40X | Хоппер 2.<br>Аналогично |
| [[#Дополнительные цифровые GPIO\|50CCP]] | Дополнительные цифровые GPIO25/GPIO26 (см. [[#Дополнительные цифровые GPIO]]): <br>`50` - запрос состояния; <br>`5001P` - конфигурация входа; <br>`5005P` - запрос уровня входа; <br>`5010P` - установка выходов. |
| [[#Программы адресных диодов\|8XYY[PARAMS]]] | Выбор программы адресных диодов `YY` по каналу `X`. <br>Для программы `08` дополнительно передается цвет `RRRGGGBBB`, для `8012..`/`8013..` - direct-группы из проекта 1 на 4-й ленте, где принимаются только `00` и `01..03` (см. [[#Программы адресных диодов]]). |
| [[#Отдельный раздел для морского боя VR\|85XX[SSS]]] | Эффекты активной VM-матрицы (выбирается командой `96`). <br>**Для матрицы `s_b`:** <br>управляющие `00`/`01`;<br>тесты `25`;<br>direct-шкалы `30..34`;<br>базовые `10..22`;<br>спец. `40..49`;<br>заливки `80..82`.<br><br>**Для `dan_ro`/`rz`:**<br>эффекты `51..56`;<br>группа `8550XX` принудительно задаёт `dan_ro`.<br>`SSS` — длительность в секундах (см. [[#Отдельный раздел для морского боя VR]]). |
| [[#Программы адресных диодов\|85]] | Без параметра отключает процесс рендеринга эффектов (чтобы освободить оперативную память) |
| [[#Отдельный раздел для Данро\|8550XX[SSS]]] | Данро (принудительная матрица `dan_ro`): <br>`855000` — очистить экран; <br>`855001` — автокарусель вкл;<br>эффекты `855010..855016`;<br>`SSS` — длительность в секундах (см. [[#Отдельный раздел для Данро]]). |
| [[#Отдельный раздел для RZ\|8560XX[SSS]]] | Резервная панель RZ (принудительная матрица `rz`): <br>`856000` — очистить экран; <br>`856001` — автокарусель вкл; <br>эффекты `856010..856016`; <br>`SSS` — длительность в секундах (см. [[#Отдельный раздел для резервной панели RZ]]). |
| [[#Отдельный раздел для RZ\|96rz + 85XX[SSS]]] | Резервная панель RZ: <br>сначала `96rz` — выбрать матрицу, затем `85` — стоп; <br>`8500`/`8501` — авто выкл/вкл; <br>эффекты `8551..8556`; тесты `8525TVVV` (см. [[#Отдельный раздел для резервной панели RZ]]). |
| [[#Настройки адресной подсветки\|89CKP]] | Настройки WS2812: <br>`C=0` - все 4 ленты, <br>`C=1/2/3` - 2-й/3-й/4-й физический канал; <br>`K=0` - порядок цветов (`0` RGB, `1` RBG, `2` BRG, `3` BGR, `4` GRB, `5` GBR), <br>`K=1` - яркость `0..255`, <br>`K=2` - гамма `0/1`.<br>***Примеры:*** <br>`8901255` - яркость всех каналов 255; <br>`89021` - включить гамму; <br>`89304` - порядок GRB для 4-го физического канала. |
| 90 | Очистить очередь команд |
| 91 | Запрос состояния цифровых входов, их всего 24(+2 входа хоппера), ответ в двоичном коде.<br>Для уменьшения объема передаваемой информации, преобразуется в десятичное число<br>_**Примеры:**_<br>`INPUT67108863` (`11111111111111111111111111`) - все кнопки не нажаты<br>`INPUT67108861` (`11111111111111111111111101`) - нажата вторая кнопка |
| 91X | _Дополнительно_: задать время антидребезга платы (`10..100` для штатного использования; по умолчанию 50 мс).<br>_**Например**_, `9110` - установить антидребезг на 10 мс |
| 92 | Запрос значения аналоговых входов **(отключает автовывод)** - ответ в формате `ADC0,0,0,0`.<br>Всего 4 аналоговых входа |
| 92X | Периодический автовывод значений аналоговых входов.<br>_**Например**_, `92100` - каждые 100 милисекунд выдавать значения ADC (`50..5000`) |
| 93 | Запрос `global_summa` (число коинов, нестираемо) |
| [[#Карты матриц\|96]] | Без параметра — запрос текущей активной VM-матрицы (ответ: `MATRIX:<name> ROWS:<n> COLS:<n>`).<br>С параметром — выбор и сохранение матрицы в NVS.<br> Список доступных карт см. [[#Карты матриц]].<br>***Примеры:***<br> `96s_b` — морской бой;<br> `96dan_ro` — Данро;<br> `96rz` — резервная панель. |
| 97 | Показать сохранённое в NVS имя активной матрицы.<br>***Формат вывода:*** `ROLE : <имя>` (до 20 символов). |
| 98 | Запрос загруженности ядер, оперативки, свободного места в памяти |
| 99 | Запрос статуса |
[^1]: Авторежим: если датчик в закрытом состоянии - на полсекунды включить мотор, ждать сработки датчика либо таймаута. Если таймаут - выдать сообщение "HOPPER1 ERROR" и наглухо повесить процесс хоппера до перезагрузки. Иначе - сообщение "HOPPER1 OK"
## Примечания
### Служебные команды
@ -86,50 +126,50 @@ by: Паша Николаевич
`02…09` – команды относятся к служебным (обновление прошивки и двойное рукопожатие)
>[!warning] Внимание!
>Обновляется только основная программа контроллера.
>Файл обновления передается как подготовленный `bin`.
>Ключи шифрования и авторизации должны соответствовать версии прошивки.
>Перешивается только основная программа, не трогается таблица разделов и буты.
>Поэтому контроллер должен шиться изначально в файловую систему «OTA0-1M+OTA1-1M+SpiFFS-1.7M».
>При прошивке зашивается ключ шифрования и AES ключ авторизации.
>Прошивка для обновления идет бин-файлом, уже криптованным.
### Программы адресных диодов
`80NNYY[PARAMS]` - выбор программы адресных диодов, где NN - номер канала в формате ДВУХ (2, two) цифр, а YY - номер параметра базового эффекта.
`8XYY[PARAMS]` - выбор программы адресных диодов, где X - номер канала в формате одной цифры, а YY - номер параметра базового эффекта.
Программа зависит от автомата и не может быть унифицирована. Именно для этого требуется обновление прошивки контроллера.
***Список базовых эффектов:***
- 00 – ничего не выводить в канал
- 01 – повторный периодический вывод последнего состояния
- 02 – погасить (выводить нолики на всю длину)
- 03 – красный
- 04 – зеленый
- 05 - синий с яркостью `B=100`
- 06 - белый (100, 100, 100)
- 07 - белый (255, 255, 255)
- 08 - пользовательский цвет `RRRGGGBBB`, где каждая компонента `000..255`
- 09 - радужный сдвиг на весь канал
- 10 - морская волна для шапки морского боя
- 11 - автоперебор медленных эффектов шапки морского боя
- 20 - idle-анимация призовой стойки
- 21 - подсветить полку призовой стойки, параметры `BCF`: ячейка `1..5`, цвет, мигание `0/1`
- 22 - красная мигающая тревога
- 23 - радужный сдвиг на весь канал
- 90 - выводить состояние, которое заполняет виртуальная панель
- `00` – ничего не выводить в канал
- `01` – повторный периодический вывод буфера
- `02` – погасить (выводить нолики на всю длину)
- `03` – красный
- `04` – зеленый
- `05` - синий
- `06` - серый (100, 100, 100)
- `07` - белый
- `08RRRGGGBBB` - пользовательский цвет, каждая компонента 3 десятичные цифры (`000..255`)
- `09` - выводить ЛГБТ переливы
- `10` - морская волна для шапки морского боя
- `11` - автоперебор медленных эффектов шапки морского боя
***Примеры:***
- `800003` - все каналы красные
- `800103` - канал 1 красный
- `800002` - все каналы черные
- `800208255000128` - канал 2, цвет RGB `255,000,128`
- `800121311` - канал 1, полка 3, красный, мигает
Для бродяг морей 4 канал - монетник и выдача приза:
`8012хх`
`8013хх`
##### Настройки адресной подсветки
- `1200` - очистить обе direct-группы на 4-й ленте; `1201..1203` - direct-группа 1, эффекты 1..3
- `1300` - очистить обе direct-группы на 4-й ленте; `1301..1303` - direct-группа 2, эффекты 1..3
`89CKP`:
- `C` - канал: `0` для всех каналов подсветки, `1..4` для конкретного канала;
#### Настройки адресной подсветки
`89CKP` меняет настройки вывода WS2812. Это не выбор эффекта, а настройка того, как уже рассчитанный цвет будет записан в буфер конкретной ленты:
- `C` - канал: `0` для всех каналов подсветки, `0..3` для конкретного канала;
- `K` - настройка: `0` порядок цветов, `1` яркость, `2` гамма-коррекция;
- `P` - значение настройки. Может состоять из нескольких цифр, например `255` для яркости. Если отправить только `89CK` без `P`, параметр будет принят как `0`, поэтому лучше передавать `P` явно.
`K=0` сохраняет порядок цветов, `K=1` меняет яркость до перезагрузки, `K=2` включает/выключает гамма-коррекцию до перезагрузки.
| `K` | `P` | Что меняет | Сохранение |
| :-: | :------- | :------------------------------------------- | :--------------------- |
| `0` | `0..5` | Порядок цветов в буфере WS2812 | Сохраняется в NVS |
| `1` | `0..255` | Яркость ленты | Только до перезагрузки |
| `2` | `0/1` | Гамма-коррекция: `1` включить, `0` выключить | Только до перезагрузки |
Порядки цвета для `K=0`:
@ -142,17 +182,83 @@ by: Паша Николаевич
| `4` | GRB |
| `5` | GBR |
***Примеры:***
- `89004` - установить порядок `GRB` для всех каналов
- `89104` - установить порядок `GRB` для 1-го канала
- `89404` - установить порядок `GRB` для 4-го канала
- `8901255` - установить яркость `255` для всех каналов
- `8901128` - установить яркость `128` для всех каналов
- `89020` - выключить гамма-коррекцию на всех каналах
- `89421` - включить гамма-коррекцию для 4-го канала
Для проверки удобно включать тестовые цвета:
- `8003` - все ленты красным;
- `8004` - все ленты зеленым;
- `8005` - все ленты синим.
Если какая-то лента показывает цвета неверно, поменяйте ее порядок через `89C0P`.
###### Примеры порядка цветов
| Команда | Что делает |
| :--- | :--- |
| `89004` | Установить `GRB` для всех лент |
| `89104` | Установить `GRB` для 2-го физического канала |
| `89204` | Установить `GRB` для 3-го физического канала |
| `89304` | Установить `GRB` для 4-го физического канала |
| `89000` | Установить `RGB` для всех лент |
| `89300` | Установить `RGB` для 4-го физического канала |
###### Примеры яркости и гаммы
| Команда | Что делает |
| :-------- | :--------------------------------------------------- |
| `8901255` | Яркость `255` для всех лент |
| `8901128` | Яркость `128` для всех лент |
| `8931128` | Яркость `128` для 4-го физического канала |
| `89021` | Включить гамма-коррекцию для всех лент |
| `89020` | Выключить гамма-коррекцию для всех лент |
| `89321` | Включить гамма-коррекцию для 4-го физического канала |
| | |
#### Карты матриц
Выбор карты командой `96<имя>`, сохраняется в NVS, восстанавливается при загрузке.
**Морской бой (s_b):**
- `s_b` — основная карта, 58×42, 4 канала
- `s_b_v1` — версия 1, 65×69, 3 канала, 4 канал шкалы (3 шкалы)
- `s_b_v2` — версия 2, 65×69, 3 канала, 4 канал шкалы (4 шкалы)
**Данро (dan_ro):**
- `dan_ro` — основная карта, 61×19, 2 стрипа (strip 0 зеркалируется в strip 1)
- `dan_ro_v1` — версия 1, 61×19, 1 стрип (без зеркала)
**Резервная панель RZ (rz):**
- `rz` — основная карта, 61×19, 2 стрипа (strip 0 зеркалируется в strip 1)
- `rz_v1` — версия 1, 61×19, 1 стрип (без зеркала)
#### Специфичные программы
##### Отдельный раздел для призовой стойки
- `20` - режим простоя призовой стойки
- `21BCF` - подсветить полку призовой стойки: `B` ячейка `1..5`, `C` цвет, `F` мигание `0/1`
- `22` - красная мигающая тревога
- `23` - ЛГБТ переливы на всю ленту
- `90` - выводить внешний буфер, который заполняет рендер виртуальной панели
`25CCB`:
- `CC` – подкоманда;
- `B` – номер ячейки `1..5`, если подкоманда работает с ячейкой.
| Формат | Назначение |
| :----: | :--------- |
| `25` | Показать состояние всех ячеек |
| `2501B` | Выдать приз из ячейки `B` |
| `2511B` | Открыть ячейку `B` без списания приза |
| `25991` | Включить автозапуск режима призовой стойки и перезагрузиться через 3 сек |
| `25990` | Выключить автозапуск режима призовой стойки и перезагрузиться через 3 сек |
Ответы:
- `BOX<n>_OPEN` – ячейка открыта;
- `BOX<n>_ERROR` – ячейка не открылась или нет приза;
- `BOX<n>_OK` – ячейка закрыта и содержит приз;
- `BOX<n>_OK+CARD` – в ячейке есть приз и привязанная RFID-карта;
- `BOX<n>_EMPTY` – ячейка пуста.
##### Отдельный раздел для Бродяги морей
`81XX[NN]` управляет двумя отдельными direct-объектами Бродяги морей. Эта группа похожа на direct-шкалы `8530..8534`, но не является частью команды `85` и используется отдельно от панелей `85`, `86` и `87`.
@ -414,52 +520,34 @@ by: Паша Николаевич
- `87254105` - адресный элемент `105`
- `87` - остановить анимации
## Список команд
##### Дополнительные цифровые GPIO
| Команда | Назначение, примеры, ответы |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 00 | Перезагрузить контроллер (RESET) |
| 01 | Отладочная. включает-выключает подробные логи. В релизе будет отключена |
| 02 | Подготовиться к приему файла обновления.<br>_**Например**_, `02356987` - заявка на файл размером 356987 байт.<br>После подготовки все данные из порта записываются в файл обновления.<br>Ответ при приеме файла - размер принятого блока.<br>По окончании - переход снова в режим команд (подробнее – [Обновление](#Обновление)). |
| 03 | Показать список файлов обновления и служебных файлов |
| 04 | Запустить обновление с ранее переданным файлом |
| 05 | Показать версию прошивки (указана в дефолтах) |
| 06 | Показать MAC-адрес (без двоеточий, как в оригинале), уникальный, можно считать серийным номером |
| 07 | Безопасность (запрос авторизации от компа. На этот запрос создается рандомный запрос навстречу. См. [[#Алгоритм авторизации]]) |
| 08 | Безопасность (прием ответа от компьютера на запрос `07`. См. [[#Алгоритм авторизации]]) |
| 09 | Сброс настроек контроллера. Параметр - MAC без двоеточий, иначе команда не выполнится. Накопительные счетчики сохраняются |
| 10 | Подтверждение принятия сигнала COIN, иначе этот сигнал будет посылаться снова с периодичностью `200 мс` (сколько приняли койнов, столько и подтверждений быть должно) |
| 20X | Установить состояние 8 выходов двоичной маской.<br>_**Например**_, `203` - включить выходы 1 и 2, остальные выключить. |
| 21XY | Установить состояние выхода номер Х в -> Y \[0,1,2(инверсия)\].<br>_**Примеры:**_<br>`2131` - Включить 3 по индексу выход<br>`2170` - Выключить 7 по индексу выход |
| 25CCB | Команды призового шкафа.<br>`25` - состояние всех ячеек<br>`2501B` - выдать приз из ячейки `B` (`1..5`)<br>`2511B` - открыть ячейку без списания<br>`25991` / `25990` - включить / выключить автозапуск призовой стойки с перезагрузкой |
| 30X | Хоппер 1.<br>`301` - Включить мотор хоппера<br>`300` - Выключить мотор хоппера<br>`309` - Выдать приз (в авторежиме[^1]) |
| 40X | Хоппер 2.<br>Аналогично |
| 50CCP | Дополнительные выходы.<br>`50` - показать режимы и уровни<br>`5001P` - настроить режимы дополнительных выходов<br>`5005P` - показать краткое состояние `ADD:..`<br>`5010P` - установить уровни выходов |
| 80NNYY | Выбор программы адресных диодов `YY` по каналу `NN`: `00` - все каналы, `01..04` - канал 1..4 (См. [[#Программы адресных диодов]]) |
| 81XXNN | Бродяги морей: direct-объекты (См. [[#Отдельный раздел для Бродяги морей]]).<br>`8130` - очистить<br>`8131NN` / `8132NN` - уровни объектов<br>`81311..81313` и `81321..81323` - эффекты объектов |
| 82..84 | Свободно / зарезервировано под новую логику |
| 85XXSSS | Виртуальная панель морского боя `s_b` (См. [[#Отдельный раздел для морского боя VR]]) |
| 85 | Без параметра отключает анимации `s_b` |
| 86XXSSS | Виртуальная панель Данро (См. [[#Отдельный раздел для Данро]]) |
| 86 | Без параметра отключает анимации Данро |
| 87XXSSS | Резервная виртуальная панель RZ (См. [[#Отдельный раздел для RZ]]) |
| 87 | Без параметра отключает анимации RZ |
| 89CKP | Настройки адресной подсветки. Старый короткий вариант `89[X]` переключает цветовое чередование.<br>***Примеры чередования:***<br>- `89` или `8900` – RGB<br>- `8901` – RBG<br>- `8902` – BRG<br>- `8903` – BGR<br>- `8904` - GRB<br>- `8905` - GBR |
| 90 | Очистить очередь команд |
| 91 | Запрос состояния цифровых входов, их всего 24(+2 входа хоппера), ответ в двоичном коде.<br>Для уменьшения объема передаваемой информации, преобразуется в десятичное число<br>_**Примеры:**_<br>`INPUT67108863` (`11111111111111111111111111`) - все кнопки не нажаты<br>`INPUT67108861` (`11111111111111111111111101`) - нажата вторая кнопка |
| 91X | _Дополнительно_: задать время антидребезга входов (`10..100`; по умолчанию установлено на 50 мс)<br>_**Например**_, 9110 - установить антидребезг на 10 мс |
| 92 | Запрос значения аналоговых входов **(отключает автовывод)** - ответ в формате `ADC0,0,0,0`.<br>Всего 4 аналоговых входа |
| 92X | Периодический автовывод значений аналоговых входов.<br>_**Например**_, `92100` - каждые 100 миллисекунд выдавать значения ADC (`50..5000`) |
| 93 | Запрос `global_summa` (число коинов, нестираемо). Ответ: `SUMMA:<value>` |
| 96 | Cохранение в памяти платы пользовательского значения.<br>***Например,*** «роли» контроллера (левый-правый в морском бое, или шкаф…)<br>***Пример команды:*** `96right` |
| 97 | Вывод пользовательского значения<br>***Формат вывода:*** `ROLE : <значение>` (до 20 символов) |
| 98 | Запрос технического статуса контроллера: загрузка, память, свободное место |
| 99 | Запрос статуса: имя контроллера, версия, `READY!` при `auth_ok=true` |
`50CCP`:
- `CC` – подкоманда;
- `P` – числовой параметр.
[^1]: Авторежим: если датчик в закрытом состоянии - на полсекунды включить мотор, ждать сработки датчика либо таймаута. Если таймаут - выдать сообщение "HOPPER1 ERROR" и наглухо повесить процесс хоппера до перезагрузки. Иначе - сообщение "HOPPER1 OK"
| Формат | Назначение |
| :----: | :--------- |
| `50` | Показать режимы и уровни GPIO25/GPIO26 |
| `5001P` | Настроить режимы: если `P > 9`, GPIO25 выход; если младший бит `P` равен `1`, GPIO26 выход |
| `5005P` | Показать краткое состояние: `ADD:..` |
| `5010P` | Установить уровни выходов: GPIO25 = `P > 9`, GPIO26 = младший бит `P` |
# Обновление прошивки платы
## Православный (новый)
Зайти в програму для платы, и обновить прошивку через него.
Для этого надо:
1. Заполучить новую прошивку
2. Подключить плату
3. Открыть приложение
4. Подключиться к плате через приложение
5. Обновить прошивку через специальный пункт "Обновление прошивки"
## Пендосский (старый)
# Обновление
Файл обновления принимается командой `02<size>`. После полного приема контроллер отвечает текущим количеством записанных байт и итоговым `file size=<size> OK`, затем обновление запускается командой `04`.
Для обновления платы на новую версию прошивки надо: