OpenMV Cam H7 Plus

OpenMV Cam H7 Plus จับคู่ STMicroelectronics STM32H743 (Cortex‑M7 @ 480 MHz) กับ SDRAM ภายนอก 32 MB, แฟลช QSPI 32 MB, ตัวเข้ารหัส JPEG แบบฮาร์ดแวร์ และโมดูลกล้อง OV5640 5MP บนแผงรองรับแบบถอดได้ หน่วยความจำพิเศษนี้เหมาะสำหรับการบันทึกภาพความละเอียดสูงและบัฟเฟอร์เฟรมขนาดใหญ่

OpenMV Cam H7 Plus

สำหรับข้อมูลจำเพาะฉบับเต็ม รูปภาพ และขนาด ดูได้ที่ หน้าผลิตภัณฑ์ OpenMV Cam H7 Plus

ไฮไลท์

  • STMicroelectronics STM32H743 Cortex‑M7 ที่ 480 MHz (1027 DMIPS)

  • ตัวเข้ารหัส/ถอดรหัส JPEG แบบฮาร์ดแวร์

  • SDRAM ภายนอก 32 MB (32‑bit @ 100 MHz, 400 MB/s) พร้อม SRAM ภายใน 1 MB

  • แฟลชภายใน 2 MB + แฟลช QSPI ภายนอก 32 MB (~100 MB/s อ่าน)

  • เซนเซอร์ rolling‑shutter OV5640 5MP

  • USB Full‑Speed (12 Mb/s) — ปรากฏเป็น VCP + USB mass storage ต่อโฮสต์

  • ซ็อกเก็ต microSD — SD สูงสุด 2 GB, SDHC สูงสุด 32 GB, SDXC สูงสุด 2 TB

  • ขั้วต่อแบตเตอรี่ LiPo (ไม่มีตัวชาร์จในตัว — จ่ายไฟด้วยเซลล์ที่ชาร์จแล้ว หรือใช้ VIN/USB)

  • พิน I/O 10 พิน, ทนทาน 5 V พร้อมเอาต์พุต 3.3 V, 25 mA ต่อพิน (รวม 120 mA ตลอดเฮดเดอร์), รองรับอินเทอร์รัปต์ P6 ไม่ ทนทาน 5 V เมื่อใช้ในโหมด ADC หรือ DAC

  • LED RGB สำหรับผู้ใช้ และ IR LED กำลังสูง 850 nm สองดวง สำหรับแสงเสริมในการมองเห็นแสงน้อย

Note

H7 Plus ไม่มีชิปจัดการพลังงานในตัว: ไม่มีตัวชาร์จแบตเตอรี่, ไม่มี ADC วัดแรงดันแบตเตอรี่, ไม่มี LED แสดงสถานะการชาร์จ/พลังงาน และไม่มีปุ่มเปิด/ปิดฮาร์ดแวร์ เชื่อมต่อ LiPo ที่ชาร์จแล้วเข้ากับ JST แบตเตอรี่ หรือจ่ายไฟบอร์ดจาก USB / VIN

พินเอาต์

OpenMV Cam H7 Plus OV5640 Pinout

ตารางอ้างอิงพิน

ชื่อพิน

ฟังก์ชัน

P0

UART1 RX / SPI2 MOSI

P1

UART1 TX / SPI2 MISO

P2

SPI2 SCK / FDCAN2 TX

P3

SPI2 NSS (CS) / FDCAN2 RX

P4

I2C2 SCL / UART3 TX / TIM2 CH3

P5

I2C2 SDA / UART3 RX / TIM2 CH4

P6

ADC / DAC / TIM2 CH1

P7

I2C4 SCL / TIM4 CH1

P8

I2C4 SDA / TIM4 CH2

P9

digital I/O

RESET

ดึงลง GND เพื่อรีเซ็ตบอร์ด

SYN

แพด frame‑sync — เชื่อมต่อเฉพาะกับเซนเซอร์กล้อง

BOOT0

