Wb-mcu-fw-flasher: различия между версиями

Материал из Wiren Board
м
(не показаны 33 промежуточные версии 5 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE: Сервисная утилита wb-mcu-fw-flasher}}
{{DISPLAYTITLE: Сервисная утилита wb-mcu-fw-flasher}}
== Общая информация ==
Здесь описывается <code>wb-mcu-fw-flasher</code> — сервисная утилита для modbus-устройств Wiren Board с помощью которой вы сможете сбросить устройство к заводским настройкам или заменить его прошивку.


Краткую инструкцию по прошивке устройств читайте в статье [[WB Modbus Devices Firmware Update | Обновление прошивок на устройствах Wiren Board]].
== Описание ==
'''ВНИМАНИЕ:''' Мы не рекомендуем использовать эту утилиту для повседневного обновления прошивок устройств, используйте утилиту автоматического обновления [[wb-mcu-fw-updater]].


== Установка утилиты ==
<code>wb-mcu-fw-flasher</code> — сервисная утилита для modbus-устройств Wiren Board с помощью которой вы сможете сбросить устройство к заводским настройкам или заменить его прошивку.
{{Anchor|install}}
 
=== Контроллер Wiren Board ===
== Подготовка к работе ==
Утилита есть в репозитории контроллера, поэтому обновите список пакетов и установите ее:
=== Установка утилиты ===
Для установки утилиты '''на контроллер Wiren Board''' выполните команды:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
apt update
apt update
Строка 14: Строка 14:
</syntaxhighlight>
</syntaxhighlight>


