14.1.1.6. Восстановление загрузчика#

Обычная прошивка прошивки никогда не затрагивает загрузчик, поэтому прерванное обновление прошивки почти всегда поддаётся восстановлению: повторно запустите ту же команду прошивки из Прошивка firmware (dfu-util -w ожидает появления устройства) или снова выполните Load Custom Firmware, пока камера всё ещё находится в загрузчике. На этой странице рассматривается более редкий случай, когда повреждён сам загрузчик и камера больше не определяется как DFU-устройство при сбросе.

Загрузчик располагается в отдельной области флеш-памяти, отдельной от прошивки и файловой системы, и каждая камера под маркой OpenMV имеет аппаратный путь восстановления, поэтому привести камеру в безвозвратно неработоспособное состояние сложно. Платы Arduino – единственное исключение: их загрузчики фиксированы и не подлежат восстановлению пользователем.

OpenMV IDE автоматизирует все эти процедуры восстановления, направляя вас по аппаратным шагам (перемычки, переключатели, кнопки) по ходу дела. В разделах ниже описано, что она делает для каждого семейства камер, на случай, если вы захотите выполнить восстановление самостоятельно.

14.1.1.6.1. Камеры STM32 (перемычка BOOT–RST)#

Для камер OpenMV на STM32 (M4, M7, H7, H7 Plus, Pure Thermal):

  1. Отключите камеру.

  2. Соедините перемычкой выводы BOOT и RST.

  3. Подключите камеру заново. Теперь она определяется как системное DFU-устройство ST (0483:df11), независимо от повреждённой прошивки.

  4. Перепрошейте только загрузчик – через OpenMV IDE Load Custom Firmware с bootloader.bin, либо:

    dfu-util -w -d ,0483:df11 -a 0 -s 0x08000000 -D bootloader.bin
    
  5. Снимите перемычку и подключите камеру заново.

  6. Прошейте прошивку обычным образом (см. Прошивка firmware).

14.1.1.6.2. OpenMV Cam N6 (перемычка BOOT–VCC)#

  1. Отключите камеру.

  2. Соедините перемычкой выводы BOOT и VCC.

  3. Подключите камеру заново. Теперь она определяется как системное DFU-устройство ST (0483:df11), независимо от повреждённого загрузчика.

  4. Перепрошейте с помощью STM32CubeProgrammer (входит в состав OpenMV SDK), используя дескриптор разметки флеш-памяти, поставляемый вместе с bootloader.bin – он перезаписывает загрузчик первого этапа, загрузчик внешней флеш-памяти и сам загрузчик:

    STM32_Programmer_CLI -c port=USB1 -d OPENMV_N6/FlashLayout.tsv
    
  5. Снимите перемычку и подключите камеру заново.

  6. Прошейте прошивку обычным образом (см. Прошивка firmware).

14.1.1.6.3. OpenMV Cam RT1062#