ดึงขึ้น 3.3 V ตอนเปิดเครื่องเพื่อเข้า DFU / ROM บูตโหลดเดอร์

LED_RED

ช่องสีแดงของ RGB LED (active low)

LED_GREEN

ช่องสีเขียวของ RGB LED (active low)

LED_BLUE

ช่องสีน้ำเงินของ RGB LED (active low)

LED_IR

IR LED กำลังสูง (ทั้งสองช่องขับพร้อมกัน)

Note

แพด SYN บนเฮดเดอร์เชื่อมต่อโดยตรงกับสายทริกเกอร์/การรับแสงของเซนเซอร์กล้อง — ไม่ได้ เชื่อมต่อกับ MCU บน H7 Plus ขับหรืออ่านจากภายนอกได้ แต่ไม่สามารถสลับสถานะจาก MicroPython ได้

พินจ่ายไฟ

  • 3.3V — ราง 3.3 V ที่ผ่านตัวควบคุมแล้ว มีกระแสสูงสุด 250 mA สำหรับชีลด์ (น้อยกว่านั้นหากใช้การ์ด microSD) ต่างจากกล้องรุ่นใหม่กว่า พินนี้เป็นแบบสองทิศทาง — ดูคำเตือนด้านล่าง

  • VIN — อินพุต 3.6 – 5 V จ่ายไฟให้บอร์ดผ่านตัวควบคุมในตัว

  • GND — กราวด์ร่วม

มีขั้วต่อ LiPo 3.7 V ด้วย แต่ H7 Plus ไม่มีตัวชาร์จแบตเตอรี่ — เชื่อมต่อเซลล์ที่ชาร์จแล้ว หรือจ่ายไฟผ่าน VIN / USB แทน

Note

เมื่อมีทั้ง USB และ VIN/LiPo, อินพุต VIN/LiPo จะชนะ — สวิตช์พลังงานในตัวจะเลือก VIN/LiPo เหนือ USB เพื่อจ่ายไฟให้บอร์ด

Warning

ขั้วต่อแบตเตอรี่และ VIN เชื่อมต่อกัน บน H7 Plus อย่า เสียบ LiPo และจ่าย VIN พร้อมกัน — แหล่งจ่ายทั้งสองจะขัดแย้งกันและอาจทำให้แบตเตอรี่, บอร์ด หรือทั้งสองเสียหาย

Warning

สามารถ จ่ายไฟให้ H7 Plus โดยป้อน 3.3 V โดยตรงเข้าพิน 3.3V หากไม่ต้องการผ่านตัวควบคุมในตัว ในกรณีนั้น อย่าจ่าย VIN หรือไฟ USB พร้อมกัน — การขับย้อนกลับตัวควบคุมขณะที่แหล่งจ่ายอื่นทำงานอยู่อาจทำให้กล้องเสียหายถาวร

Tip

ใช้ เครื่องมือประมาณอายุแบตเตอรี่ เพื่อสร้างแบบจำลองว่า H7 Plus จะทำงานได้นานเท่าใดบนแบตเตอรี่สำหรับรอบการทำงานแบบ active / deep-sleep ที่กำหนด

พินสำหรับกู้คืนและดีบัก

  • RESET — ดึงลง GND เพื่อรีเซ็ตบอร์ด การปล่อยพินจะให้ MCU เริ่มต้นทำงานตามปกติ

  • BOOT0 — ดึงขึ้น 3.3 V ขณะเปิดเครื่องเพื่อเข้า ROM บูตโหลดเดอร์ของ STM32 (โหมด DFU) OpenMV IDE ใช้โหมดนี้ในการเขียนโปรแกรมบูตโหลดเดอร์ในตัวใหม่

บอร์ดมีเฮดเดอร์ดีบัก SWD (RST / SWCLK / SWDIO / SWO) อยู่ข้างเฮดเดอร์ GPIO รองรับ ST‑LINK และ SEGGER J‑Link

Note

