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

Материал из Wiren Board
(Отметить эту версию для перевода)
(не показано 65 промежуточных версий 7 участников)
Строка 9: Строка 9:
<!--T:2-->
<!--T:2-->
В новых версиях наших устройств реализован механизм загрузчика прошивок (bootloader). Он позволяет обновлять микропрограммы устройств/модулей Wiren Board по RS-485/Modbus RTU.  
В новых версиях наших устройств реализован механизм загрузчика прошивок (bootloader). Он позволяет обновлять микропрограммы устройств/модулей Wiren Board по RS-485/Modbus RTU.  
На устройства добавлен режим загрузчика, в котором возможно обновлять прошивку.


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


== Переход в режим загрузчика == <!--T:4-->
== Переход в режим загрузчика == <!--T:4-->


<!--T:5-->
<!--T:5-->
[[Special:MyLanguage/Файл:Bootloader.gif||right||Индикация режима загрузчика]]
[[File:Bootloader.gif||right||Индикация режима загрузчика]]
Устройство переходит в режим загрузчика, если:
 
* на устройстве имеется корректная прошивка первые 2 секунды после включения питания устройство работает в режиме загрузчика;
* Если на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
* на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки) — в этом случае режим загрузчика активен постоянно;
* Если на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно;
* при работе основной программы в holding-регистр 129 (0x81) была записана 1 — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд.
* При записи 1 в holding-регистр 129 (0x81) при работе основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это может сделать утилита wb-mcu-fw-flasher если использовать ключ -j.


<!--T:6-->
<!--T:6-->
Индикация режима загрузчика: индикатор Status устройства редко мигает. При заливке новой прошивки индикатор перестает менять состояние.
Индикация режима загрузчика: индикатор Status устройства редко мигает с периодом 1 секунда. При заливке прошивки индикатор часто мигает при приеме блока данных.


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


== Прошивки == <!--T:7-->
Для установки выполните в консоли:
<pre>
dpkg -s wb-mcu-fw-updater || (apt update && apt install wb-mcu-fw-updater)
</pre>


<!--T:8-->
Для обновления прошивки всех устройств, описанных в разделе Serial Devices Configuration (файл /etc/wb-mqtt-serial.conf), выполните:
Запись прошивки в память устройства выполняется загрузчиком, который получает ее по Modbus RTU. Прошивки хранятся в файлах с расширением '''.wbfw'''.
<pre>
В настоящее время имеющиеся прошивки высылаются по запросу.
wb-mcu-fw-updater update-all
</pre>


Для обновления прошивки конкретного устройства, укажите порт и его адрес Modbus:
<pre>
wb-mcu-fw-updater update-fw /dev/ttyRS485-2 -a70
</pre>
Подробную информацию смотрите в выводе
<pre>
wb-mcu-fw-updater --help
</pre>


== Сигнатуры устройств == <!--T:9-->
<gallery mode="packed" heights="200px">
File:Wb-fw-mcu-updater example 1.png|Пример работы wb-fw-mcu-updater
</gallery>


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


