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

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

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

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

14.1.1.5.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.5.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.5.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.5.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 для её восстановления.