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

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


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


== Типичные сценарии использования ==
== Загрузка прошивки в устройство ==
 
Итого, порядок выглядит так:
О том как выбрать файл прошивки для устройства, подготовить устройство к прошивке и примеры, смотрите в статье [[WB Modbus Devices Firmware Update#Ручное обновление | Обновление прошивок на устройствах Wiren Board]].
#При прошивке с контроллера остановите <code>wb-mqtt-serial</code>.
 
#Подключите устройство к RS-485.
=== Обновление прошивки, если устройство в обычном режиме ===
#Скачайте файл прошивки, например, <code>mr6c__1.14.1_master_19c9ca5.wbfw</code>
Чтобы прошить устройств в обычном режиме, его нужно перевести в режим загрузчика опцией <code>-j</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">
#После успешной прошивки устройство само выйдет из режима загрузчика и перезапустится в основной программе.
wb-mcu-fw-flasher -j -d <порт, на котором находится устройство> -a <modbus адрес устройства> -f <файл с прошивкой устройства.wbfw>
</syntaxhighlight>
 
=== Обновление прошивки, если устройство в режиме загрузчика ===
Если устройство находится в режиме загрузчика, то дополнительно готовить его не нужно:


Успешный процесс прошивки выглядит так:
<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:18, 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

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

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

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

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

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

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

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

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

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

  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