Восстановление защищённого загрузчика RT1062 требует перевода чипа в режим последовательной загрузки из ROM (SDP) с помощью перемычки, размещения RAM-флешлоадера, а затем перезаписи блока конфигурации флеш-памяти, SBL и прошивки. Ручная последовательность действий:

  1. Отключите камеру, соедините перемычкой выводы SBL и 3.3V и подключите её заново. Чип определяется в режиме SDP ROM (0x1FC9:0x0135).

  2. Разместите и запустите RAM-флешлоадер:

    sdphost -u 0x1FC9,0x0135 -- write-file 0x20001C00 sdphost_flash_loader.bin
    sdphost -u 0x1FC9,0x0135 -- jump-address 0x20001C00
    
  3. Теперь камера отвечает как флешлоадер (0x15A2:0x0073). Настройте внешнюю флеш-память, запишите блок конфигурации флеш-памяти, затем запишите SBL:

    blhost -u 0x15A2,0x0073 -- fill-memory 0x2000 4 0xC0000008 word
    blhost -u 0x15A2,0x0073 -- configure-memory 9 0x2000
    blhost -u 0x15A2,0x0073 -t 120000 -- flash-erase-region 0x60000000 0x1000
    blhost -u 0x15A2,0x0073 -- fill-memory 0x2000 4 0xF000000F word
    blhost -u 0x15A2,0x0073 -- configure-memory 9 0x2000
    blhost -u 0x15A2,0x0073 -t 120000 -- flash-erase-region 0x60001000 <sbl_size>
    blhost -u 0x15A2,0x0073 -- write-memory 0x60001000 blhost_flash_loader.bin
    
  4. Запишите прошивку и установите fuse источника загрузки, чтобы чип загружал новый SBL из внешней флеш-памяти:

    blhost -u 0x15A2,0x0073 -t 120000 -- flash-erase-region 0x60040000 <firmware_size>
    blhost -u 0x15A2,0x0073 -- write-memory 0x60040000 firmware.bin
    blhost -u 0x15A2,0x0073 -- efuse-program-once 0x06 00000010
    blhost -u 0x15A2,0x0073 -- reset
    
  5. Снимите перемычку и перезапустите питание камеры.

Предупреждение

efuse-program-once 0x06 00000010 – это однократная, необратимая запись fuse, которая настраивает устройство на загрузку из внешней флеш-памяти. Это ещё одна причина доверить восстановление загрузчика RT1062 программе OpenMV IDE, а не выполнять последовательность вручную.

14.1.1.6.4. OpenMV AE3#

Защищённый загрузчик AE3 не восстанавливается через USB DFU. Он перезаписывается в MRAM чипа с помощью SE Tools от Alif Semiconductor (поставляемых вместе с OpenMV IDE) по последовательному соединению ISP. Это интерактивная процедура, предназначенная только для восстановления – не штатный метод прошивки – и она подвержена ошибкам при ручном выполнении; из всего на этой странице именно её стоит доверить OpenMV IDE.

Подключение. SE Tools взаимодействуют с AE3 через последовательный порт ISP его отладочного адаптера – интерфейс FTDI 0403:6015 или CH340 1A86:55D3, совместно с J-Link. Для восстановления требуется перевести устройство в режим восстановления: включите встроенный переключатель восстановления.

SE Tools. OpenMV IDE включает эти исполняемые файлы Alif. Они используют два общих файла конфигурации – isp_config_data.cfg и global-cfg.db – создаваемые maintenance при первом подключении:

Инструмент

Назначение

maintenance

Запрос Secure Enclave (maintenance -opt sesbanner считывает его версию) и перевод устройства в режим восстановления.

updateSystemPackage

Обновление системного пакета Secure Enclave, когда он старше версии, требуемой прошивкой.

app-gen-toc

Генерация образа оглавления (TOC) (используется для записи только приложения).

app-write-mram

Запись образа(ов) в MRAM – шаг, который восстанавливает загрузчик.

Процедура:

  1. Подключитесь к AE3 с помощью maintenance; он запрашивает последовательный порт и тип устройства, создавая isp_config_data.cfg и global-cfg.db для остальных инструментов.

  2. Если системный пакет Secure Enclave устарел, updateSystemPackage обновляет его; перезапустите питание по запросу.

  3. app-write-mram -i "bootloader.bin 0x80000000 firmware_pad.toc 0x8057E000" записывает загрузчик и TOC в MRAM.

  4. AE3 повторно определяется как DFU-устройство 37C5:96E3. Выполните обычную прошивку четырёх образов из OpenMV AE3: dfu-util, чтобы загрузить приложение.

  5. Перезапустите питание камеры и снова выключите переключатель восстановления.

Примечание

OpenMV IDE справляется с гораздо большим, чем этот безоблачный сценарий – повреждённая прошивка Secure Enclave, неисправный загрузчик и другие состояния отказа требуют собственных шагов восстановления, и многое может пойти не так по ходу дела. Если приведённые выше ручные шаги не возвращают камеру к жизни, используйте OpenMV IDE для её восстановления.