Ошибка обновления устройств WB-MRPS6/S

Прошивка контроллера из ветки testing, все обновления установлены.

Решил обновить прошивки устройств. Все “сидят” на 2 шине, скорость 115200

Обновление запустил штатно: wb-mcu-fw-updater update-all

В ходе обновления устройства обнаружили новые бутлоадеры и я подтвердил, что их тоже обновлять. В какой-то момент вылетела красная строчка:

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

root@wirenboard-ACQNKJVT:~# wb-mcu-fw-updater update-all
2024-03-06 12:21:15,764 Will probe all devices on enabled serial ports of /etc/wb-mqtt-serial.conf:
2024-03-06 12:21:15,780 Probing Unknown (port: /dev/ttyRS485-1, slaveid: 16, uart_params: 9600N1, response_timeout: 0.50)...
2024-03-06 12:21:18,875 Probing Unknown (port: /dev/ttyRS485-1, slaveid: 28, uart_params: 9600N1, response_timeout: 0.50)...
2024-03-06 12:21:19,913 Probing Unknown (port: /dev/ttyRS485-1, slaveid: 3, uart_params: 9600N1, response_timeout: 0.50)...
2024-03-06 12:21:20,746 Probing WB-MWAC (port: /dev/ttyRS485-2, slaveid: 32, uart_params: 115200N2, response_timeout: 0.50)...
2024-03-06 12:21:21,760 Probing WB-MR6CU (port: /dev/ttyRS485-2, slaveid: 87, uart_params: 115200N2, response_timeout: 0.50)...
2024-03-06 12:21:22,595 Probing WB-MR6CU (port: /dev/ttyRS485-2, slaveid: 118, uart_params: 115200N2, response_timeout: 0.50)...
2024-03-06 12:21:23,452 Probing WB-MR6CU (port: /dev/ttyRS485-2, slaveid: 39, uart_params: 115200N2, response_timeout: 0.50)...
2024-03-06 12:21:23,935 Unhandled exception!
Traceback (most recent call last):
  File "/usr/bin/wb-mcu-fw-updater", line 525, in <module>
    args.func(args)
  File "/usr/bin/wb-mcu-fw-updater", line 205, in update_all
    update_monitor._update_all(
  File "/usr/lib/python3/dist-packages/wb_mcu_fw_updater/update_monitor.py", line 737, in _update_all
    probing_result = probe_all_devices(
  File "/usr/lib/python3/dist-packages/wb_mcu_fw_updater/update_monitor.py", line 690, in probe_all_devices
    modbus_connection=get_correct_modbus_connection(
  File "/usr/lib/python3/dist-packages/wb_mcu_fw_updater/update_monitor.py", line 268, in get_correct_modbus_connection
    check_device_is_a_wb_one(modbus_connection)
  File "/usr/lib/python3/dist-packages/wb_mcu_fw_updater/update_monitor.py", line 220, in check_device_is_a_wb_one
    sn = modbus_connection.get_serial_number()  # Will raise NoResponseError, if disconnected
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 623, in get_serial_number
    device_signature = str(self.get_device_signature())
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 716, in get_device_signature
    return self.read_string(self.COMMON_REGS_MAP["device_signature"], self.DEVICE_SIGNATURE_LENGTH)
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 42, in wrapper
    return f(self, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 69, in wrapper
    raise thrown_exc
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 63, in wrapper
    return f(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 497, in read_string
    ret = minimalmodbus._hexlify(self.device.read_string(addr, regs_lenght, 3))
  File "/usr/lib/python3/dist-packages/wb_modbus/minimalmodbus.py", line 743, in read_string
    return self._generic_command(
  File "/usr/lib/python3/dist-packages/wb_modbus/minimalmodbus.py", line 1139, in _generic_command
    payload_from_slave = self._perform_command(functioncode, payload_to_slave)
  File "/usr/lib/python3/dist-packages/wb_modbus/minimalmodbus.py", line 1206, in _perform_command
    payload_from_slave = _extract_payload(response, self.address, self.mode, functioncode)
  File "/usr/lib/python3/dist-packages/wb_modbus/minimalmodbus.py", line 1688, in _extract_payload
    raise InvalidResponseError(text)
wb_modbus.minimalmodbus.InvalidResponseError: Checksum error in rtu mode: "%'" instead of '_¯' . The response is: "'\x03\x0cK±\x08\x00\x00\x80\x00\x01\x01\x06\x00\x00%'" (plain response: "'\x03\x0cK±\x08\x00\x00\x80\x00\x01\x01\x06\x00\x00%'")
root@wirenboard-ACQNKJVT:~# wb-mcu-fw-updater recover /dev/ttyRS485-2 -a39
2024-03-06 12:24:11,971 Will find bootloader port settings for (/dev/ttyRS485-2 : 39; response_timeout: 0.20)...
2024-03-06 12:25:01,800 Device (39 /dev/ttyRS485-2) is not in bootloader mode! Check connection or slaveid/port

При сканировании модбас-устройств выводится вот такая картина…

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

Попытка прошить файлом прошивки - тоже безуспешна:

root@wirenboard-ACQNKJVT:/tmp# wb-mcu-fw-flasher -j -d /dev/ttyRS485-2 -a 39 -f ./mrps6G__1.21.1_master_ebe20ba.wbfw
/dev/ttyRS485-2 opened successfully.
Send jump to bootloader command and wait 2 seconds...
Error: Connection timed out.
May be device already in bootloader, check status led
./mrps6G__1.21.1_master_ebe20ba.wbfw opened successfully, size 23288 bytes

Sending info block...
Error while sending info block: Connection timed out

Error while sending info block: Connection timed out

Error while sending info block: Connection timed out
Error while sending info block.
Check connection, jump to bootloader and try again.
root@wirenboard-ACQNKJVT:

при этом, модуль 39 (который тоже в статусе “Ошибка”) - управляется, можно пощелкать релюхой.

А вот другой модуль, с адресом 83, (статус без ошибки) - не управляется.

39 модуль (тот, что в статусе “ошибка”, но релюхами щелкал) - подключил к WB7 на стабильном релизе. Смог поправить ему скорость на 9600 и прошить файлом прошивки версии 1.20.2 - модуль после этого “ожил”, при сканировании уже адекватно показывает название модуля и его номер прошивки. Вернул его в основную систему - он заработал нормально.

А вот устройства с адресами 83 и 87 так оживить не удалось. Скорость обмена поменять на 9600 удается (видно в результатах сканирования), но вот прошивку залить не удается.

root@wirenboard-A3PMMDG4:/tmp# wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 87 -f ./mrps6G__1.20.2_master_83b2af3.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, check status led
./mrps6G__1.20.2_master_83b2af3.wbfw opened successfully, size 21248 bytes

Sending info block...
Error while sending info block: Illegal data address
Not in bootloader mode? Try repeating with -j
root@wirenboard-A3PMMDG4:

Двум модулям откатил версию прошивки на 1.20.2

Картина вот такая:

Эти модули уже правильно отображают свое название и версию прошивки. Два других - в странном коматозе. Вроде как есть (сканируются же), но не управляются (реле не щелкают), криво выводятся в результатах сканирования и не прошиваются.

Используете flasher не останавливая wb-mqtt-serial?

Останавливаю, конечно

Сделал попытку прошить бутлоадер - тоже безрезультатно:

root@wirenboard-A3PMMDG4:/tmp# wb-mcu-fw-updater update-bl -a 87 /dev/ttyRS485-1
2024-03-06 12:57:04,610 Will find serial port settings for (/dev/ttyRS485-1 : 87; response_timeout: 0.20)...
2024-03-06 12:57:53,344 Will find bootloader port settings for (/dev/ttyRS485-1 : 87; response_timeout: 0.20)...
2024-03-06 12:58:00,900 Has found bootloader port settings: {'baudrate': 9600, 'parity': 'N', 'stopbits': 2}
2024-03-06 12:58:00,904 Device (/dev/ttyRS485-1 87; response_timeout: 0.20s) supposed to be alive, but found in bootloader
2024-03-06 12:58:01,442 Will flash bootloader v:latest to bring mrps6G (/dev/ttyRS485-1 87; response_timeout: 0.20s) alive
2024-03-06 12:58:01,763 Flashing /var/lib/wb-mcu-fw-updater/bootloader/wb-bootloader-updater_mrps6G__1.4.0_master_c654e11.wbfw
2024-03-06 12:58:32,348 Flashing bootloader to (/dev/ttyRS485-1 87; response_timeout: 0.20s) has failed!
2024-03-06 12:58:32,349 
root@wirenboard-A3PMMDG4:

А при использовании именно wb-mcu-flasher, вот так: Сервисная утилита wb-mcu-fw-flasher — Wiren Board
какой результат? Пробую:

systemctl stop wb-mqtt-serial
root@wirenboard-AWWCDXFH:~# wget https://fw-releases.wirenboard.com/fw/by-signature/mr6cpG/main/1.21.1.wbfw
--2024-03-06 14:38:55--  https://fw-releases.wirenboard.com/fw/by-signature/mr6cpG/main/1.21.1.wbfw
Resolving fw-releases.wirenboard.com (fw-releases.wirenboard.com)... 108.157.229.17, 108.157.229.69, 108.157.229.55, ...
Connecting to fw-releases.wirenboard.com (fw-releases.wirenboard.com)|108.157.229.17|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 29272 (29K) [application/octet-stream]
Saving to: ‘1.21.1.wbfw’

1.21.1.wbfw                                                                           100%[=======================================================================================================================================================================================================================>]  28.59K  --.-KB/s    in 0.05s   

2024-03-06 14:38:56 (618 KB/s) - ‘1.21.1.wbfw’ saved [29272/29272]

wget https://fw-releases.wirenboard.com/bootloader/by-signature/mr6cpG/main/1.4.0.wbfw
--2024-03-06 14:50:24--  https://fw-releases.wirenboard.com/bootloader/by-signature/mr6cpG/main/1.4.0.wbfw
Resolving fw-releases.wirenboard.com (fw-releases.wirenboard.com)... 108.157.229.27, 108.157.229.55, 108.157.229.17, ...
Connecting to fw-releases.wirenboard.com (fw-releases.wirenboard.com)|108.157.229.27|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4928 (4.8K) [application/octet-stream]
Saving to: ‘1.4.0.wbfw’

1.4.0.wbfw                                                                            100%[=======================================================================================================================================================================================================================>]   4.81K  --.-KB/s    in 0s      

2024-03-06 14:50:24 (21.1 MB/s) - ‘1.4.0.wbfw’ saved [4928/4928]


Важно! Перезапускаю модуль в режим обновления прошивки на скорости 9600, так как bootloader старый ну и прошиваю новый:

modbus_client --debug -mrtu -pnone -s2 -b115200 /dev/ttyRS485-1 -a93 -t0x6 -r129 1
Data to write: 0x1
Opening /dev/ttyRS485-1 at 115200 bauds (N, 8, 2)
[5D][06][00][81][00][01][14][BE]
Waiting for a confirmation...
<5D><06><00><81><00><01><14><BE>
SUCCESS: written 1 elements!

 wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 93 -f ./1.4.0.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, check status led
./1.4.0.wbfw opened successfully, size 4928 bytes

Sending info block... OK

Sending data block 36 of 36... OK.

All done!

Загружаю прошивку:

wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a 93 -f ./1.21.1.wbfw
/dev/ttyRS485-1 opened successfully.
./1.21.1.wbfw opened successfully, size 29272 bytes

Sending info block... OK

Sending data block 215 of 215... OK.

All done!

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

Круто. Но:

root@wirenboard-A3PMMDG4:~# modbus_client --debug -mrtu -pnone -s2 -b115200 /dev/ttyRS485-1 -a87 -t0x6 -r129 1
Data to write: 0x1
Opening /dev/ttyRS485-1 at 115200 bauds (N, 8, 2)
[57][06][00][81][00][01][14][14]
Waiting for a confirmation...
ERROR Connection timed out: select
ERROR occured!
root@wirenboard-A3PMMDG4:~# modbus_client --debug -mrtu -pnone -s2 -b9600 /dev/ttyRS485-1 -a87 -t0x6 -r129 1
Data to write: 0x1
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[57][06][00][81][00][01][14][14]
Waiting for a confirmation...
ERROR Connection timed out: select
ERROR occured!
root@wirenboard-A3PMMDG4:~# wb-mcu-fw-flasher -j -d /dev/ttyRS485-1 -a 87 -f ./1.4.0.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, check status led
./1.4.0.wbfw opened successfully, size 4928 bytes

Sending info block...
Error while sending info block: Illegal data address
Not in bootloader mode? Try repeating with -j
root@wirenboard-A3PMMDG4:~# 

При этом модуль я перевел предварительно на 9600, что видно при сканировании:

Но что-то при обновлении у него основательно поломалось.

Прочитайте из устройства сигнатуру. Если читается на 9600 - оно уже в bootloader и переводить не надо.

root@wirenboard-A3PMMDG4:~# systemctl stop wb-mqtt-serial
root@wirenboard-A3PMMDG4:~# echo -e $(modbus_client -mrtu -pnone -s2 -b9600 /dev/ttyRS485-1 -a 87 -t3 -r 290 -c 12 | grep Data | sed -e 's/.*Data://' -e 's/ 0x00/\\x/g')
mrps6G
root@wirenboard-A3PMMDG4:~# 

Сигнатура прочиталась.

Но прошивка не идет:

root@wirenboard-A3PMMDG4:~# wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a 87 -f ./1.21.1.wbfw
/dev/ttyRS485-1 opened successfully.
./1.21.1.wbfw opened successfully, size 29272 bytes

Sending info block...
Error while sending info block: Illegal data address
Not in bootloader mode? Try repeating with -j
root@wirenboard-A3PMMDG4:~# 

Попробовал вот так:

root@wirenboard-A3PMMDG4:~# wb-mcu-fw-updater update-bl --force -a 87 /dev/ttyRS485-1
2024-03-07 06:42:33,602 Will find serial port settings for (/dev/ttyRS485-1 : 87; response_timeout: 0.20)...
2024-03-07 06:43:22,361 Will find bootloader port settings for (/dev/ttyRS485-1 : 87; response_timeout: 0.20)...
2024-03-07 06:43:29,922 Has found bootloader port settings: {'baudrate': 9600, 'parity': 'N', 'stopbits': 2}
2024-03-07 06:43:29,923 Device (/dev/ttyRS485-1 87; response_timeout: 0.20s) supposed to be alive, but found in bootloader
2024-03-07 06:43:30,467 Will flash bootloader v:latest to bring mrps6G (/dev/ttyRS485-1 87; response_timeout: 0.20s) alive
2024-03-07 06:43:30,758 Flashing /var/lib/wb-mcu-fw-updater/bootloader/wb-bootloader-updater_mrps6G__1.4.0_master_c654e11.wbfw
2024-03-07 06:44:01,341 Flashing bootloader to (/dev/ttyRS485-1 87; response_timeout: 0.20s) has failed!
2024-03-07 06:44:01,342 
root@wirenboard-A3PMMDG4:~# 

Как видно, тоже безуспешно :frowning: хотя контроллер считает модуль alive

Прошивка скачивалась из S3 Bucket Listing Generator ?

Первично - вообще не знаю откуда (wb-mcu-fw-updater update-all)

Потом - да, именно оттуда, по полученной сигнатуре.

Интересно… А есть возможность доступ к контроллеру получить?

Да, запросто

Каким образом проще всего организовать? К котроллеру WB7 сейчас подключен только один “проблемный” модуль с адресом 87

Оптимально - ssh. Можно через облако, приглашение отправьте.

Облака нет - тестовая железка на стабилке. SSH “проковырял”, как передать данные для подключения?

В личное сообщение, прямо тут же.

Сделал. Подтвердите, что доступ есть?