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

Материал из Wiren Board
Строка 102: Строка 102:
#:* на контроллере или в ОС Linux:
#:* на контроллере или в ОС Linux:
#:<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.14.1_master_19c9ca5.wbfw
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw
</syntaxhighlight>
</syntaxhighlight>
#:* в ОС Windows:
#:* в ОС Windows:
Строка 113: Строка 113:
Успешный процесс прошивки выглядит так:
Успешный процесс прошивки выглядит так:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f mr6c__1.14.1_master_19c9ca5.wbfw  
~:# wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw
   /dev/ttyRS485-1 opened successfully.
   /dev/ttyRS485-1 opened successfully.
   Send jump to bootloader command and wait 2 seconds...
   Send jump to bootloader command and wait 2 seconds...
   Error: Connection timed out.
   Ok, device will jump to bootloader.
  May be device already in bootloader, try to send firmware...
   mr6c__1.15.5_master_971fe50.wbfw opened successfully, size 14720 bytes
   mr6c__1.14.1_master_19c9ca5.wbfw opened successfully, size 12136 bytes
 
   Sending info block... OK
   Sending info block... OK
   Sending data block 89 of 89... OK.
 
   Sending data block 108 of 108... OK.
   All done!
   All done!
</syntaxhighlight>
</syntaxhighlight>

Версия 19:09, 25 мая 2021

Это черновик страницы. Последняя правка сделана 25.05.2021 пользователем A.Degtyarev.

Общая информация

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

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

Автоматическое обновление

Пример работы wb-fw-mcu-updater

Автоматическое обновление выполняется с помощью предустановленной на контроллеры Wiren Board утилиты wb-mcu-fw-updater и позволяет установить свежую версию ПО сразу на все подключенные устройства или отдельно на каждое. Определение сигнатуры (модели) устройства, новой прошивки произойдет автоматически.

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

Вы можете использовать утилиту и без нашего контроллера, для этого вам понадобится Debian-подобная ОС Linux. Читайте инструкцию по установке в описании утилиты.

Для обновления прошивки всех устройств, описанных в разделе 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-flasher, которую нужно предварительно установить. Способ установки отличается и зависит от используемой операционной системы.

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

Контроллер Wiren Board

Утилита есть в репозитории контроллера, поэтому обновите список пакетов и установите ее:

apt update
apt install wb-mcu-fw-flasher

ОС Linux

Если вы используете контроллер на процессоре ARM Cortex, то скачайте и установите deb-пакет из нашего репозитория.

Для установки на компьютер с ОС Linux скачайте на компьютер пакет wb-mcu-fw-flasher_1.0.3_amd64-all.deb.

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

apt update
apt install libmodbus5
apt install ./Wb-mcu-fw-flasher_1.0.3_amd64-all.deb #измените имя пакета, если необходимо

ОС Windows

Для Windows мы подготовили windows-версию утилиты, которая не требует установки. Скачать можно по ссылке wb-mcu-fw-flasher_1.0.3.zip

Выбор прошивки

Прошивки публикуются на сайте fw-releases.wirenboard.com в виде файлов с расширением .wbfw.

Прошивки сгруппированы по версиям и сигнатурам (типам) устройств.

Каждое modbus-устройство Wiren Board имеет сигнатуру — наименование аппаратного типа устройства. Устройство будет прошито только если его сигнатура совпадет с сигнатурой в прошивке.

Сигнатура устройства хранится в формате строки из 12 ASCII символов, по одному символу в регистре, и доступна по адресу 290.

Сигнатуру устройства в ОС Linux и на контроллере можно с помощью утилиты modbus_client. Узнаем сигнатуру устройства с адресом 10 и подключенного к порту ttyRS485-1

echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a 10 -t3 -r 290 -c 12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

В результате будет выведена строка с сигнатурой, например mr6c.

О том, как читать регистры из ОС Windows смотрите в статье Работа с устройствами Wiren Board без контроллера

Теперь, имея сигнатуру вы можете скачать прошивку устройства:

  1. Перейдите на сайт fw-releases.wirenboard.com.
  2. Выберите папку by-signature.
  3. Найдите и откройте папку с нужной сигнатурой устройства.
  4. Выберите одну из веток:
    • stable — стабильные версии прошивок. Чтобы скачать самую свежую, выберите файл latest.wbfw.
    • unstable — экспериментальные версии прошивок.

Подготовка устройства

Прошивать устройства можно:

  • по modbus-адресу устройства.
  • по широковещательному адресу — 0.

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

Устройство переходит в режим загрузчика, если:

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

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

Загрузка прошивки в устройство

Для загрузки прошивки выполните шаги:

  1. Если вы прошиваете устройство с контроллера, то остановите драйвер wb-mqtt-serial или иное ПО, которое опрашивает устройство.
  2. Загрузите файл прошивки на контроллер или другое устройство, на котором установлена утилита прошивки.
  3. Прошейте устройство командой:
    • на контроллере или в ОС Linux:
    wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw
    
    • в ОС Windows:
    wb-mcu-fw-flasher_1.0.3.exe -j -d COM1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw
    

Здесь мы флагом -j переводим устройство, подключенное к порту /dev/ttyRS485-1 (COM1) с адресом 25 в режим загрузчика и загружаем файл прошивки.

Успешный процесс прошивки выглядит так:

~:# wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.15.5_master_971fe50.wbfw  
   /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!

Если не сигнатура устройства и файла прошивки не совпали, то вы получите сообщение об ошибке:

Sending info block...
   Error while sending info block: Slave device or server failure 
   Data format is invalid or firmware signature doesn't match the device