พินเทรซ SWO ใช้ร่วมกับสาย SPI clock ของเฮดเดอร์กล้อง SWO ไม่สามารถใช้พร้อมกับโมดูลกล้องที่สื่อสารกับ MCU ผ่าน SPI ได้ เช่น FLIR® Lepton® Adapter Module — ต้องเลือกอย่างใดอย่างหนึ่ง

อุปกรณ์ต่อพ่วงในตัว

LED

H7 Plus มี RGB LED สำหรับผู้ใช้หนึ่งดวง พร้อม IR LED กำลังสูง 850 nm สองดวง:

  • RGB LED สำหรับผู้ใช้ — ควบคุมด้วยซอฟต์แวร์ เปิดเผยในชื่อ LED_RED, LED_GREEN และ LED_BLUE

    from machine import LED
    
    LED("LED_RED").on()
    LED("LED_GREEN").on()
    LED("LED_BLUE").on()
    
  • IR LED — LED ทั้งสองดวงถูกขับพร้อมกันผ่านพิน LED_IR พิน LED_IR ถูกต่อวงจรเป็น active high ในฮาร์ดแวร์ ในขณะที่เฟิร์มแวร์จัดการ LED ในตัวทุกดวงเป็น active low ดังนั้นให้ใช้ low() / high() แทน on() / off() (ซึ่งจะกลับสถานะ):

    from machine import LED
    
    ir = LED("LED_IR")
    ir.low()    # turn IR illumination ON
    ir.high()   # turn IR illumination OFF
    

เซนเซอร์กล้อง

OV5640 ถูกขับเคลื่อนผ่านโมดูล csi --- เซ็นเซอร์กล้อง

import csi

cam = csi.CSI()
cam.reset()
cam.pixformat(csi.RGB565)
cam.framesize(csi.QVGA)
cam.snapshot(time=2000)       # let auto‑exposure settle

while True:
    img = cam.snapshot()

OV5640 มีตัวบีบอัด JPEG ในตัว ตั้งค่า csi.CSI.pixformat เป็น csi.JPEG แล้วเซนเซอร์จะส่งเฟรมที่บีบอัดแล้วไปยังกล้องโดยตรงผ่านบัสกล้อง ทำให้การบันทึกภาพความละเอียดสูงทำได้จริง: csi.HD (1280×720), csi.FHD (1920×1080) และ 5MP เต็ม csi.WQXGA2 (2592×1944) ล้วนสตรีมเป็น JPEG ปรับการบีบอัดด้วย csi.CSI.quality (0-100 ค่าสูง = เฟรมใหญ่, รายละเอียดมากขึ้น):

cam.pixformat(csi.JPEG)
cam.framesize(csi.WQXGA2)
cam.quality(90)

เซนเซอร์อยู่บน โมดูลแบบถอดได้ — สามารถเปลี่ยนเป็นโมดูลกล้อง OpenMV อื่น ๆ (global shutter, ความร้อน, ความละเอียดสูงกว่า ฯลฯ) ได้โดยไม่ต้องเปลี่ยนส่วนอื่นของบอร์ด

Machine learning

ml --- Machine Learning รันโมเดล TFLite แบบ quantised บน Cortex‑M7 ด้วยเคอร์เนล CMSIS‑NN — เร็วพอสำหรับตัวตรวจจับขนาดเล็กที่ไม่กี่เฟรมต่อวินาที โมเดลบนระบบไฟล์ /rom แบบอ่านอย่างเดียวโหลดโดยตรงจากแฟลชโดยไม่ต้องคัดลอกไปยัง RAM นี่คือตัวตรวจจับใบหน้า BlazeFace ขนาด 128×128 ที่ซ้อนทับใบหน้าที่ตรวจพบและจุดสำคัญ 6 จุดบนทุกเฟรม:

import csi
import time
import ml
from ml.postprocessing.mediapipe import BlazeFace

# Initialize the sensor.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))

# Load built-in face detection model
model = ml.Model("/rom/blazeface_front_128.tflite", postprocess=BlazeFace(threshold=0.4))
print(model)