=== ОС Linux ===
Версия утилиты для '''MS Windows''': [[Media: Wb-mcu-fw-flasher_1.0.3.zip | Wb-mcu-fw-flasher_1.0.3.zip]]
Скачайте файл для вашего устройства с расширением '''.deb''' в [https://github.com/wirenboard/wb-mcu-fw-flasher/releases нашем репозитории].


Для установки, выполните команды:
Для установки на '''компьютер с Debian''' скачайте пакет — [[Media: Wb-mcu-fw-flasher_1.0.3_amd64-all.deb | Wb-mcu-fw-flasher_1.0.3_amd64-all.deb]]
и выполните команды в директории, куда загрузился пакет:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
apt update
apt update
apt install ./wb-mcu-fw-flasher_1.3.1_amd64.deb #измените имя пакета, если необходимо
apt install libmodbus5
apt install ./Wb-mcu-fw-flasher_1.0.3_amd64-all.deb
</syntaxhighlight>
</syntaxhighlight>


=== ОС Windows ===
Для контроллеров других производителей с процессорами ARM Cortex можно воспользоваться Debian-пакетом для Wiren Board: http://releases.contactless.ru/?prefix=stable/stretch/pool/main/w/wb-mcu-fw-flasher/
[[Image: wb-mcu-fw-flasher-in-windows-cmd.png|400px|thumb|right| Утилита wb-mcu-fw-flasher выводит справку в командной строке Windows]]
 
=== Выбор прошивки ===
 
Прошивки публикуются на сайте [http://fw-releases.wirenboard.com/?prefix=fw/ '''fw-releases.wirenboard.com'''] в виде файлов с расширением '''.wbfw'''.


Скачайте файл с расширением '''.exe''' в [https://github.com/wirenboard/wb-mcu-fw-flasher/releases нашем репозитории]. Установка не требуется.
Прошивки сгруппированы по версиям и сигнатурам (типам) устройств.
 
Каждое Modbus устройство Wiren Board имеет сигнатуру — наименование аппаратного типа устройства. Перезапись прошивки возможна только при совпадении сигнатур устройства и прошивки.
 
Сигнатура устройства хранится в формате строки из 12 ASCII символов, по одному символу в регистре, и доступна по адресу 290.
Получить можно командой:
 
<syntaxhighlight lang="bash">
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')
</syntaxhighlight>
 
замените значения <code>/dev/ttyRS485-1</code> на имя устройства шины и '''A''' на адрес устройства.
 
В результате будет выведена строка с сигнатурой, например '''mr6c'''
 
Прошивку вы можете скачать например с помощью команды <code>wget</code>, для mr6c это будет выглядеть следующим образом:
 
<syntaxhighlight lang="bash">
wget http://fw-releases.wirenboard.com/fw/by-signature/mr6c/stable/latest.wbfw
</syntaxhighlight>


== Аргументы командной строки ==
== Аргументы командной строки ==
Опции запуска утилиты wb-mcu-fw-flasher.
Опции запуска утилиты wb-mcu-fw-flasher:
{| class="wikitable"
{| class="wikitable"
! Параметр !! Описание !! Значение по умолчанию
! Параметр !! Описание !! Значение по умолчанию
Строка 39: Строка 62:
| -a || Адрес Modbus || 1
| -a || Адрес Modbus || 1
|-
|-
| -j || Отправить на устройство команду перехода в режим загрузчика со стандартными настройками соединения 9600N2||
| -j || Отправить на устройство команду перехода в режим загрузчика ||
|-
| -J || Отправить на устройство команду перехода в режим загрузчика с текущими настройками соединения (доступно начиная с версии 1.3.0) ||
|-  
|-  
| -b || Скорость порта (baudrate) || 9600
| -b || Скорость порта (baudrate) || 9600
Строка 55: Строка 76:
| -u || Восстановление заводских настроек UART и Modbus адреса ||
| -u || Восстановление заводских настроек UART и Modbus адреса ||
|-
|-
| -e || Стирает все настройки и калибровочные значения: датчики начнут показывать ерунду. <br>Не используйте, если не знаете, что делаете.||
| -e || Сброс всех настроек до заводских ||
|-
| -w || Стирает все настройки устройства, хранящиеся во Flash памяти. Доступно с версии загрузчика 1.2.0. <br>Не используйте, если не знаете, что делаете.||
|}
|}


== Типичные сценарии использования ==
== Прошивка устройств ==
 
=== Выбор прошивки ===
 
Прошивать устройство лучше по стандартному адресу (на который устройство отвечает из основной программы).
 
Так же можно прошивать по широковещательному адресу «0», если у вас одно устройство на шине в режиме загрузчика.
 
Поэтому для прошивки нескольких устройств на шине можно:
#переводить в режим загрузчика (перезагрузкой по питанию или записью в регистр) и прошивать по отдельности с указанием нешироковещательного Modbus-адреса.
#переводить '''по очереди''' в режим загрузчика (перезагрузкой по питанию) и прошивать по адресу 0.
 
* '''Одновременная прошивка''' устройств невозможна — имеющаяся прошивка на устройствах будет испорчена.
* Перевести устройство в бутлоадер по широковещательному адресу 0 — '''нельзя'''!
*'''При прошивке с контроллера остановите wb-mqtt-serial:'''<pre>service wb-mqtt-serial stop</pre>
* Если вместо <code>wb-mqtt-serial</code> используется стороннее ПО, опрашивающее устройства по последовательному порту - остановите это стороннее ПО
 
=== Подготовка устройства ===
Прошивать устройство лучше по стандартному адресу (на который устройство отвечает из основной программы).
 
Так же можно прошивать по широковещательному адресу «0», если у вас одно устройство на шине в режиме загрузчика.


О том как выбрать файл прошивки для устройства, подготовить устройство к прошивке и примеры, смотрите в статье [[WB Modbus Devices Firmware Update#Ручное обновление | Обновление прошивок на устройствах Wiren Board]].
Поэтому для прошивки нескольких устройств на шине можно:
#переводить в режим загрузчика (перезагрузкой по питанию или записью в регистр) и прошивать по отдельности с указанием нешироковещательного Modbus-адреса.
#переводить '''по очереди''' в режим загрузчика (перезагрузкой по питанию) и прошивать по адресу 0.


=== Обновление прошивки, если устройство в обычном режиме ===
* '''Одновременная прошивка''' устройств невозможна — имеющаяся прошивка на устройствах будет испорчена.
Чтобы прошить устройств в обычном режиме, его нужно перевести в режим загрузчика опцией <code>-j</code>:
* Перевести устройство в бутлоадер по широковещательному адресу 0 — '''нельзя'''!
<syntaxhighlight lang="bash">
*'''При прошивке с контроллера остановите wb-mqtt-serial:'''<pre>service wb-mqtt-serial stop</pre>
wb-mcu-fw-flasher -j -d <порт, на котором находится устройство> -a <modbus адрес устройства> -f <файл с прошивкой устройства.wbfw>
* Если вместо <code>wb-mqtt-serial</code> используется стороннее ПО, опрашивающее устройства по последовательному порту - остановите это стороннее ПО
</syntaxhighlight>


=== Обновление прошивки, если устройство в режиме загрузчика ===
=== Загрузка прошивки в устройство ===
Если устройство находится в режиме загрузчика, то дополнительно готовить его не нужно:
Итого, порядок выглядит так:
#При прошивке с контроллера остановите <code>wb-mqtt-serial</code>.
#Подключите устройство к RS-485.
#Скачайте файл прошивки, например, <code>mr6c__1.14.1_master_19c9ca5.wbfw</code>
#Прошейте устройство утилитой 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>
#После успешной прошивки устройство само выйдет из режима загрузчика и перезапустится в основной программе.


Успешный процесс прошивки выглядит так:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -d <порт, на котором находится устройство> -a <modbus адрес устройства> -f <файл с прошивкой устройства.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.
  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!
</syntaxhighlight>
</syntaxhighlight>


==  Полезные ссылки ==
Пример ошибки при несовпадении сигнатуры:
* [[WB Modbus Devices Firmware Update | Обновление прошивки Modbus-устройств Wiren Board]]
<pre>
* [[Firmware Repository For Wiren Board Modbus Devices |Репозиторий прошивок для Modbus-устройств Wiren Board]]
  Sending info block...
* [https://github.com/wirenboard/wb-mcu-fw-flasher/releases/download/v1.3.1/wb-mcu-fw-flasher_1.3.1_amd64.deb Скачать wb-mcu-fw-flasher для ОС Linux]
  Error while sending info block: Slave device or server failure
* [https://github.com/wirenboard/wb-mcu-fw-flasher/releases/download/v1.3.1/wb-mcu-fw-flasher_1.3.1.exe Скачать wb-mcu-fw-flasher для ОС Windows]
  Data format is invalid or firmware signature doesn't match the device
</pre>

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


Описание

ВНИМАНИЕ: Мы не рекомендуем использовать эту утилиту для повседневного обновления прошивок устройств, используйте утилиту автоматического обновления wb-mcu-fw-updater.

wb-mcu-fw-flasher — сервисная утилита для modbus-устройств Wiren Board с помощью которой вы сможете сбросить устройство к заводским настройкам или заменить его прошивку.

Подготовка к работе

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

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

apt update
apt 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 update
apt install libmodbus5
apt install ./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/

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

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

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

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

Сигнатура устройства хранится в формате строки из 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

Аргументы командной строки

Опции запуска утилиты 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 Сброс всех настроек до заводских

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

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

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

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

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

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

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

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

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

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

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

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

Итого, порядок выглядит так:

  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