14.1.1.5. Khôi phục bootloader

Một lần cập nhật firmware thông thường không bao giờ chạm đến bootloader, vì vậy một bản cập nhật firmware bị gián đoạn hầu như luôn có thể khôi phục được: chạy lại cùng lệnh flashing từ Nạp firmware (dfu-util -w chờ thiết bị) hoặc chạy lại Load Custom Firmware khi camera vẫn đang ở trong bootloader của nó. Trang này đề cập đến trường hợp hiếm gặp hơn khi chính bootloader bị hỏng và camera không còn liệt kê là thiết bị DFU khi khởi động lại.

Bootloader nằm trong một vùng flash riêng biệt so với firmware và hệ thống tệp, và mọi camera có thương hiệu OpenMV đều có con đường quay lại qua phần cứng, vì vậy rất khó để khiến một camera không thể khôi phục vĩnh viễn. Các bo mạch Arduino là ngoại lệ duy nhất -- bootloader của chúng cố định và không thể khôi phục bởi người dùng.

OpenMV IDE tự động hóa tất cả các quy trình khôi phục này, hướng dẫn bạn qua các bước phần cứng (jumper, công tắc, nút) trong suốt quá trình. Các phần dưới đây ghi lại những gì nó thực hiện cho từng dòng camera, dành cho khi bạn muốn tự chạy quá trình khôi phục.

14.1.1.5.1. Camera STM32 (jumper BOOT--RST)

Đối với các camera OpenMV STM32 (M4, M7, H7, H7 Plus, Pure Thermal):

  1. Ngắt kết nối camera.

  2. Kết nối một dây jumper giữa chân BOOT và chân RST.

  3. Kết nối lại. Camera hiện liệt kê là thiết bị ST system DFU (0483:df11), độc lập với firmware bị hỏng.

  4. Flash lại chỉ bootloader -- OpenMV IDE Load Custom Firmware với bootloader.bin, hoặc:

    dfu-util -w -d ,0483:df11 -a 0 -s 0x08000000 -D bootloader.bin
    
  5. Tháo jumper và kết nối lại.

  6. Flash firmware bình thường (xem Nạp firmware).

14.1.1.5.2. OpenMV Cam N6 (jumper BOOT--VCC)

  1. Ngắt kết nối camera.

  2. Kết nối một dây jumper giữa chân BOOT và chân VCC.

  3. Kết nối lại. Camera hiện liệt kê là thiết bị ST system DFU (0483:df11), độc lập với bootloader bị hỏng.

  4. Flash lại bằng STM32CubeProgrammer (được bao gồm trong OpenMV SDK), sử dụng bộ mô tả bố cục flash được cung cấp cùng với bootloader.bin -- nó ghi lại bootloader giai đoạn đầu, trình tải flash ngoài, và bootloader:

    STM32_Programmer_CLI -c port=USB1 -d OPENMV_N6/FlashLayout.tsv
    
  5. Tháo jumper và kết nối lại.

  6. Flash firmware bình thường (xem Nạp firmware).

14.1.1.5.3. OpenMV Cam RT1062

Việc tạo lại secure bootloader của RT1062 yêu cầu vào chế độ serial-download (SDP) ROM của chip bằng jumper, nạp một flashloader RAM, sau đó ghi lại khối cấu hình flash, SBL và firmware. Quy trình thủ công:

  1. Ngắt kết nối camera, cắm jumper vào chân SBL3.3V, rồi kết nối lại. Chip liệt kê ở chế độ SDP ROM (0x1FC9:0x0135).

  2. Nạp và khởi động flashloader RAM:

    sdphost -u 0x1FC9,0x0135 -- write-file 0x20001C00 sdphost_flash_loader.bin
    sdphost -u 0x1FC9,0x0135 -- jump-address 0x20001C00
    
  3. Camera hiện trả lời là flashloader (0x15A2:0x0073). Cấu hình flash ngoài, ghi khối cấu hình flash, sau đó ghi 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. Ghi firmware và đặt fuse nguồn khởi động để chip khởi động SBL mới từ flash ngoài:

    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. Tháo jumper và chu kỳ nguồn của camera.

Cảnh báo

efuse-program-once 0x06 00000010 là một thao tác ghi fuse một lần, không thể đảo ngược đặt thiết bị khởi động từ flash ngoài. Đây là lý do thêm để để OpenMV IDE thực hiện khôi phục bootloader RT1062 thay vì chạy trình tự thủ công.

14.1.1.5.4. OpenMV AE3

Secure bootloader của AE3 không được khôi phục qua USB DFU. Nó được ghi lại vào MRAM của chip bằng SE Tools của Alif Semiconductor (được tích hợp với OpenMV IDE) qua kết nối serial ISP. Đây là quy trình tương tác, chỉ dành cho khôi phục -- không phải phương pháp flashing thông thường -- và dễ xảy ra lỗi khi thực hiện thủ công; trong tất cả mọi thứ trên trang này, đây là điều nên để OpenMV IDE thực hiện.

Kết nối. SE Tools giao tiếp với AE3 qua cổng serial ISP của bộ điều hợp debug -- giao diện FTDI 0403:6015 hoặc CH340 1A86:55D3, cùng với J-Link. Khôi phục yêu cầu đặt thiết bị vào chế độ khôi phục: bật công tắc khôi phục trên bo mạch.

SE Tools. OpenMV IDE đóng gói các tệp thực thi Alif này. Chúng dùng chung hai tệp cấu hình -- isp_config_data.cfgglobal-cfg.db -- được tạo bởi maintenance khi kết nối lần đầu:

Công cụ

Mục đích

maintenance

Truy vấn Secure Enclave (maintenance -opt sesbanner đọc phiên bản của nó) và đặt thiết bị vào chế độ khôi phục.

updateSystemPackage

Cập nhật gói hệ thống Secure Enclave khi nó cũ hơn phiên bản mà firmware yêu cầu.

app-gen-toc

Tạo ảnh bảng mục lục (TOC) (được sử dụng để ghi chỉ ứng dụng).

app-write-mram

Ghi ảnh vào MRAM -- bước khôi phục bootloader.

Quy trình:

  1. Kết nối với AE3 bằng maintenance; nó nhắc bạn nhập cổng serial và loại thiết bị, tạo ra isp_config_data.cfgglobal-cfg.db cho các công cụ khác.

  2. Nếu gói hệ thống Secure Enclave lỗi thời, updateSystemPackage cập nhật nó; chu kỳ nguồn khi được nhắc.

  3. app-write-mram -i "bootloader.bin 0x80000000 firmware_pad.toc 0x8057E000" ghi bootloader và TOC vào MRAM.

  4. AE3 liệt kê lại là thiết bị DFU 37C5:96E3. Chạy lần flash bốn ảnh thông thường từ OpenMV AE3: dfu-util để tải ứng dụng.

  5. Chu kỳ nguồn camera và tắt công tắc khôi phục.

Ghi chú

OpenMV IDE xử lý nhiều hơn là chỉ con đường thành công này -- firmware Secure Enclave bị hỏng, bootloader xấu, và các trạng thái lỗi khác đều cần các bước khôi phục riêng, và nhiều thứ có thể xảy ra lỗi trong quá trình đó. Nếu các bước thủ công ở trên không đưa camera trở lại hoạt động, hãy sử dụng OpenMV IDE để khôi phục nó.