В этот раз я снова умышленно испортил прошивку на принтере NIIMBOT B1 Pro чтобы проверить, как его можно восстановить.
⚠️ Это руководство предназначено для аппаратной версии B1 Pro
2.01. Для других версий последовательность действий и файлы могут отличаться.
Нам понадобятся только USB-UART адаптер и sftool.
В этом руководстве используется USB-UART адаптер CH340, однако должен подойти любой адаптер с логическими уровнями 3,3 В.
Не используйте адаптеры с логическими уровнями 5 В, они могут повредить принтер.
Известно, что адаптеры на базе CP2102 тоже работают, но для поддержки скорости 1000000 их потребуется настроить с помощью специальной утилиты (CP21xx customization utility).
Все действия будут выполняться на компьютере под Windows, однако на Linux и macOS тоже должно получиться.
Ниже приведена карта памяти прошивки B1 Pro с соответствующими файлами, считанными с исправного принтера.
| Название блока | Адреса | Размер (десятичный / шестнадцатеричный) | Файл |
|---|---|---|---|
| Загрузчик (Bootloader) | 0x10000000 - 0x10008FFF | 36864 (0x9000) | bootloader_bl2_0x10000000-0x10008FFF.bin |
| Приложение (записывается в процессе обновления) | 0x10009000 - 0x10088FFF | 520192 (0x7F000) | app_0x10009000-0x10088FFF.bin (версия 2.18) |
| Заводские данные (серийный номер и прочее) | 0x100FE000 - 0x100FE107 | 264 (0x108) | factory_data_sector_0x100FE000-0x100FEFFF.bin |
| Настройки | 0x100FF000 - 0x100FF253 | 596 (0x254) | settings_sector_0x100FF000-0x100FFFFF.bin |
Полный дамп: MPI1_0x10000000_0x100000.bin (адрес во флеш-памяти 0x10000000).
Разберите принтер. Для этого нужно выкрутить два винта Torx под крышкой.
Две половинки корпуса соединены защёлками, причём держат они довольно крепко.
Чтобы разъединить корпус, придётся приложить некоторое усилие. Разделить половинки можно с помощью пластиковой карты.
Отсоедините все разъёмы от основной платы.
Выкрутите винты, которыми плата крепится к корпусу, и осторожно переверните её.
Будьте осторожны с проводами RFID-антенны и шлейфом печатной головки.
Можно также нагреть клей на разъёме шлейфа и отсоединить от него шлейф. Так будет проще добраться до пинов UART.
Припаяйте провода к пинам UART с нижней стороны платы.
Если на шаге 3 вы отсоединяли шлейф печатающей головки, подключите его обратно.
Установите плату на прежнее место и подключите все разъёмы, кроме аккумулятора.
Если вы собираетесь оставить припаянные провода внутри принтера, плату можно закрепить винтами.
Подключите провода RX, TX и GND к USB-UART-адаптеру. Внимательно к подключению: TX к RX, RX к TX, GND к GND.
Подключите аккумулятор.
Подключите адаптер к компьютеру.
Расположите принтер так, чтобы можно было нажать кнопку питания.
Сначала нужно стереть область приложения и область настроек.
Область приложения очищается на всякий случай, а область настроек необходимо очистить, чтобы сбросить флаг OTA-обновления.
Откройте командную строку и введите следующую команду, но пока не запускайте её:
sftool -c SF32LB52 -p COM8 -b 115200 erase_region 0x10009000:0x7F000 0x100FF000:0x254Замените COM8 на номер COM-порта, соответствующего вашему USB-UART адаптеру.
При стандартной скорости передачи (100000) у меня иногда возникали ошибки, поэтому я установил значение 115200, и всё заработало нормально.
Удерживая кнопку питания, нажмите Enter, чтобы выполнить команду. Не отпускайте кнопку питания, пока процесс не завершится.
Теперь можно записать прошивку в область приложения. Введите следующую команду, но пока не запускайте её:
sftool -c SF32LB52 -p COM8 -b 115200 write_flash 02_app_0x10009000-0x10088FFF.bin@0x10009000Замените путь к файлу (02_app_0x10009000-0x10088FFF.bin) на правильный путь к файлу приложения. Ссылка на файл находится в разделе «Карта памяти».
Не удаляйте часть @0x10009000: она важна. Это не часть пути к файлу, а указание инструменту, по какому адресу памяти принтера нужно записать файл.
Удерживая кнопку питания, нажмите Enter, чтобы выполнить команду. Не отпускайте кнопку питания, пока процесс не завершится.
Принтер должен воспроизвести звук включения, а светодиод должен загореться. Ура, принтер успешно восстановлен!
Если повреждены и другие области памяти, можно также переписать и другие области. Для этого используйте ту же команду, что и на шаге 9, но укажите другие файлы и адреса.
Будьте осторожны: запись в область заводских данных перезапишет серийный номер принтера и другие уникальные параметры.
Большое спасибо пользователю mode01, который первым обнаружил способ прошивки и поделился им.
Полезные ссылки:
Ещё одно руководство по восстановлению от gcrts: https://github.com/gcrts/b1pro-unbrick