WB Modbus Devices Firmware Update: различия между версиями

Материал из Wiren Board
(не показаны 102 промежуточные версии 6 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:Обновление прошивки Modbus-устройств Wiren Board}}
{{DISPLAYTITLE:Обновление прошивок на устройствах Wiren Board}}
== Общая информация ==
{{YouTube
|link= https://www.youtube.com/watch?v=d_olK15Xhkw
|text= Обновление прошивок устройств (24:08)
|start=1448
}}
В modbus-устройствах Wiren Board есть [[Bootloader |загрузчик (bootloader)]], который позволяет обновлять прошивки по RS-485/Modbus RTU. В режиме загрузчика основные функции устройства отключаются, а коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.


Сами прошивки выпускаются в формате релизов, которые привязаны к [[Wiren_Board_Software#releases| релизам программного обеспечения контроллера]], но имеют отличный от него цикл:
== Загрузчик прошивок ==
* '''testing''' — сюда попадают прошивки после внутреннего тестирования, доступны для пользователей testing-релиза контроллера;
* '''stable''' — через три недели после публикации в testing и при отсутствии сообщений об ошибках, прошивки считаются стабильными. В этот момент они становятся доступны и для пользователей stable-релиза контроллера. Если изменений в прошивке было много и они затрагивали основные функции устройства, то прошивка может немного задержаться в testing.


На странице каждого устройства есть ссылка на список изменений в прошивках, где прошивки в testing отмечены маркером «testing». Прошивка без отметки считается стабильной.
В новых версиях наших устройств реализован механизм загрузчика прошивок (bootloader). Он позволяет обновлять микропрограммы устройств/модулей Wiren Board по RS-485/Modbus RTU.  


Распределение прошивок по релизам позволяет избежать ситуации, когда свежая версия прошивки без продолжительного тестирования попадает в очень ответственную инсталляцию. Если для новой прошивки нужны новые функции в ПО контроллера, то либо они заедут в stable-релиз ПО вместе с прошивкой, либо прошивка задержится в testing до появления нужных функций в ПО.
В режиме загрузчика основной функционал устройства отключается. '''Коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.'''


Для прошивки подключённых через шлюз WB-MGE или аналог устройств, используйте перенаправление socat, [[WB FAQ/modbus-modules-behind-gateway | инструкция]].
== Переход в режим загрузчика ==
{{Wbincludes:Bootloader MOD}}


== Автоматическое обновление ==
== Автоматическое обновление прошивки с контроллера Wiren Board ==
[[Image: Wb-fw-mcu-updater example 1.png |500px|thumb|right| Пример работы wb-fw-mcu-updater ]]
Прошивку устройств, подключенных к контроллеру Wiren Board рекомендуем обновлять с помощью утилиты [[wb-mcu-fw-updater]]. Утилита проверяет наличие новой версии прошивки для всех подключенных устройств и, при необходимости, обновляет их.  
{{note|info|При обновлении прошивки удаляются ИК-команды, сохранённые в устройствах WB-MSW и WB-MIR. Рекомендуем сохранить банки команд перед обновлением с помощью [[WB-MSx Consumer IR Manual#Чтение/запись банков команд | скрипта]].}}
Автоматическое обновление прошивки выполняется с помощью предустановленной на контроллеры Wiren Board утилиты [[Wb-mcu-fw-updater | wb-mcu-fw-updater]] и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически.


Утилита работает только на нашем контроллере и ей нужен доступ в интернет. Если у вас нет интернета или нашего контроллера, смотрите раздел [[#manual|Ручное обновление]].
Для установки выполните в консоли:
 
Обновление прошивок устройств, подключенных к шлюзам WB-MGE и WM-MIO-E, также выполняется [[WB_Modbus_Devices_Firmware_Update#%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8_%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2,_%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%BA_%D1%88%D0%BB%D1%8E%D0%B7%D0%B0%D0%BC_WB-MGE_%D0%B8_WB-MIO-E |вручную с отображением сетевого порта в локальный]].
 
=== Обновление всех устройств на шине ===
Вы можете обновить все устройства, настроенные в разделе '''Serial Devices Configuration''' [[Wiren Board Web Interface | веб-интерфейса]]
# Подключите устройства по [[RS-485 | шине RS-485]] к контроллеру.
# [[RS-485:Configuration via Web Interface | Настройте подключенные устройства]] в веб-интерфейсе.
# Откройте консоль контроллера по [[SSH]].
# Обновите все настроенные устройства командой:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-updater update-all
</syntaxhighlight>
 
=== Обновление одного устройства ===
Чтобы обновить только одно устройство:
# Подключите устройство по шине RS-485 к контроллеру.
# Узнайте [[Wiren Board Device Modbus Address | modbus-адрес]] устройства, которое хотите обновить.
# Откройте консоль контроллера по [[SSH]].
# Запустите утилиту <code>wb-mcu-fw-updater</code> параметрами: ключ <code>update-fw</code>, а также порт и modbus-адрес.
 
Например, обновим прошивку устройства с modbus-адресом <code>70</code> и подключенного к порту <code>/dev/ttyRS485-1</code>:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
wb-mcu-fw-updater update-fw /dev/ttyRS485-1 -a70
dpkg -s wb-mcu-fw-updater || (apt update && apt install wb-mcu-fw-updater)
</syntaxhighlight>
</syntaxhighlight>


Полный список параметров и примеры работы смотрите на [[Wb-mcu-fw-updater | странице утилиты]].
Утилита автоматически останавливает сервис <code>wb-mqtt-serial</code> перед началом работы и запускает заново после. Если вместо <code>wb-mqtt-serial</code> используется стороннее ПО, опрашивающее устройства по последовательному порту — остановите это ПО.
 
== Ручное обновление ==
{{Anchor|manual}}
=== Особенности ===
Этот способ используется если:
*на объекте нет доступа в интернет,
*у вас нет контроллера,
*вы обновляете прошивку устройств, [[WB_Modbus_Devices_Firmware_Update#Обновление_прошивки_устройств,_подключенных_к_шлюзам_WB-MGE_и_WB-MIO-E |подключенных за шлюзами WB-MGE и WB-MIO-E]].


Во всех остальных случаях используйте [[WB_Modbus_Devices_Firmware_Update#Автоматическое_обновление |автоматическое обновление]].
Для обновления прошивки всех устройств, описанных в разделе Serial Devices Configuration (файл <code>/etc/wb-mqtt-serial.conf</code>), выполните:
 
Ручное обновление можно сделать утилитой '''[[wb-mcu-fw-flasher#Установка утилиты | wb-mcu-fw-flasher]]''', которую нужно предварительно установить. Способ установки отличается и зависит от используемой операционной системы.
 
=== Подготовка устройства ===
 
Прошивать устройства можно:
* по modbus-адресу устройства.
* по широковещательному адресу — <code>0</code>.
 
Для прошивки нескольких устройств на шине нужно поочереди перевести их в [[Bootloader MOD | режим загрузчика]] и прошить.
 
=== Загрузка прошивки в устройство ===
Для загрузки прошивки выполните шаги:
# Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где установлена утилита прошивки.
{{Wbincludes:Prepare modbus_client}}
# Скачайте из репозитория файл прошивки для вашего устройства по [[Firmware Repository For Wiren Board Modbus Devices | инструкции]].
# Загрузите файл прошивки на [[View controller files from your computer | контроллер]] или другое устройство.
# Перейдите в папку с файлом прошивки и выполните команду:
#:* на контроллере или компьютере с ОС Linux:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a25 -f ./firmware.wbfw
</syntaxhighlight>
#:* на компьютере с ОС Windows:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher_1.0.3.exe -j -d COM1 -a25 -f firmware.wbfw
</syntaxhighlight>
# Если вы выполняли команду с контроллера — запустите драйвер wb-mqtt-serial.
 
В команде выше мы флагом <code>-j</code> перевели устройство, подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) с адресом <code>25</code> в режим загрузчика, а затем прошили его.
 
Успешный процесс прошивки выглядит так:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
~# wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw 
wb-mcu-fw-updater update-all
  /dev/ttyRS485-1 opened successfully.
  Send jump to bootloader command and wait 2 seconds...
  Ok, device will jump to bootloader.
  mr6c__1.15.5_master_971fe50.wbfw opened successfully, size 14720 bytes
 
  Sending info block... OK
 
  Sending data block 108 of 108... OK.
  All done!
</syntaxhighlight>
</syntaxhighlight>


Если сигнатура устройства и файла прошивки не совпали, то вы получите сообщение об ошибке:
Для обновления прошивки конкретного устройства, укажите порт и его адрес Modbus:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Sending info block...
wb-mcu-fw-updater update-fw /dev/ttyRS485-2 -a70
  Error while sending info block: Slave device or server failure
  Data format is invalid or firmware signature doesn't match the device
</syntaxhighlight>
</syntaxhighlight>


== Восстановление прошивки устройства ==
Подробную информацию смотрите в выводе
{{Anchor|fw-recovery}}
Если во время обновления произошел сбой, то устройство перейдет в [[Wbincludes:Bootloader MOD | режим загрузчика]] и вы можете восстановить его прошивку.
 
=== Автоматически ===
Для автоматического восстановления прошивки одного или нескольких устройств можно использовать утилиту wb-mcu-fw-updater вы режимах '''recover''' и '''recover-all'''.
 
Чтобы восстановить устройство с адресом <code>10</code> и подключенное к порту <code>/dev/ttyRS485-1</code>, выполните команду:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
wb-mcu-fw-updater recover /dev/ttyRS485-1 -a 10
wb-mcu-fw-updater --help
</syntaxhighlight>
 
Подробнее о режимах recover и recover-all, читайте в [[Wb-mcu-fw-updater#Режимы|документации]].
 
=== Вручную ===
Если вы не можете воспользоваться [[wb-mcu-fw-updater]], то вы восстановить прошивку устройств можно с помощью сервисной утилиты [[wb-mcu-fw-flasher]]. Также этот способ могут использовать пользователи компьютеров с ОС Windows.
 
Для этого вам понадобится сама утилита и файл прошивки:
# Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где установлена утилита прошивки.
{{Wbincludes:Prepare modbus_client}}
# [[Firmware Repository For Wiren Board Modbus Devices | Скачайте из репозитория]] файл прошивки для вашего устройства.
# Загрузите файл прошивки на [[View controller files from your computer | контроллер]] или другое устройство, на котором установлена утилита прошивки.
# Перейдите в папку с прошивкой и выполните команду:
#*на контроллере или компьютере с ОС Linux:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a 25 -f ./firmware.wbfw
</syntaxhighlight>
</syntaxhighlight>
#*на компьютере с ОС Windows:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher_1.0.3.exe -d COM1 -a 25 -f firmware.wbfw
</syntaxhighlight>
Здесь мы прошили находящееся в режиме загрузчика устройство с Modbus-адресом <code>25</code> и подключенное к порту <code>/dev/ttyRS485-1</code> (<code>COM1</code>) файлом <code>firmware.wbfw</code>.
==Обновление прошивки устройств, подключенных к шлюзам WB-MGE и WB-MIO-E==
[[Image: superport-config.png |350px|thumb|right| Настройки шлюза для обновления прошивки]]
Обновить прошивку устройства Wiren Board, подключенного к шлюзам [[WB-MGE_v.2_Modbus-Ethernet_Interface_Converter |WB-MGE]] и [[WB-MIO-E_v.2_Modbus_Interface_Converter |WB-MIO-E]] по RS-485, можно только в ручном режиме утилитой [[Wb-mcu-fw-flasher |wb-mcu-fw-flasher]]. Но сначала нужно отобразить сетевой порт в локальный утилитой [[Socat |socat]].
Шлюз должен быть настроен в режим TCP Server/None (для WB-MGE v2, WB-MIO-E v2) или TCP Server (для WB-MGE v1, WB-MIO-E v1).
===Обновление на любой скорости соединения===
Настройки соединения могут быть любыми только если:
*версия wb-mcu-fw-flasher не ниже '''1.3.0''' (доступно в [[testing |testing]]),
*текущая версия прошивки устройства поддерживает '''131''' регистр (см. Журналы изменений на страницах устройств),
*текущая версия загрузчика не ниже '''1.3.0'''.
'''Иначе обновление можно выполнить только со [[WB_Modbus_Devices_Firmware_Update#Обновление_со_стандартными_настройками_соединения |стандартными настройками 9600N2.]]'''
Ниже приведен пример со следующими исходными данными:
*Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
*Modbus-устройство Wiren Board с адресом 14.
*Соединение на скорости 115200 кбит/с.
{{note|info|'''Внимание!''' В вашем случае настройки могут быть другими.}}
#[[Firmware_Repository_For_Wiren_Board_Modbus_Devices |Приготовьте файл прошивки]] и установите утилиту socat, если ее нет:
#:<syntaxhighlight lang="bash">
apt install socat
</syntaxhighlight>
#Дважды подключитесь к контроллеру по [[SSH |SSH]], у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству.
#Остановите [[Wb-mqtt-serial_driver |wb-mqtt-serial]]:
#:<syntaxhighlight lang="bash">
systemctl stop wb-mqtt-serial
</syntaxhighlight>
#В первом окне запустите перенаправление утилитой socat с текущими настройками соединения:
#:<syntaxhighlight lang="bash">
socat -d -d -d -x PTY,raw,b115200,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23
</syntaxhighlight>
#Во втором окне запустите обновление прошивки устройства утилитой [[Wb-mcu-fw-flasher |wb-mcu-fw-flasher]], используя параметр <code>-J</code>. Укажите файл прошивки, который приготовили в начале:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -J -d /dev/ttyRS485-5 -a14 -f ./firmware.wbfw
</syntaxhighlight>
#Запустите wb-mqtt-serial
#:<syntaxhighlight lang="bash">
systemctl start wb-mqtt-serial
</syntaxhighlight>
===Обновление со стандартными настройками соединения===
Инструкция используется для устройств в которых текущая версия загрузчика ниже '''1.3.0''' и/или текущая прошивка не поддерживает '''131''' регистр.
В этом случае обновление можно выполнить только на скорости '''9600N2''', указав параметр <code>-j</code> для утилиты wb-mcu-fw-flasher. Если используются другие настройки соединения сначала нужно изменить их на стандартные.
Рекомендуем также обновить загрузчик если его версия ниже '''1.3.0'''. Это позволит в дальнейшем обновлять прошивку на [[WB_Modbus_Devices_Firmware_Update#Обновление_на_любой_скорости_соединения |любой скорости соединения]].
Рассмотрим синтетический пример обновления прошивки устройств, в котором используются нестандартные настройки соединения:
*Шлюз WB-MGE (WB-MIO-E), настроенный на Modbus over TCP и имеющий IP-адрес 192.168.0.7, порт 23.
*К шлюзу подключено устройство WB-MDM3 с адресом 58.
*В настройках устройства и шлюза выставлена скорость 115200 кбит/с.
{{note|info| '''Внимание!''' В инструкции рассмотрен пример, в котором устройства работают на скорости '''115200 8N2'''. В вашем случае настройки соединения могут быть другими.}}
Чтобы обновить прошивку:
#Дважды подключитесь к контроллеру по [[SSH |SSH]], у вас должно быть открыто два окна: первое для создания тоннеля socat, второе для отправки команд устройству.
#Остановите wb-mqtt-serial:
#:<syntaxhighlight lang="bash">
systemctl stop wb-mqtt-serial
</syntaxhighlight>
#В первом окне запустите перенаправление:
#:<syntaxhighlight lang="bash">
socat -d -d -d -x PTY,raw,b115200,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23
</syntaxhighlight>
#:если у вас стабильный релиз до wb-2207 включительно, вместо параметра b115200, используйте <code>ispeed=115200,ospeed=115200</code>.
#Во втором окне измените скорость порта устройства на 9600 кбит/с:
#:<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -b115200 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 96
</syntaxhighlight>
#В первом окне разорвите соединение socat клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>.
#В [[socat#Настройка шлюза для обновления прошивки | настройках шлюза]] установите скорость порта 9600 кбит/с.
#В первом окне снова запустите перенаправление socat с новыми параметрами соединения:
#:<syntaxhighlight lang="bash">
socat -d -d -d -x PTY,raw,b9600,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:192.168.0.7:23
</syntaxhighlight>
#:если у вас стабильный релиз до wb-2207 включительно, вместо параметра b9600, используйте <code>ispeed=9600,ospeed=9600</code>.
#Во втором окне запустите обновление прошивки устройства, например, утилитой wb-mcu-fw-flasher ([[WB_Modbus_Devices_Firmware_Update#Ручное_обновление|полная инструкция]]):
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -j -d /dev/ttyRS485-5 -a25 -f ./firmware.wbfw
</syntaxhighlight>
#После окончания прошивки верните в устройстве старую скорость 115200 кбит/с:
#:<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-5 -a58 -t0x06 -r110 1152
</syntaxhighlight>
#В первом окне разорвите соединение socat клавишами <kbd>Ctrl</kbd>+<kbd>C</kbd>.
#В настройках шлюза измените скорость порта с 9600 кбит/с на 115200 кбит/с.
#Подключите шлюз к контроллеру по Ethernet.
#Запустите wb-mqtt-serial
#:<syntaxhighlight lang="bash">
systemctl start wb-mqtt-serial
</syntaxhighlight>
Если вам нужно прошить несколько устройств, то вы можете сперва изменить им скорость, перенастроить шлюз, а потом так же поочереди их прошить, вернуть им прежнюю скорость и снова перенастроить шлюз.
===Настройка шлюза для обновления прошивки===
Самый простой способ изменить настройки шлюза — подключиться к его встроенному веб-интерфейсу. Для этого нужно:


#подключить шлюз к компьютеру UTP кабелем напрямую или через роутер,
<gallery mode="packed" heights="200px">
#присвоить компьютеру статический IP-адрес в сети шлюза, например, 192.168.0.201,
File:Wb-fw-mcu-updater example 1.png|Пример работы wb-fw-mcu-updater
#открыть браузер и ввести IP-адрес шлюза, по умолчанию 192.168.0.7.
</gallery>


== Полезные ссылки ==
== Ручная прошивка устройств ==
* [[Restore factory settings Wiren Board Modbus device | Восстановление доступа — сброс настроек связи]]
Если у контроллера нет доступа в интернет или у вас не получилось обновить прошивку устройства автоматически, вы можете использовать сервисную утилиту [[Wb-mcu-fw-flasher | wb-mcu-fw-flasher]].
* [[Wiren Board Device Modbus Address | Modbus-адрес устройства Wiren Board]]
* [[wb-mcu-fw-updater | Утилита обновления и восстановления прошивок wb-mcu-fw-updater]]
* [[wb-mcu-fw-flasher | Сервисная утилита wb-mcu-fw-flasher]]
* [[Firmware Repository For Wiren Board Modbus Devices |Репозиторий прошивок для Modbus-устройств Wiren Board]]

Версия 23:20, 20 мая 2021


Загрузчик прошивок

В новых версиях наших устройств реализован механизм загрузчика прошивок (bootloader). Он позволяет обновлять микропрограммы устройств/модулей Wiren Board по RS-485/Modbus RTU.

В режиме загрузчика основной функционал устройства отключается. Коммуникационные параметры в режиме загрузчика фиксированы и не зависят от значений в памяти устройства: 9600 8N2.

Переход в режим загрузчика

Внимание: Отображаемое название «Загрузчик периферийных устройств Wiren Board» переопределяет ранее заданное отображаемое название «Обновление прошивок на устройствах Wiren Board».

Описание

Что такое загрузчик (28:27)

В периферийных устройствах с Modbus есть прошивка, которая реализует заложенную логику работы. Чтобы прошивку можно было обновлять прямо в инсталляции по RS-485, в устройствах предусмотрен загрузчик (bootloader), который отвечает за инициализацию устройства и обновление прошивки.

В документации на каждое устройство есть раздел «Обновление прошивки», где есть ссылки на инструкцию по обновлению и список изменений. В это статье мы рассмотрим только обновление загрузчика.

Переход устройств в режим загрузчика

Индикация режима загрузчика

Устройство находится в режиме загрузчика в следующих случаях:

  • первые 2 секунды после включения питания, если на устройстве есть корректная прошивка;
  • постоянно, если на устройстве нет корректной прошивки, например, был сбой при обновлении прошивки;
  • при записи 1 в holding-регистр 129(0x81) в момент работы основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения 9600N2. Этот режим можно активировать запустив утилиту wb-mcu-fw-flasher с ключем -j.
  • при записи 1 в holding-регистр 131(0x83) в момент работы основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения, установленными в настройках устройства. Это может быть полезно для обновления устройств за шлюзами без перенастройки параметров шлюза.
    Перейти в этот режим можно в wb-mcu-fw-flasher начиная с версии 1.3.0 запустив его с ключем -J. Кроме того для запуска режима необходима поддержка со стороны загрузчика (версия 1.3.0 и выше) и со стороны прошивки (см. changelog прошивки).

В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.

Восстановление прошивки описано в статье Обновление прошивки Modbus-устройств Wiren Board.

Проверка связи с устройством в режиме загрузчика

Загрузчик продолжает слушать шину RS-485 и отвечает на опрос некоторых регистров. Можно прочитать сигнатуру устройства используя команду modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12 Важно: именно 12 регистров одним запросом, начиная с адреса 290.

Список изменений

Изменения во всех версиях описаны на странице Список изменений в загрузчике.

Обновление загрузчика

Текущую версию загрузчика можно узнать, считав 8 holding регистров с адреса 330, например, с помощью modbus_client:

echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r330 -c8 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

Есть несколько способов обновления загрузчика:

С контроллера Wiren Board

Загрузчик обновляется из консоли контроллера Wiren Board утилитой wb-mcu-fw-updater, которой для работы нужен доступ в интернет. Если интернета нет, используйте другой способ.

Учитывайте, что утилита учитывает установленный на контроллер релиз ПО , то есть вы не сможете зашить тестовую версию загрузчика, если на контроллере стабильный релиз.

Перед обновлением загрузчика, обновите прошивку контроллера через apt или другим способом по инструкциям.

Обновление загрузчика одного устройства

Процесс:

  1. Подключитесь к контроллеру по SSH.
  2. Запустите команду, заменив в ней порт и адрес:
    wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
    

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

Обновление загрузчика всех устройств

Начиная с версии 1.10.8 утилита wb-mcu-fw-updater умеет в режиме обновление прошивок устройств проверять и версии загрузчика, а потом обновлять его:

  1. Подключитесь к контроллеру по SSH.
  2. Запустите команду:
    wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
    
  3. Если есть новые версии загрузчика для устройств, утилита запросит подтверждение на обновление загрузчика, нужно ответить y. Если откажетесь, прошивка обновиться, но загрузчик останется старым.

Пример:

# wb-mcu-fw-updater update-all
2024-04-03 07:17:24,061 Will probe all devices on enabled serial ports of /etc/wb-mqtt-serial.conf:
2024-04-03 07:17:24,063 Probing WB-MAP6S fw2 (port: /dev/ttyRS485-1, slaveid: 26, uart_params: 9600N2, response_timeout: 0.50)...
2024-04-03 07:17:26,460 Update: 2.8.0-rc1 -> 2.8.1 (WB-MAP6S fw2 (26, /dev/ttyRS485-1))
2024-04-03 07:17:27,128 Flashing firmware to WB-MAP6S fw2 (26, /dev/ttyRS485-1)
2024-04-03 07:17:28,073 
2024-04-03 07:17:28,073 Bootloader update (v1.3.0 -> v1.4.1) for map6semG16 /dev/ttyRS485-1:26 is available! (bootloader updates are highly recommended to install) Do a bootloader update? [Y/N]

С компьютера и других устройств

Установка утилиты

Если у вас нет контроллера Wiren Board или на нём нет интернета, можно обновить загрузчик в ручном режиме утилитой wb-mcu-fw-flasher, которую надо установить по инструкции.

Чтение сигнатуры

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

Сделать это можно прочитав 12 holding регистров с адреса 290, например, с помощью modbus_client:

echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

В результате на экран будет выведена строка вида mwac0 — это и есть сигнатура.

Скачивание файлов

Чтобы скачать файл с загрузчиком, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=bootloader/by-signature/ ,выберите папку с полученной выше сигнатурой, далее раздел main и скачайте файл latest.wbfw.

Чтобы скачать прошивку, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=fw/by-signature/. ,выберите папку с полученной выше сигнатурой, далее раздел main и скачайте файл latest.wbfw. Если вам необходима конкретная версия прошивки, можно скачать именно её.

Прошивка

Теперь, когда файлы обновления загрузчика и прошивки скачаны, их надо зашить в устройство:

  1. Запустите обновление загрузчика, замените порт /dev/ttyRS485-1, скорость -b, адрес -a и имя файла на свои:
    wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f wb-bootloader-updater_mwac0__1.4.1_master_e676613.wbfw -j
    
    утилита сотрёт прошивку и зашьёт новый загрузчик.
  2. Запустите обновление прошивки, замените порт /dev/ttyRS485-1, скорость -b, адрес -a и имя файла на свои:
    wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f mwac0__1.21.1_main_ac00010.wbfw
    
    так как устройство со стёртой прошивкой находится в загрузчике, то в команде выше нет ключа -j.

Более подробно про ручное обновление прошивки читайте в статье Обновление прошивки Modbus-устройств Wiren Board

Известные ошибки

Список известных неисправностей

Автоматическое обновление прошивки с контроллера Wiren Board

Прошивку устройств, подключенных к контроллеру Wiren Board рекомендуем обновлять с помощью утилиты wb-mcu-fw-updater. Утилита проверяет наличие новой версии прошивки для всех подключенных устройств и, при необходимости, обновляет их.

Для установки выполните в консоли:

dpkg -s wb-mcu-fw-updater || (apt update && apt install wb-mcu-fw-updater)

Утилита автоматически останавливает сервис wb-mqtt-serial перед началом работы и запускает заново после. Если вместо wb-mqtt-serial используется стороннее ПО, опрашивающее устройства по последовательному порту — остановите это ПО.

Для обновления прошивки всех устройств, описанных в разделе Serial Devices Configuration (файл /etc/wb-mqtt-serial.conf), выполните:

wb-mcu-fw-updater update-all

Для обновления прошивки конкретного устройства, укажите порт и его адрес Modbus:

wb-mcu-fw-updater update-fw /dev/ttyRS485-2 -a70

Подробную информацию смотрите в выводе

wb-mcu-fw-updater --help

Ручная прошивка устройств

Если у контроллера нет доступа в интернет или у вас не получилось обновить прошивку устройства автоматически, вы можете использовать сервисную утилиту wb-mcu-fw-flasher.