clock = time.clock()
while True:
    clock.tick()
    img = csi0.snapshot()

    # faces is a list of ((x, y, w, h), score, keypoints) tuples
    for r, score, keypoints in model.predict([img]):
        ml.utils.draw_predictions(img, [r], ("face",), ((0, 0, 255),), format=None)

        # keypoints is a ndarray of shape (6, 2)
        # 0 - right eye (x, y)
        # 1 - left eye (x, y)
        # 2 - nose (x, y)
        # 3 - mouth (x, y)
        # 4 - right ear (x, y)
        # 5 - left ear (x, y)
        ml.utils.draw_keypoints(img, keypoints, color=(255, 0, 0))

    print(clock.fps(), "fps")

การ์ด microSD

เมื่อใส่การ์ด ระบบจะเมาท์โดยอัตโนมัติที่ /sdcard และใช้งานได้ผ่านระบบไฟล์ปกติ:

import os

for entry in os.listdir("/sdcard"):
    print(entry)

ตารางอ้างอิงบัส

GPIO

ใช้ machine.Pin เพื่ออ่านหรือขับพินที่มีตัวอักษรพิมพ์นูนบนบอร์ด เอาต์พุตเป็น 3.3 V CMOS, ทนทาน 5 V ด้านอินพุต และสามารถซิงก์/ซอร์ซกระแสได้สูงสุด 25 mA ต่อพิน (120 mA รวมตลอดเฮดเดอร์)

from machine import Pin

out = Pin("P0", Pin.OUT)
out.on()
out.off()
out.value(1)

inp = Pin("P1", Pin.IN, Pin.PULL_UP)
print(inp.value())

พินอินพุตใดก็ได้สามารถเรียกใช้อินเทอร์รัปต์บนขอบสัญญาณได้:

def handler(pin):
    print("triggered:", pin)

Pin("P1", Pin.IN, Pin.PULL_UP).irq(
    handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)

UART

บัส

TX

RX

UART1

P1

P0

UART3

P4

P5

from machine import UART

uart = UART(3, baudrate=115200)
uart.write("hello")
uart.read(5)

I²C

บัส

SCL

SDA

I2C2

P4

P5

I2C4

P7

P8

from machine import I2C

i2c = I2C(2, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")

ฮาร์ดแวร์เดียวกันยังสามารถใช้ในโหมด target (slave) ผ่าน machine.I2CTarget เพื่อเปิดเผยพื้นที่หน่วยความจำให้กับ I²C controller อื่น:

from machine import I2CTarget

buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)

SPI

บัส

MOSI

MISO

SCK

CS

SPI2

P0

P1

P2

P3

from machine import SPI
from machine import Pin

spi = SPI(2, baudrate=10_000_000)
cs = Pin("P3", Pin.OUT, value=1)   # CS is not driven by the SPI peripheral

cs.value(0)
spi.write(b"hello")
cs.value(1)

CAN (FDCAN)

บัส

TX

RX

FDCAN2

P2

P3

from machine import CAN

can = CAN(2, 500_000)
can.set_filters(None)
can.send(0x123, b"\xDE\xAD\xBE\xEF")
print(can.recv())

ADC และ DAC

P6 เป็นพินอนาล็อกสำหรับผู้ใช้เพียงพินเดียว ใช้เป็นอินพุต ADC 12 บิต หรือเอาต์พุต DAC ก็ได้

  • ADC — สเกลเต็มที่ 3.3 V ที่พิน:

    from machine import ADC
    import time
    
    adc = ADC("P6")
    while True:
        voltage = adc.read_u16() * 3.3 / 65535
        print(voltage)
        time.sleep_ms(100)
    
  • DAC — ผ่าน pyb.DAC ค่า 8 บิตครอบคลุม 0–3.3 V:

    from pyb import DAC
    
    dac = DAC("P6")
    voltage = 1.65
    dac.write(int(voltage / 3.3 * 255))
    

