WB Modbus Devices Firmware Update: различия между версиями

м
Поправил оформление.
м (Поправил оформление.)
Строка 1: Строка 1:
<languages/>
<translate>
</translate>
{{DISPLAYTITLE:Загрузка прошивок на устройства Wiren Board}}
{{DISPLAYTITLE:Загрузка прошивок на устройства Wiren Board}}
<translate>


== Загрузчик прошивок == <!--T:1-->
== Загрузчик прошивок ==


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


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


== Переход в режим загрузчика == <!--T:4-->
== Переход в режим загрузчика ==  
[[File:Bootloader.gif|300px|thumb|right|Индикация режима загрузчика]]


<!--T:5-->
* Если на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика.
[[File:Bootloader.gif||right||Индикация режима загрузчика]]
* Если на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно.
* При записи 1 в holding-регистр 129 (0x81) при работе основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это может сделать утилита <code>wb-mcu-fw-flasher</code> если использовать ключ <code>-j</code>.


* Если на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
* Если на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно;
* При записи 1 в holding-регистр 129 (0x81) при работе основной программы — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это может сделать утилита wb-mcu-fw-flasher если использовать ключ -j.
<!--T:6-->
Индикация режима загрузчика: индикатор Status устройства редко мигает с периодом 1 секунда. При заливке прошивки индикатор часто мигает при приеме блока данных.
Индикация режима загрузчика: индикатор Status устройства редко мигает с периодом 1 секунда. При заливке прошивки индикатор часто мигает при приеме блока данных.


Строка 29: Строка 20:


Для установки выполните в консоли:
Для установки выполните в консоли:
<pre>
<syntaxhighlight lang="bash">
dpkg -s wb-mcu-fw-updater || (apt update && apt install wb-mcu-fw-updater)
dpkg -s wb-mcu-fw-updater || (apt update && apt install wb-mcu-fw-updater)
</pre>
</syntaxhighlight>


Утилита автоматически останавливает сервис wb-mqtt-serial перед началом работы и запускает заново после. Если вместо wb-mqtt-serial используется стороннее ПО, опрашивающее устройства по последовательному порту - остановите это стороннее ПО.
Утилита автоматически останавливает сервис <code>wb-mqtt-serial</code> перед началом работы и запускает заново после. Если вместо <code>wb-mqtt-serial</code> используется стороннее ПО, опрашивающее устройства по последовательному порту остановите это ПО.


Для обновления прошивки всех устройств, описанных в разделе Serial Devices Configuration (файл /etc/wb-mqtt-serial.conf), выполните:
Для обновления прошивки всех устройств, описанных в разделе Serial Devices Configuration (файл <code>/etc/wb-mqtt-serial.conf</code>), выполните:
<pre>
<syntaxhighlight lang="bash">
wb-mcu-fw-updater update-all
wb-mcu-fw-updater update-all
</pre>
</syntaxhighlight>


Для обновления прошивки конкретного устройства, укажите порт и его адрес Modbus:
Для обновления прошивки конкретного устройства, укажите порт и его адрес Modbus:
<pre>
<syntaxhighlight lang="bash">
wb-mcu-fw-updater update-fw /dev/ttyRS485-2 -a70
wb-mcu-fw-updater update-fw /dev/ttyRS485-2 -a70
</pre>
</syntaxhighlight>


Подробную информацию смотрите в выводе
Подробную информацию смотрите в выводе
<pre>
<syntaxhighlight lang="bash">
wb-mcu-fw-updater --help
wb-mcu-fw-updater --help
</pre>
</syntaxhighlight>


<gallery mode="packed" heights="200px">
<gallery mode="packed" heights="200px">
Строка 61: Строка 52:
Прошивки сгруппированы по версиям и сигнатурам (типам) устройств.
Прошивки сгруппированы по версиям и сигнатурам (типам) устройств.


Каждое Modbus устройство Wirenboard имеет сигнатуру — наименование аппаратного типа устройства. Перезапись прошивки возможна только при совпадении сигнатур устройства и прошивки.
Каждое Modbus устройство Wiren Board имеет сигнатуру — наименование аппаратного типа устройства. Перезапись прошивки возможна только при совпадении сигнатур устройства и прошивки.


