Загрузчик периферийных устройств Wiren Board

(перенаправлено с «Bootloader MOD»)

Это утверждённая версия страницы. Она же — наиболее свежая версия.

Описание

Что такое загрузчик (28:27)

В периферийных устройствах с Modbus есть прошивка, которая реализует заложенную логику работы. Чтобы прошивку можно было обновлять прямо в инсталляции по RS-485, в устройствах предусмотрен загрузчик (bootloader), который отвечает за инициализацию устройства и обновление прошивки.

В документации на каждое устройство есть раздел «Обновление прошивки», где есть ссылки на инструкцию по обновлению и список изменений. В это статье мы рассмотрим только обновление загрузчика.

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

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

Устройство находится в режиме загрузчика в следующих случаях:

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

В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.

Восстановление прошивки описано в статье Обновление прошивки Modbus-устройств Wiren Board.

Проверка связи с устройством в режиме загрузчика

Загрузчик продолжает слушать шину RS-485 и отвечает на опрос некоторых регистров. Можно прочитать сигнатуру устройства используя команду modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12 Важно: именно 12 регистров одним запросом, начиная с адреса 290.

Список изменений

Изменения во всех версиях описаны на странице Список изменений в загрузчике.

Обновление загрузчика

Текущую версию загрузчика можно узнать, считав 8 holding регистров с адреса 330, например, с помощью modbus_client:

echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r330 -c8 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

Есть несколько способов обновления загрузчика:

С контроллера Wiren Board

Загрузчик обновляется из консоли контроллера Wiren Board утилитой wb-mcu-fw-updater, которой для работы нужен доступ в интернет. Если интернета нет, используйте другой способ.

Учитывайте, что утилита учитывает установленный на контроллер релиз ПО , то есть вы не сможете зашить тестовую версию загрузчика, если на контроллере стабильный релиз.

Перед обновлением загрузчика, обновите прошивку контроллера через apt или другим способом по инструкциям.

Обновление загрузчика одного устройства

Процесс:

  1. Подключитесь к контроллеру по SSH.
  2. Запустите команду, заменив в ней порт и адрес:
    wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
    

Утилита считает модель устройства, проверит наличие обновления прошивки загрузчика, скачает обновление и зашьёт его в устройство.

Обновление загрузчика всех устройств

Начиная с версии 1.10.8 утилита wb-mcu-fw-updater умеет в режиме обновление прошивок устройств проверять и версии загрузчика, а потом обновлять его:

  1. Подключитесь к контроллеру по SSH.
  2. Запустите команду:
    wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
    
  3. Если есть новые версии загрузчика для устройств, утилита запросит подтверждение на обновление загрузчика, нужно ответить y. Если откажетесь, прошивка обновиться, но загрузчик останется старым.

Пример:

# wb-mcu-fw-updater update-all
2024-04-03 07:17:24,061 Will probe all devices on enabled serial ports of /etc/wb-mqtt-serial.conf:
2024-04-03 07:17:24,063 Probing WB-MAP6S fw2 (port: /dev/ttyRS485-1, slaveid: 26, uart_params: 9600N2, response_timeout: 0.50)...
2024-04-03 07:17:26,460 Update: 2.8.0-rc1 -> 2.8.1 (WB-MAP6S fw2 (26, /dev/ttyRS485-1))
2024-04-03 07:17:27,128 Flashing firmware to WB-MAP6S fw2 (26, /dev/ttyRS485-1)
2024-04-03 07:17:28,073 
2024-04-03 07:17:28,073 Bootloader update (v1.3.0 -> v1.4.1) for map6semG16 /dev/ttyRS485-1:26 is available! (bootloader updates are highly recommended to install) Do a bootloader update? [Y/N]

С компьютера и других устройств

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

Если у вас нет контроллера Wiren Board или на нём нет интернета, можно обновить загрузчик в ручном режиме утилитой wb-mcu-fw-flasher, которую надо установить по инструкции.

Чтение сигнатуры

Для начала нам нужно считать сигнатуру устройства, чтобы понимать, какие загрузчик и прошивки нужны.

Сделать это можно прочитав 12 holding регистров с адреса 290, например, с помощью modbus_client:

echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')

В результате на экран будет выведена строка вида mwac0 — это и есть сигнатура.

Скачивание файлов

Чтобы скачать файл с загрузчиком, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=bootloader/by-signature/ ,выберите папку с полученной выше сигнатурой, далее раздел main и скачайте файл latest.wbfw.

Чтобы скачать прошивку, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=fw/by-signature/. ,выберите папку с полученной выше сигнатурой, далее раздел main и скачайте файл latest.wbfw. Если вам необходима конкретная версия прошивки, можно скачать именно её.

Прошивка

Теперь, когда файлы обновления загрузчика и прошивки скачаны, их надо зашить в устройство:

  1. Запустите обновление загрузчика, замените порт /dev/ttyRS485-1, скорость -b, адрес -a и имя файла на свои:
    wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f wb-bootloader-updater_mwac0__1.4.1_master_e676613.wbfw -j
    
    утилита сотрёт прошивку и зашьёт новый загрузчик.
  2. Запустите обновление прошивки, замените порт /dev/ttyRS485-1, скорость -b, адрес -a и имя файла на свои:
    wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f mwac0__1.21.1_main_ac00010.wbfw
    
    так как устройство со стёртой прошивкой находится в загрузчике, то в команде выше нет ключа -j.

Более подробно про ручное обновление прошивки читайте в статье Обновление прошивки Modbus-устройств Wiren Board

Известные ошибки

Список известных неисправностей