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

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

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

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

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

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

Индикация режима загрузчика

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

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

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

Прошивки

Запись прошивки в память устройства выполняется загрузчиком, который получает ее по Modbus RTU. Прошивки хранятся в файлах с расширением .wbfw.

Сигнатуры устройств

При прошивке на заводе в память устройства записывается сигнатура — наименование аппаратного типа устройства. При перезаписи прошивки текущая сигнатура сравнивается с сигнатурой прошивки. Запись новой прошивки возможна только при совпадении сигнатур.

Modbus

Загрузчик устройства получает прошивку по Modbus RTU. В режиме загрузчика коммуникационные параметры фиксированы и не зависят от значений, записанных ранее в память устройства: 9600 8N2. По протоколу Modbus устройство можно перевести в режим загрузчика, если во время работы основной программы записать 1 в holding-регистр 129 (0x81). В этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд.

Modbus-адрес устройства для прошивки в режиме загрузчика следует выбирать следующим образом:

  1. Основной адрес для прошивки — адрес, заданный в памяти устройства: то есть это стандартный адрес, на который устройство отвечает из основной программы.
  2. Прошивать устройства можно по широковещательному адресу 0. Это менее предпочтительный способ.

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

Для передачи прошивки на устройства используется утилита wb-mcu-fw-flasher, запускаемая с контроллера Wiren Board (или компьютера с Linux). Для установки утилиты на контроллер выполните команды:

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

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

Параметр Описание Значение по умолчанию
-d Устройство последовательного порта
-f Файл прошивки
-a Адрес Modbus 1
-j Отправить на устройство команду перехода в режим загрузчика
-r Адрес holding-регистра для перехода в режим загрузчика 129
-D Включить режим отладки

Пример:

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


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

При прошивке с контроллера остановите wb-mqtt-serial:

service wb-mqtt-serial stop

Подключите устройство к RS-485.

Если вы не знаете точного аппаратного типа устройства, то его сигнатуру можно прочесть командой:

    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 ''

Задайте адрес прошиваемого устройства в переменной mbusaddr.

В выводе команды вы получите сигнатуру устройства, например, wbmr6c.

Выберите подходящую прошивку, например, 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

Успешный процесс прошивки выглядит следующим образом:

   wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f WB-MR-MR6C_MCU3_3_ULN2003_1.9.4_feature-bootloader_1.9.3_5932761.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...
   WB-MR-MR6C_MCU3_3_ULN2003_1.9.4_feature-bootloader_1.9.3_5932761.wbfw opened successfully, size 12136 bytes
   Sending info block... OK
   Sending data block 89 of 89... OK.
   All done!

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