Сервисная утилита wb-mcu-fw-flasher

Материал из Wiren Board

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


Описание

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

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

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

Wbincludes:Wb-mcu-fw-flasher Install

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

Прошивки публикуются на сайте 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