Сигнатура устройства хранится в формате строки из 12 ASCII символов, по одному символу в регистре, и доступна по адресу 290.
Сигнатура устройства хранится в формате строки из 12 ASCII символов, по одному символу в регистре, и доступна по адресу 290.
Получить можно командой:
Получить можно командой:


<code>
<syntaxhighlight lang="bash">
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')
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')
</code>
</syntaxhighlight>


замените значения '''/dev/ttyRS485-1''' на имя устройства шины и '''A''' на адрес устройства.
замените значения <code>/dev/ttyRS485-1</code> на имя устройства шины и '''A''' на адрес устройства.


В результате будет выведена строка с сигнатурой, например '''mr6c'''
В результате будет выведена строка с сигнатурой, например '''mr6c'''


Прошивку вы можете скачать например с помощью команды wget , для mr6c это будет выглядеть следующим образом:
Прошивку вы можете скачать например с помощью команды <code>wget</code>, для mr6c это будет выглядеть следующим образом:


<pre>
<syntaxhighlight lang="bash">
wget http://fw-releases.wirenboard.com/fw/by-signature/mr6c/stable/latest.wbfw
wget http://fw-releases.wirenboard.com/fw/by-signature/mr6c/stable/latest.wbfw
</pre>
</syntaxhighlight>


=== Подключение устройства === <!--T:11-->
=== Подключение устройства ===  


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


Так же можно прошивать по широковещательному адресу 0, если у вас одно устройство на шине в режиме загрузчика.
Так же можно прошивать по широковещательному адресу «0», если у вас одно устройство на шине в режиме загрузчика.


Поэтому для прошивки нескольких устройств на шине можно:
Поэтому для прошивки нескольких устройств на шине можно:
Строка 90: Строка 81:
#переводить '''по очереди''' в режим загрузчика (перезагрузкой по питанию) и прошивать по адресу 0.
#переводить '''по очереди''' в режим загрузчика (перезагрузкой по питанию) и прошивать по адресу 0.


* '''Одновременная прошивка''' устройств невозможна; имеющаяся прошивка на устройствах будет испорчена.
* '''Одновременная прошивка''' устройств невозможна имеющаяся прошивка на устройствах будет испорчена.
* Перевести устройство в бутлоадер по широковещательному адресу 0 - '''нельзя'''!
* Перевести устройство в бутлоадер по широковещательному адресу 0 '''нельзя'''!
*'''При прошивке с контроллера остановите wb-mqtt-serial:'''<pre>service wb-mqtt-serial stop</pre>
*'''При прошивке с контроллера остановите wb-mqtt-serial:'''<pre>service wb-mqtt-serial stop</pre>
* Если вместо wb-mqtt-serial используется стороннее ПО, опрашивающее устройства по последовательному порту - остановите это стороннее ПО
* Если вместо <code>wb-mqtt-serial</code> используется стороннее ПО, опрашивающее устройства по последовательному порту - остановите это стороннее ПО


=== Утилита wb-mcu-fw-flasher для прошивки устройств === <!--T:15-->
=== Утилита wb-mcu-fw-flasher для прошивки устройств ===


<!--T:17-->
Для установки утилиты '''на контроллер Wiren Board''' выполните команды:
Для установки утилиты '''на контроллер Wiren Board''' выполните команды:
<pre>
<syntaxhighlight lang="bash">
apt-get update
apt-get update
apt-get install wb-mcu-fw-flasher
apt-get install wb-mcu-fw-flasher
</pre>
</syntaxhighlight>


<!--T:18-->
Версия утилиты для '''MS Windows''': [[Media: Wb-mcu-fw-flasher_1.0.3.zip | Wb-mcu-fw-flasher_1.0.3.zip]]
Версия утилиты для '''MS Windows''': [[Media: Wb-mcu-fw-flasher_1.0.3.zip | Wb-mcu-fw-flasher_1.0.3.zip]]


<!--T:19-->
Для установки на '''компьютер с Debian''' скачайте пакет [[Media: Wb-mcu-fw-flasher_1.0.3_amd64-all.deb | Wb-mcu-fw-flasher_1.0.3_amd64-all.deb]]
Для установки на '''компьютер с Debian''' скачайте пакет - [[Media: Wb-mcu-fw-flasher_1.0.3_amd64-all.deb | Wb-mcu-fw-flasher_1.0.3_amd64-all.deb]]
и выполните команды в директории, куда загрузился пакет:
и выполните команды в директории, куда загрузился пакет:
<pre>
<syntaxhighlight lang="bash">
apt-get update
apt-get update
apt-get install libmodbus5
apt-get install libmodbus5
dpkg -i Wb-mcu-fw-flasher_1.0.3_amd64-all.deb
dpkg -i Wb-mcu-fw-flasher_1.0.3_amd64-all.deb
</pre>
</syntaxhighlight>