ในโหมด ADC หรือ DAC P6 ทนทานเพียง 3.3 V เท่านั้น — อย่าป้อน 5 V

PWM

พิน

ตัวจับเวลา / ช่อง

P4

TIM2 CH3

P5

TIM2 CH4

P6

TIM2 CH1

P7

TIM4 CH1

P8

TIM4 CH2

Note

TIM1 ถูกจองไว้ โดยเฟิร์มแวร์เพื่อสร้าง pixel clock ของเซนเซอร์กล้อง ดังนั้นช่อง TIM1 ที่อยู่บน P0/P1/P2 ทางกายภาพไม่สามารถใช้สำหรับ PWM ของผู้ใช้ได้โดยไม่ทำให้กล้องเสียหาย

TIM4 ใช้ร่วมกับ pyb.Servo — การสร้างอินสแตนซ์เซอร์โวจะกำหนดค่าตัวจับเวลาทั้งหมดใหม่สำหรับการทำงานที่ 50 Hz ดังนั้นอย่าใช้ machine.PWM บน P7/P8 ร่วมกับ pyb.Servo ในสคริปต์เดียวกัน

ขับด้วย machine.PWM ได้ทุกพิน:

from machine import Pin, PWM

pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)

บัสแบบ Software bit‑bang

machine.SoftI2C และ machine.SoftSPI ทำงานบน GPIO ใดก็ได้หากต้องการบัสเพิ่มเติม

เซนเซอร์ความร้อน (ภายนอกบอร์ด)

เฟิร์มแวร์รวมไดรเวอร์ fir --- ไดรเวอร์เซนเซอร์ความร้อน (fir == far infrared) สำหรับเทอร์มอลอิมเมจเจอร์ที่ต่อสายภายนอก:

  • MLX90621 — อาร์เรย์ IR 16 × 4

  • MLX90640 — อาร์เรย์ IR 32 × 24

  • MLX90641 — อาร์เรย์ IR 16 × 12

  • AMG8833 — อาร์เรย์ IR 8 × 8

เชื่อมต่อโมดูลกับบัส I²C ของบอร์ดและอ่านเฟรมด้วย fir.init() + fir.snapshot()

import time
import image
import fir

fir.init()                          # auto‑detects the sensor
clock = time.clock()

while True:
    clock.tick()
    try:
        img = fir.snapshot(x_scale=5, y_scale=5,
                           color_palette=image.PALETTE_IRONBOW,
                           hint=image.BICUBIC,
                           copy_to_fb=True)
    except OSError:
        continue
    print(clock.fps())

ไดรเวอร์ fir สื่อสารกับเซนเซอร์ผ่าน I²C 2 เท่านั้น — เชื่อมต่อโมดูลกับ P4 (SCL) และ P5 (SDA)

การกำหนดเวลา

time

โมดูล time ครอบคลุมการหน่วงเวลาแบบบล็อก, ticks แบบ monotonic และการวัดเวลาที่ผ่านไป:

import time

time.sleep(1)              # seconds
time.sleep_ms(500)
time.sleep_us(10)

start = time.ticks_ms()
# ...do work...
elapsed = time.ticks_diff(time.ticks_ms(), start)

ตัวจับเวลาเสมือน

machine.Timer กำหนดเวลาคอลแบ็กแบบต่อเนื่องหรือครั้งเดียวโดยไม่ใช้สล็อตตัวจับเวลาฮาร์ดแวร์ ส่ง -1 เป็น id เพื่อใช้ตัวจับเวลาเสมือน (ซอฟต์แวร์):

from machine import Timer

one_shot = Timer(-1)
one_shot.init(period=5_000, mode=Timer.ONE_SHOT,
              callback=lambda t: print("once"))

periodic = Timer(-1)
periodic.init(period=2_000, mode=Timer.PERIODIC,
              callback=lambda t: print("tick"))

ค่าคาบเวลาเป็นมิลลิวินาที เรียก deinit() เพื่อหยุดและปล่อยสล็อต

