Bootloader: различия между версиями
(не показано 7 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:Загрузчик периферийных устройств Wiren Board}} | {{DISPLAYTITLE:Загрузчик периферийных устройств Wiren Board}} | ||
== Описание == | == Описание == | ||
В периферийных устройствах с Modbus есть прошивка, которая реализует заложенную логику работы. Чтобы прошивку можно было обновлять прямо в инсталляции по RS-485, в устройствах предусмотрен загрузчик (bootloader), который отвечает за инициализацию устройства и обновление прошивки. | В периферийных устройствах с Modbus есть прошивка, которая реализует заложенную логику работы. Чтобы прошивку можно было обновлять прямо в инсталляции по RS-485, в устройствах предусмотрен загрузчик (bootloader), который отвечает за инициализацию устройства и обновление прошивки. | ||
Строка 34: | Строка 29: | ||
{{Anchor|update}} | {{Anchor|update}} | ||
Текущую версию загрузчика можно узнать, считав 8 holding регистров с адреса 330 | Текущую версию загрузчика можно узнать, считав 8 holding регистров с адреса 330: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 - | echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t3 -r330 -c8 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g') | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Есть несколько способов обновления загрузчика: | Есть несколько способов обновления загрузчика: | ||
=== | ==== Рекомендуемый способ: утилита <code>wb-mcu-fw-updater</code> ==== | ||
Для использования этого способа нужен контроллер Wiren Board, подключенный к интернету. | |||
Рекомендуется обновить пакеты для получения актуальной версии wb-mcu-fw-updater: <code>apt update; apt upgrade</code> | |||
Для запуска обновления загрузчика одного устройства нужно ввести команду (подставить нужный порт и адрес): | |||
<syntaxhighlight lang="bash"> | |||
wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1 | wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
В результате будет выполнена проверка наличия обновления загрузчика, скачивание нужного файла обновления, обновление загрузчика и установка актуальной версии прошивки в соответствии с [[ Wiren_Board_Software#Кратко_о_релизах | релизом ПО контроллера ]]. | |||
Также в утилите <code>wb-mcu-fw-updater</code> есть автоматический режим обновления прошивок всех устройств. | |||
Начиная с версии 1.10.8 | Начиная с версии 1.10.8 в этом режиме перед началом процесса обновления прошивки утилита проверяет необходимость обновления загрузчика и выводит на экран предложение обновить загрузчик, на которое можно ответить <code>y</code> для обновления загрузчика. | ||
Пример: | Пример: | ||
<syntaxhighlight lang=" | |||
<syntaxhighlight lang="bash"> | |||
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,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:24,063 Probing WB-MAP6S fw2 (port: /dev/ttyRS485-1, slaveid: 26, uart_params: 9600N2, response_timeout: 0.50)... | ||
Строка 82: | Строка 67: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | ==== Ручное обновление: утилита <code>wb-mcu-fw-flasher</code> ==== | ||
Утилита позволяет обновлять прошивки и загрузчики Modbus-устройств в ручном режиме. При этом обновление может быть запущено как с контроллера Wiren Board, так и с ПК. Для работы утилиты не требуется доступ в интернет, однако нужно скачать файл обновления прошивки или загрузчика любым удобным способом. | |||
Чтобы выбрать подходящие файлы для обновления загрузчика и прошивки, нужно считать сигнатуру устройства (подставьте верный адрес устройства и порт): | |||
<syntaxhighlight lang="bash"> | <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') | 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> | </syntaxhighlight> | ||
В результате на экран будет выведена строка вида <code>mwac0</code> | В результате на экран будет выведена строка вида <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/latest.wbfw</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 | wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f wb-bootloader-updater_mwac0__1.4.1_master_e676613.wbfw -j | ||
</syntaxhighlight> | </syntaxhighlight> | ||
После завершения процесса обновления загрузчика прошивка из устройства будет удалена и устройство будет постоянно находиться в загрузчике. Теперь нужно вернуть прошивку: | |||
<syntaxhighlight lang="bash"> | |||
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f mwac0__1.21.1_main_ac00010.wbfw | wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f mwac0__1.21.1_main_ac00010.wbfw | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Обратите внимание, что ключа <code>-j</code> (переход в загрузчик) нет, т.к. устройство уже в загрузчике. Описание параметров утилиты <code>wb-mcu-fw-flasher</code> можно увидеть, запустив её без параметров. | |||
Более подробно про ручное обновление прошивки читайте в статье [[ WB_Modbus_Devices_Firmware_Update#Ручное_обновление | Обновление прошивки Modbus-устройств Wiren Board ]] | Более подробно про ручное обновление прошивки читайте в статье [[ WB_Modbus_Devices_Firmware_Update#Ручное_обновление | Обновление прошивки Modbus-устройств Wiren Board ]] | ||
== Список изменений в загрузчике == | |||
[[Bootloader_Changelog| Список изменений в загрузчике]] | |||
== Известные ошибки == | == Известные ошибки == | ||
[[Bootloader: Errata | Список известных неисправностей]] | [[Bootloader: Errata | Список известных неисправностей]] |
Версия 08:57, 13 апреля 2024
Описание
В периферийных устройствах с 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 прошивки).
- Перейти в этот режим можно в wb-mcu-fw-flasher начиная с версии 1.3.0 запустив его с ключем
В режиме загрузчика индикатор 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:
echo -e $(modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t3 -r330 -c8 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
Есть несколько способов обновления загрузчика:
Рекомендуемый способ: утилита wb-mcu-fw-updater
Для использования этого способа нужен контроллер Wiren Board, подключенный к интернету.
Рекомендуется обновить пакеты для получения актуальной версии wb-mcu-fw-updater: apt update; apt upgrade
Для запуска обновления загрузчика одного устройства нужно ввести команду (подставить нужный порт и адрес):
wb-mcu-fw-updater update-bl /dev/ttyRS485-1 -a1
В результате будет выполнена проверка наличия обновления загрузчика, скачивание нужного файла обновления, обновление загрузчика и установка актуальной версии прошивки в соответствии с релизом ПО контроллера .
Также в утилите wb-mcu-fw-updater
есть автоматический режим обновления прошивок всех устройств.
Начиная с версии 1.10.8 в этом режиме перед началом процесса обновления прошивки утилита проверяет необходимость обновления загрузчика и выводит на экран предложение обновить загрузчик, на которое можно ответить 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]
Ручное обновление: утилита wb-mcu-fw-flasher
Утилита позволяет обновлять прошивки и загрузчики Modbus-устройств в ручном режиме. При этом обновление может быть запущено как с контроллера Wiren Board, так и с ПК. Для работы утилиты не требуется доступ в интернет, однако нужно скачать файл обновления прошивки или загрузчика любым удобным способом.
Чтобы выбрать подходящие файлы для обновления загрузчика и прошивки, нужно считать сигнатуру устройства (подставьте верный адрес устройства и порт):
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
. Если вам необходима конкретная версия прошивки, можно скачать именно её.
Теперь, когда файлы обновления загрузчика и прошивки скачаны, можно приступить к процессу обновления.
Сначала нужно запустить обновление загрузчика:
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f wb-bootloader-updater_mwac0__1.4.1_master_e676613.wbfw -j
После завершения процесса обновления загрузчика прошивка из устройства будет удалена и устройство будет постоянно находиться в загрузчике. Теперь нужно вернуть прошивку:
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -b9600 -a1 -f mwac0__1.21.1_main_ac00010.wbfw
Обратите внимание, что ключа -j
(переход в загрузчик) нет, т.к. устройство уже в загрузчике. Описание параметров утилиты wb-mcu-fw-flasher
можно увидеть, запустив её без параметров.
Более подробно про ручное обновление прошивки читайте в статье Обновление прошивки Modbus-устройств Wiren Board