|
|
(не показаны 22 промежуточные версии 3 участников) |
Строка 1: |
Строка 1: |
| {{DISPLAYTITLE:Загрузчик периферийных устройств Wiren Board}}
| |
| == Описание == | | == Описание == |
| {{YouTube
| | Bootloader — загрузчик устройств Wiren Board. |
| |link= https://youtu.be/d_olK15Xhkw
| |
| |text= Что такое загрузчик (28:27)
| |
| |start=1708
| |
| }}
| |
| В периферийных устройствах с Modbus есть прошивка, которая реализует заложенную логику работы. Чтобы прошивку можно было обновлять прямо в инсталляции по RS-485, в устройствах предусмотрен загрузчик (bootloader), который отвечает за инициализацию устройства и обновление прошивки.
| |
|
| |
|
| В [[Documentation | документации]] на каждое устройство есть раздел «Обновление прошивки», где есть ссылки на инструкцию по обновлению и список изменений. В это статье мы рассмотрим только обновление загрузчика.
| | [[Bootloader_MOD|Режим загрузчика Modbus-устройств Wiren Board]] |
| | | == Обновление == |
| ==Переход устройств в режим загрузчика ==
| |
| [[File:Bootloader.gif|300px|thumb|right|Индикация режима загрузчика]]
| |
| Устройство находится в режиме загрузчика в следующих случаях:
| |
| * первые 2 секунды после включения питания, если на устройстве есть корректная прошивка;
| |
| * постоянно, если на устройстве нет корректной прошивки, например, был сбой при обновлении прошивки;
| |
| * при записи <code>1</code> в holding-регистр <code>129(0x81)</code> в момент работы основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения <code>9600N2</code>. Этот режим можно активировать запустив утилиту [[wb-mcu-fw-flasher]] с ключем <code>-j</code>.
| |
| *при записи <code>1</code> в holding-регистр <code>131(0x83)</code> в момент работы основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд с параметрами соединения, '''установленными в настройках устройства'''. Это может быть полезно для обновления устройств за шлюзами без перенастройки параметров шлюза.
| |
| *:Перейти в этот режим можно в [[wb-mcu-fw-flasher]] начиная с версии '''1.3.0''' запустив его с ключем <code>-J</code>. Кроме того для запуска режима необходима поддержка со стороны загрузчика (версия 1.3.0 и выше) и со стороны прошивки (см. changelog прошивки).
| |
| | |
| В режиме загрузчика индикатор '''Status''' устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.
| |
| | |
| Восстановление прошивки описано в статье [[WB_Modbus_Devices_Firmware_Update#fw-recovery | Обновление прошивки Modbus-устройств Wiren Board]].
| |
| | |
| ===Проверка связи с устройством в режиме загрузчика===
| |
| Загрузчик продолжает слушать шину RS-485 и отвечает на опрос некоторых регистров. Можно прочитать сигнатуру устройства используя команду
| |
| <code>modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r290 -c12</code>
| |
| Важно: именно 12 регистров одним запросом, начиная с адреса 290.
| |
| | |
| == Список изменений ==
| |
| Изменения во всех версиях описаны на странице [[Bootloader_Changelog |Список изменений в загрузчике]].
| |
| | |
| == Обновление загрузчика == | |
| {{Anchor|update}} | | {{Anchor|update}} |
| | [[Wb-mcu-fw-updater#update-bl|Как обновить загрузчик]] |
|
| |
|
| Текущую версию загрузчика можно узнать, считав 8 holding регистров с адреса 330, например, с помощью [[modbus_client]]:
| | [[Bootloader_Changelog| Список изменений в прошивках]] |
| | |
| <syntaxhighlight lang="bash">
| |
| 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')
| |
| </syntaxhighlight>
| |
| | |
| Есть несколько способов обновления загрузчика:
| |
| | |
| === С контроллера Wiren Board ===
| |
| | |
| Загрузчик обновляется из консоли контроллера Wiren Board утилитой [[wb-mcu-fw-updater]], которой для работы нужен доступ в интернет. Если интернета нет, используйте другой способ.
| |
| | |
| Учитывайте, что утилита учитывает [[ Wiren_Board_Software#Кратко_о_релизах | установленный на контроллер релиз ПО ]], то есть вы не сможете зашить тестовую версию загрузчика, если на контроллере стабильный релиз.
| |
| | |
| Перед обновлением загрузчика, обновите прошивку контроллера через apt или другим способом по [[Wiren_Board_Software#update |инструкциям]].
| |
| | |
| ==== Обновление загрузчика одного устройства ====
| |
| | |
| Процесс:
| |
| # Подключитесь к контроллеру по [[SSH]].
| |
| # Запустите команду, заменив в ней порт и адрес:
| |
| #:<syntaxhighlight lang="bash">
| |
| wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
| |
| </syntaxhighlight>
| |
| | |
| Утилита считает модель устройства, проверит наличие обновления прошивки загрузчика, скачает обновление и зашьёт его в устройство.
| |
| | |
| ==== Обновление загрузчика всех устройств ====
| |
| | |
| Начиная с версии 1.10.8 утилита wb-mcu-fw-updater умеет в режиме обновление прошивок устройств проверять и версии загрузчика, а потом обновлять его:
| |
| # Подключитесь к контроллеру по [[SSH]].
| |
| # Запустите команду:
| |
| #:<syntaxhighlight lang="bash">
| |
| wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
| |
| </syntaxhighlight>
| |
| # Если есть новые версии загрузчика для устройств, утилита запросит подтверждение на обновление загрузчика, нужно ответить <code>y</code>. Если откажетесь, прошивка обновиться, но загрузчик останется старым.
| |
| | |
| Пример:
| |
| <syntaxhighlight lang="console">
| |
| # 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]
| |
| </syntaxhighlight>
| |
| | |
| === С компьютера и других устройств ===
| |
| ==== Установка утилиты ====
| |
| Если у вас нет контроллера Wiren Board или на нём нет интернета, можно обновить загрузчик в ручном режиме утилитой wb-mcu-fw-flasher, которую надо установить по [[wb-mcu-fw-flasher#install|инструкции]].
| |
| | |
| ==== Чтение сигнатуры ====
| |
| Для начала нам нужно считать сигнатуру устройства, чтобы понимать, какие загрузчик и прошивки нужны.
| |
| | |
| Сделать это можно прочитав 12 holding регистров с адреса 290, например, с помощью [[modbus_client]]:
| |
| <syntaxhighlight lang="bash">
| |
| 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')
| |
| </syntaxhighlight>
| |
| | |
| В результате на экран будет выведена строка вида <code>mwac0</code> — это и есть сигнатура.
| |
| | |
| ==== Скачивание файлов ====
| |
| Чтобы скачать файл с загрузчиком, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=bootloader/by-signature/ ,выберите папку с полученной выше сигнатурой, далее раздел <code>main</code> и скачайте файл <code>latest.wbfw</code>.
| |
| | |
| Чтобы скачать прошивку, перейдите по адресу https://fw-releases.wirenboard.com/?prefix=fw/by-signature/. ,выберите папку с полученной выше сигнатурой, далее раздел <code>main</code> и скачайте файл <code>latest.wbfw</code>. Если вам необходима конкретная версия прошивки, можно скачать именно её.
| |
| | |
| ==== Прошивка ====
| |
| Теперь, когда файлы обновления загрузчика и прошивки скачаны, их надо зашить в устройство:
| |
| # Запустите обновление загрузчика, замените порт <code>/dev/ttyRS485-1</code>, скорость <code>-b</code>, адрес <code>-a</code> и имя файла на свои:
| |
| #:<syntaxhighlight lang="bash">
| |
| wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f wb-bootloader-updater_mwac0__1.4.1_master_e676613.wbfw -j
| |
| </syntaxhighlight>
| |
| #: утилита сотрёт прошивку и зашьёт новый загрузчик.
| |
| # Запустите обновление прошивки, замените порт <code>/dev/ttyRS485-1</code>, скорость <code>-b</code>, адрес <code>-a</code> и имя файла на свои:
| |
| #: <syntaxhighlight lang="bash">
| |
| wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f mwac0__1.21.1_main_ac00010.wbfw
| |
| </syntaxhighlight>
| |
| #: так как устройство со стёртой прошивкой находится в загрузчике, то в команде выше нет ключа <code>-j</code>.
| |
| | |
| Более подробно про ручное обновление прошивки читайте в статье [[ WB_Modbus_Devices_Firmware_Update#Ручное_обновление | Обновление прошивки Modbus-устройств Wiren Board ]]
| |
|
| |
|
| == Известные ошибки == | | == Известные ошибки == |
|
| |
|
| [[Bootloader: Errata | Список известных неисправностей]] | | [[Bootloader: Errata | Список известных неисправностей]] |