Для контроллеров других производителей с процессорами ARM Cortex можно воспользоваться Debian-пакетом для Wiren Board: http://releases.contactless.ru/?prefix=stable/stretch/pool/main/w/wb-mcu-fw-flasher/
Для контроллеров других производителей с процессорами ARM Cortex можно воспользоваться Debian-пакетом для Wiren Board: http://releases.contactless.ru/?prefix=stable/stretch/pool/main/w/wb-mcu-fw-flasher/


<!--T:20-->
Опции запуска утилиты wb-mcu-fw-flasher:
Опции запуска утилиты wb-mcu-fw-flasher:
{| class="wikitable"
{| class="wikitable"
Строка 146: Строка 133:
|}
|}


<!--T:21-->
Пример (устройство в рабочем режиме):
Пример (устройство в рабочем режиме):
<pre>
<syntaxhighlight lang="bash">
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 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
</pre>
</syntaxhighlight>


<!--T:22-->
Пример для Windows (устройство в рабочем режиме):
Пример для Windows (устройство в рабочем режиме):
<pre>
<syntaxhighlight lang="bash">
wb-mcu-fw-flasher.exe -j -d COM10 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
wb-mcu-fw-flasher.exe -j -d COM10 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw
</pre>
</syntaxhighlight>


<!--T:23-->
Здесь COM10 — имя виртуального последовательного порта, которое присвоено адаптеру USB RS-485.
Здесь COM10 — имя виртуального последовательного порта, которое присвоено адаптеру USB RS-485.


<!--T:24-->
Пример для устройства с нестандартными настройками UART (со скоростью порта 115200):
Пример для устройства с нестандартными настройками UART (со скоростью порта 115200):
<pre>
<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw -b 115200
wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f WB-MR-MR6C_MCU3_3_1.9.4.wbfw -b 115200
</pre>
</syntaxhighlight>


=== Прошивка устройств === <!--T:25-->
=== Прошивка устройств ===


<!--T:26-->
Итого, порядок действий:
Итого, порядок действий:
#При прошивке с контроллера остановите wb-mqtt-serial.
#При прошивке с контроллера остановите <code>wb-mqtt-serial</code>.
#Подключите устройство к RS-485.
#Подключите устройство к RS-485.
#Скачайте файл прошивки, например, mr6c__1.14.1_master_19c9ca5.wbfw
#Скачайте файл прошивки, например, <code>mr6c__1.14.1_master_19c9ca5.wbfw</code>
#Прошейте устройство утилитой wb-mcu-fw-flasher:<pre>wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.14.1_master_19c9ca5.wbfw</pre>
#Прошейте устройство утилитой wb-mcu-fw-flasher:<pre>wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 25 -f mr6c__1.14.1_master_19c9ca5.wbfw</pre>
#После успешной прошивки устройство само выйдет из режима загрузчика и перезапустится в основной программе.
#После успешной прошивки устройство само выйдет из режима загрузчика и перезапустится в основной программе.


Успешный процесс прошивки выглядит так:
Успешный процесс прошивки выглядит так:
<pre>
<syntaxhighlight lang="bash">
   wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f mr6c__1.14.1_master_19c9ca5.wbfw     
   wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 1 -f mr6c__1.14.1_master_19c9ca5.wbfw     
   /dev/ttyRS485-1 opened successfully.
   /dev/ttyRS485-1 opened successfully.
Строка 188: Строка 170:
   Sending data block 89 of 89... OK.
   Sending data block 89 of 89... OK.
   All done!
   All done!
</pre>
</syntaxhighlight>


<!--T:33-->
Пример ошибки при несовпадении сигнатуры:
Пример ошибки при несовпадении сигнатуры:
<pre>
<pre>
Строка 197: Строка 178:
   Data format is invalid or firmware signature doesn't match the device
   Data format is invalid or firmware signature doesn't match the device
</pre>
</pre>
</translate>