<!--T:10-->
Прошивки публикуются на сайте [http://fw-releases.wirenboard.com/?prefix=fw/ '''fw-releases.wirenboard.com'''] в виде файлов с расширением '''.wbfw'''.
При прошивке на заводе в память устройства записывается сигнатура — наименование аппаратного типа устройства. При перезаписи прошивки текущая сигнатура сравнивается с сигнатурой прошивки. Запись новой прошивки возможна только при совпадении сигнатур.


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


== Modbus == <!--T:11-->
Каждое Modbus устройство Wirenboard имеет сигнатуру — наименование аппаратного типа устройства. Перезапись прошивки возможна только при совпадении сигнатур устройства и прошивки.


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


<!--T:12-->
<code>
Загрузчик устройства получает прошивку по Modbus RTU. В режиме загрузчика коммуникационные параметры фиксированы и не зависят от значений, записанных ранее в память устройства: 9600 8N2. По протоколу Modbus устройство можно перевести в режим загрузчика, если во время работы основной программы записать 1 в holding-регистр 129 (0x81). В этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд.
echo -e $(modbus_client -mrtu -pnone -s2 '''/dev/ttyRS485-1''' -a '''A''' -t3 -r 290 -c 12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
</code>


<!--T:13-->
замените значения '''/dev/ttyRS485-1''' на имя устройства шины и '''A''' на адрес устройства.
Modbus-адрес устройства для прошивки в режиме загрузчика следует выбирать следующим образом:


<!--T:14-->
В результате будет выведена строка с сигнатурой, например '''mr6c'''
# Основной адрес для прошивки — адрес, заданный в памяти устройства: то есть это стандартный адрес, на который устройство отвечает из основной программы.
# Прошивать устройства можно по широковещательному адресу 0. Это менее предпочтительный способ.


Прошивку вы можете скачать например с помощью команды wget , для mr6c это будет выглядеть следующим образом:


== Утилита для прошивки wb-mcu-fw-flasher == <!--T:15-->
<pre>
wget http://fw-releases.wirenboard.com/fw/by-signature/mr6c/stable/latest.wbfw
</pre>


<!--T:16-->
=== Подключение устройства === <!--T:11-->
Для передачи прошивки на устройства используется утилита wb-mcu-fw-flasher, запускаемая с контроллера Wiren Board (или компьютера с Linux или Windows).
 
Прошивать устройство лучше по стандартному адресу (на который устройство отвечает из основной программы).
 
Так же можно прошивать по широковещательному адресу 0, если у вас одно устройство на шине в режиме загрузчика.
 
Поэтому для прошивки нескольких устройств на шине можно:
#переводить в режим загрузчика (перезагрузкой по питанию или записью в регистр) и прошивать по отдельности с указанием нешироковещательного Modbus-адреса.
#переводить '''по очереди''' в режим загрузчика (перезагрузкой по питанию) и прошивать по адресу 0.
 
* '''Одновременная прошивка''' устройств невозможна; имеющаяся прошивка на устройствах будет испорчена.
* Перевести устройство в бутлоадер по широковещательному адресу 0 - '''нельзя'''!
*'''При прошивке с контроллера остановите wb-mqtt-serial:'''<pre>service wb-mqtt-serial stop</pre>
 
=== Утилита wb-mcu-fw-flasher для прошивки устройств === <!--T:15-->


<!--T:17-->
<!--T:17-->
Строка 71: Строка 102:


<!--T:18-->
<!--T:18-->
Версию утилиты для '''MS Windows''' можно скачать по этой ссылке: [[Special:MyLanguage/Media: Wb-mcu-fw-flasher_1.0.2.zip | Wb-mcu-fw-flasher_1.0.2.zip]]
Версия утилиты для '''MS Windows''': [[Media: Wb-mcu-fw-flasher_1.0.3.zip | Wb-mcu-fw-flasher_1.0.3.zip]]


<!--T:19-->
<!--T:19-->
Для установки на '''компьютер с Debian''' скачайте пакет отсюда: [[Special:MyLanguage/Media: Wb-mcu-fw-flasher_1.0.2_amd64-all.deb | Wb-mcu-fw-flasher_1.0.2_amd64-all.deb]]
Для установки на '''компьютер с Debian''' скачайте пакет - [[Media: Wb-mcu-fw-flasher_1.0.3_amd64-all.deb | Wb-mcu-fw-flasher_1.0.3_amd64-all.deb]]
и выполните команды в директории, гуда загрузился пакет пакет.
и выполните команды в директории, куда загрузился пакет:
<pre>
<pre>
apt-get update
apt-get update
apt-get install libmodbus5
apt-get install libmodbus5
dpkg -i Wb-mcu-fw-flasher_1.0.2_amd64-all.deb
dpkg -i Wb-mcu-fw-flasher_1.0.3_amd64-all.deb
 
<!--T:20-->
</pre>
</pre>


Для контроллеров других производителей с процессорами ARM Cortex можно воспользоваться Debian-пакетом для Wiren Board: http://releases.contactless.ru/?prefix=stable/stretch/pool/main/w/wb-mcu-fw-flasher/


<!--T:21-->
<!--T:20-->
Опции запуска утилиты wb-mcu-fw-flasher:
Опции запуска утилиты wb-mcu-fw-flasher:
{| class="wikitable"
{| class="wikitable"
! Параметр !! Описание !! Значение по умолчанию
! Параметр !! Описание !! Значение по умолчанию
|-
|-
| -d || Устройство последовательного порта ||  
| -d || Устройство последовательного порта ('''обязательно''') ||  
|-
|-
| -f || Файл прошивки ||  
| -f || Файл прошивки ||  
Строка 96: Строка 126:
| -a || Адрес Modbus || 1
| -a || Адрес Modbus || 1
|-
|-
| -j || Отправить на устройство команду перехода в режим загрузчика ||  
| -j || Отправить на устройство команду перехода в режим загрузчика ||
|-
| -b || Скорость порта (baudrate) || 9600
|-
| -p || Чётность (parity) || N
|-
| -s || Количество стопбитов || 2
|-
|-
| -r || Адрес holding-регистра для перехода в режим загрузчика || 129
| -r || Адрес holding-регистра для перехода в режим загрузчика || 129
|-
|-
| -D || Включить режим отладки ||  
| -D || Включить режим отладки ||  
|-
| -u || Восстановление заводских настроек UART и Modbus адреса ||
|-
| -e || Сброс всех настроек до заводских ||
|}
|}


<!--T:22-->
<!--T:21-->
Пример:
Пример (устройство в рабочем режиме):
<pre>
<pre>
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
</pre>
</pre>


<!--T:23-->
<!--T:22-->
Пример для Windows:
Пример для Windows (устройство в рабочем режиме):
<pre>
<pre>
wb-mcu-fw-flasher.exe -j -d COM10 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
wb-mcu-fw-flasher.exe -j -d COM10 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
</pre>
</pre>


<!--T:24-->
<!--T:23-->
Здесь COM10 — имя виртуального последовательного порта, которое присвоено адаптеру USB RS-485.
Здесь COM10 — имя виртуального последовательного порта, которое присвоено адаптеру USB RS-485.


 
<!--T:24-->
== Прошивка устройств == <!--T:25-->
Пример для устройства с нестандартными настройками UART (со скоростью порта 115200):
 
<!--T:26-->
'''При прошивке с контроллера остановите wb-mqtt-serial:'''
<pre>
<pre>
service wb-mqtt-serial stop
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw -b 115200
</pre>
</pre>


<!--T:27-->
=== Прошивка устройств === <!--T:25-->
Подключите устройство к RS-485.


<!--T:28-->
<!--T:26-->
Если вы не знаете точного аппаратного типа устройства, то его сигнатуру можно прочесть командой:
Итого, порядок действий:
<pre>
#При прошивке с контроллера остановите wb-mqtt-serial.
export mbusaddr=1;  echo  -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a$mbusaddr -t0x03 -r290 -c 12 | grep Data | sed -e 's/0x00/\x/g' -e 's/Data://' -e 's/s//g'`|  xxd -r -p && echo ''
#Подключите устройство к RS-485.
</pre>  
#Скачайте файл прошивки, например, mr6c__1.14.1_master_19c9ca5.wbfw
Задайте адрес прошиваемого устройства в переменной mbusaddr.
#Прошейте устройство утилитой wb-mcu-fw-flasher:<pre>wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.14.1_master_19c9ca5.wbfw</pre>
#После успешной прошивки устройство само выйдет из режима загрузчика и перезапустится в основной программе.


<!--T:29-->
Успешный процесс прошивки выглядит так:
В выводе команды вы получите сигнатуру устройства, например, '''wbmr6c'''.
 
<!--T:30-->
Выберите подходящую прошивку, например, WB-MR-MR6C_MCU3_3_1.9.4.wbfw.
 
<!--T:31-->
Прошейте устройство командой:
<pre>
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
</pre>
Успешный процесс прошивки выглядит следующим образом:
<pre>
<pre>
   wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw        
   wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f mr6c__1.14.1_master_19c9ca5.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.
   Error: Connection timed out.
   May be device already in bootloader, try to send firmware...
   May be device already in bootloader, try to send firmware...
   WB-MR-MR6C_MCU3_3_1.9.4.wbfw opened successfully, size 12136 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 89 of 89... OK.
   All done!
   All done!
</pre>
</pre>
<!--T:32-->
'''После успешной прошивки устройство само выйдет из режима загрузчика и перезапустится в основной программе.'''


<!--T:33-->
<!--T:33-->
Пример ошибки при несовпадении сигнатуры:
Пример ошибки при несовпадении сигнатуры:
<pre>
<pre>
Sending info block...
  Sending info block...
Error while sending info block: Slave device or server failure  
  Error while sending info block: Slave device or server failure  
Data format is invalid or firmware signature doesn't match the device
  Data format is invalid or firmware signature doesn't match the device
</pre>
</pre>


=== Прошивка устройств по широковещательному Modbus-адресу 0 === <!--T:34-->
<!--T:35-->
Bootloader позволяет загружать прошивку на устройства но Modbus-адресу 0. Для этого устройство должно быть единственным устройством на шине и находится в режиме загрузчика.
=== Прошивка нескольких устройств на шине === <!--T:36-->
<!--T:37-->
Возможна прошивка нескольких устройств, подключенных к шине. Устройства должны быть переведены в режим загрузчика и прошиваться по отдельности с указанием нешироковещательного Modbus-адреса. Прошивка устройств с одинаковым адресом возможна, если в режиме загрузчика находится только одно из них. Устройства прошиваются по очереди.
<!--T:38-->
'''Внимание!''' Прошивка устройств, находящимся в режиме загрузчика и имеющим одинаковый modbus-адрес, или же прошивка нескольких устройств, находящихся в режиме загрузчика по адресу 0 не будет выполнена; имеющаяся прошивка на устройствах будет испорчена.
</translate>
</translate>

Версия 20:22, 31 июля 2020

Другие языки:


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

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

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

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

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

Индикация режима загрузчика: индикатор Status устройства редко мигает с периодом 1 секунда. При заливке прошивки индикатор часто мигает при приеме блока данных.

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

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

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

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

Для обновления прошивки всех устройств, описанных в разделе 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

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

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

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

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

Каждое Modbus устройство Wirenboard имеет сигнатуру — наименование аппаратного типа устройства. Перезапись прошивки возможна только при совпадении сигнатур устройства и прошивки.

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

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

замените значения /dev/ttyRS485-1 на имя устройства шины и A на адрес устройства.

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

Прошивку вы можете скачать например с помощью команды wget , для mr6c это будет выглядеть следующим образом:

wget http://fw-releases.wirenboard.com/fw/by-signature/mr6c/stable/latest.wbfw

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

Прошивать устройство лучше по стандартному адресу (на который устройство отвечает из основной программы).

Так же можно прошивать по широковещательному адресу 0, если у вас одно устройство на шине в режиме загрузчика.

Поэтому для прошивки нескольких устройств на шине можно:

  1. переводить в режим загрузчика (перезагрузкой по питанию или записью в регистр) и прошивать по отдельности с указанием нешироковещательного Modbus-адреса.
  2. переводить по очереди в режим загрузчика (перезагрузкой по питанию) и прошивать по адресу 0.
  • Одновременная прошивка устройств невозможна; имеющаяся прошивка на устройствах будет испорчена.
  • Перевести устройство в бутлоадер по широковещательному адресу 0 - нельзя!
  • При прошивке с контроллера остановите wb-mqtt-serial:
    service wb-mqtt-serial stop

Утилита wb-mcu-fw-flasher для прошивки устройств

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

apt-get update
apt-get install wb-mcu-fw-flasher

Версия утилиты для MS Windows: Wb-mcu-fw-flasher_1.0.3.zip

Для установки на компьютер с Debian скачайте пакет - Wb-mcu-fw-flasher_1.0.3_amd64-all.deb и выполните команды в директории, куда загрузился пакет:

apt-get update
apt-get install libmodbus5
dpkg -i Wb-mcu-fw-flasher_1.0.3_amd64-all.deb

Для контроллеров других производителей с процессорами ARM Cortex можно воспользоваться Debian-пакетом для Wiren Board: http://releases.contactless.ru/?prefix=stable/stretch/pool/main/w/wb-mcu-fw-flasher/

Опции запуска утилиты wb-mcu-fw-flasher:

Параметр Описание Значение по умолчанию
-d Устройство последовательного порта (обязательно)
-f Файл прошивки
-a Адрес Modbus 1
-j Отправить на устройство команду перехода в режим загрузчика
-b Скорость порта (baudrate) 9600
-p Чётность (parity) N
-s Количество стопбитов 2
-r Адрес holding-регистра для перехода в режим загрузчика 129
-D Включить режим отладки
-u Восстановление заводских настроек UART и Modbus адреса
-e Сброс всех настроек до заводских

Пример (устройство в рабочем режиме):

wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw

Пример для Windows (устройство в рабочем режиме):

wb-mcu-fw-flasher.exe -j -d COM10 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw

Здесь COM10 — имя виртуального последовательного порта, которое присвоено адаптеру USB RS-485.

Пример для устройства с нестандартными настройками UART (со скоростью порта 115200):

wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw -b 115200

Прошивка устройств

Итого, порядок действий:

  1. При прошивке с контроллера остановите wb-mqtt-serial.
  2. Подключите устройство к RS-485.
  3. Скачайте файл прошивки, например, mr6c__1.14.1_master_19c9ca5.wbfw
  4. Прошейте устройство утилитой wb-mcu-fw-flasher:
    wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.14.1_master_19c9ca5.wbfw
  5. После успешной прошивки устройство само выйдет из режима загрузчика и перезапустится в основной программе.

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

   wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f mr6c__1.14.1_master_19c9ca5.wbfw    
   /dev/ttyRS485-1 opened successfully.
   Send jump to bootloader command and wait 2 seconds...
   Error: Connection timed out.
   May be device already in bootloader, try to send firmware...
   mr6c__1.14.1_master_19c9ca5.wbfw opened successfully, size 12136 bytes
   Sending info block... OK
   Sending data block 89 of 89... 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