นาฬิกาแบบเรียลไทม์

machine.RTC รักษาเวลานาฬิกาข้ามการรีเซ็ต:

from machine import RTC

rtc = RTC()
rtc.datetime((2026, 4, 30, 4, 12, 0, 0, 0))   # Y, M, D, weekday, h, m, s, subsec
print(rtc.datetime())

Watchdog

machine.WDT รีเซ็ตบอร์ดหากแอปพลิเคชันค้าง เมื่อเริ่มต้นแล้วไม่สามารถหยุดหรือกำหนดค่าใหม่ได้ — ต้องป้อนอาหารมันเป็นระยะในลูปหลักของคุณ:

from machine import WDT

wdt = WDT(timeout=5_000)   # 5 second window
while True:
    # ...do work...
    wdt.feed()

ข้อมูลการบูตและรันไทม์

หน้าต่างบูตโหลดเดอร์ USB

ทุกครั้งที่เปิดเครื่อง กล้องจะรันบูตโหลดเดอร์สั้น ๆ (สองสามวินาที) ที่ช่วยให้ OpenMV IDE อัปเดตเฟิร์มแวร์ได้โดยไม่ต้องให้ผู้ใช้เข้าโหมด DFU เมื่อหน้าต่างหมดเวลา บูตโหลดเดอร์จะส่งต่อให้ boot.py แล้วจึงถึง main.py

สคริปต์ที่กำลังทำงานสามารถกลับเข้าบูตโหลดเดอร์ตามต้องการโดยเรียก machine.bootloader()

import machine

machine.bootloader()

ระบบไฟล์และลำดับการบูต

เฟิร์มแวร์ H7 Plus เมาท์ระบบไฟล์สูงสุดสามระบบตอนบูต:

  • แฟลชภายใน — เมาท์ที่ /flash เสมอ เก็บ main.py และ README.txt ไว้โดยค่าเริ่มต้น สร้างขึ้นในการบูตครั้งแรก

  • การ์ด microSD — หากมีการ์ดอยู่ จะเมาท์ที่ /sdcard

  • ROMFS — ระบบไฟล์ที่ map ลงหน่วยความจำแบบอ่านอย่างเดียวที่ /rom ใช้ส่งมอบทรัพยากรข้อมูลขนาดใหญ่ (เช่น โมเดล AI) ที่ได้ประโยชน์จากการเข้าถึงแบบ zero‑copy เมาท์โดยอัตโนมัติโดย MicroPython ตอนเริ่มต้น ก่อน Python ของผู้ใช้จะทำงาน

หลังจากเมาท์แล้ว working directory จะถูกตั้งเป็น /sdcard เมื่อมีการ์ดอยู่ มิฉะนั้นจะเป็น /flash จากนั้น interpreter จะรันสคริปต์จากไดเรกทอรีนั้น:

  • boot.py จะถูกรันทุกครั้ง ทุก soft reset (บูตเย็น, Ctrl‑D จาก REPL หรือทุกครั้งที่สคริปต์ที่กำลังทำงานสิ้นสุด)

  • main.py จะถูกรัน เฉพาะตอนบูตเย็นเท่านั้น ทันทีหลังจาก boot.py การ soft reset ครั้งต่อมาจะรัน boot.py ซ้ำ แต่จะข้ามไปที่ REPL โดยตรง — หากต้องการรัน main.py ใหม่ ต้องรีเซ็ตบอร์ดอย่างสมบูรณ์

การวาง boot.py หรือ main.py ลงบนการ์ด SD จะแทนที่ไฟล์ในแฟลชโดยไม่แตะต้องมัน — ทั้งสองไฟล์จะถูกค้นหาในไดเรกทอรีบูต (/sdcard เมื่อการ์ดถูกเมาท์ มิฉะนั้นจะเป็น /flash)

main.py ที่มาพร้อมกับบอร์ดที่เพิ่งเขียนโปรแกรมใหม่จะกะพริบช่อง สีน้ำเงิน ของ RGB LED สำหรับผู้ใช้เป็นสัญญาณ heartbeat (พัลส์สั้นสองครั้ง, ช่องว่างสั้น) เพื่อให้รู้ว่าเฟิร์มแวร์บูตสำเร็จโดยไม่มีโฮสต์เชื่อมต่อ

sys.path ถูกขยายให้รวมระบบไฟล์ทั้งสามและไดเรกทอรีย่อย lib/ ของแต่ละระบบ ดังนั้นโมดูลที่ import ได้สามารถอยู่ใน /flash/lib, /sdcard/lib หรือ /rom/lib

หากต้องการบังคับให้ระบบเพิกเฉยต่อการ์ด SD ที่ใส่อยู่ (เช่น เพื่อรัน main.py จากแฟลชแม้จะมีการ์ดอยู่) ให้สร้างไฟล์เปล่าชื่อ SKIPSD ที่รูทของ /flash

เมื่อเชื่อมต่อผ่าน USB ระบบไฟล์การบูต (/sdcard หากมีการ์ด มิฉะนั้นจะเป็น /flash) จะปรากฏเป็น USB mass‑storage drive บนโฮสต์ด้วย ทำให้คุณแก้ไข boot.py, main.py และไฟล์อื่น ๆ ได้โดยตรง Eject ไดรฟ์ก่อนรีเซ็ตกล้อง เพื่อให้โฮสต์ flush การเขียนที่แคชไว้

Note

เนื่องจาก OS จัดการไดรฟ์เป็น block device แบบ passive ไฟล์ที่สร้างหรือแก้ไขโดยโค้ดที่ทำงานบน OpenMV Cam จะไม่ปรากฏจนกว่าโฮสต์จะ remount ไดรฟ์ หาก OS และ OpenMV Cam เขียนลงระบบไฟล์เดียวกันพร้อมกัน OS จะชนะและเขียนทับการเปลี่ยนแปลงของกล้อง ใช้การ์ด SD สำหรับข้อมูลที่สคริปต์เขียนกลับ และ remount ก่อนอ่านไฟล์เหล่านั้นจากโฮสต์

Note

ช่อง สีแดง ของ RGB LED สำหรับผู้ใช้อาจติดสว่างชั่วขณะขณะที่โฮสต์กำลังอ่านหรือเขียนลง USB mass‑storage drive — นี่คือตัวแสดงกิจกรรมที่ขับเคลื่อนโดยเฟิร์มแวร์ ไม่ใช่ความผิดพลาด

ขนาดพื้นที่เก็บข้อมูล

H7 Plus มาพร้อมกับ:

  • /flash — ระบบไฟล์ FAT 24 MB อ่าน/เขียน

  • /rom — ROMFS แบบอ่านอย่างเดียว map ลงหน่วยความจำขนาด 8 MB ใช้ส่งมอบสคริปต์และโมเดล ML ที่ได้ประโยชน์จากการเข้าถึง mmap แบบ zero-copy

  • /sdcard — ขนาดเต็มของการ์ด microSD ที่ใส่อยู่ (เมื่อมีการ์ด) อ่าน/เขียน

ตัวบ่งชี้ hard‑fault

หาก RGB LED สำหรับผู้ใช้วนซ้ำสีทุกสีอย่างรวดเร็ว — เร็วพอที่มักดูเหมือน LED ขาวกะพริบ มากกว่าสีต่างๆ — แสดงว่าเฟิร์มแวร์พบ hard fault ที่กู้คืนไม่ได้ เขียนโปรแกรมเฟิร์มแวร์ใหม่เพื่อแก้ไข หากเขียนใหม่แล้วยังไม่ดีขึ้น บอร์ดอาจเสียหายทางกายภาพ

ไลบรารีซอฟต์แวร์

ดู ดัชนีไลบรารี สำหรับรายการโมดูลทั้งหมด — รวมถึงโมดูลที่มีเฉพาะใน H7 Plus build