OpenMV N6

OpenMV N6 je postaven na čipu STMicroelectronics STM32N657 (Cortex‑M55 @ 800 MHz) s 1GHz integrovanou NPU s výkonem 600 GOPS INT8. Deska kombinuje NPU se senzorem PAG7936 1 MP s globální závěrkou na výměnném nosiči, gigabitovým Ethernetem, USB‑C high‑speed, Wi‑Fi a Bluetooth 5.1 a zvládá inferenci YOLOv8/YOLOv11 při 30 FPS souběžně se živým streamováním videa.

OpenMV N6

Kompletní datasheet, fotografie a rozměry najdete na produktové stránce OpenMV N6.

Hlavní vlastnosti

  • STM32N657 Cortex‑M55 na 800 MHz (1280 DMIPS) s ARM Helium 128bitovou SIMD — vektorová propustnost 6,4 gigaops.

  • 1GHz NPU, 600 GOPS INT8 — zvládá detekci YOLOv8/YOLOv11 při 30 FPS.

  • ISP pro RAW Bayer až do 5 MP, 2D GPU pro škálování a 3D rotaci, enkodér H.264 do 1080p a hardwarový JPEG kodek.

  • 64 MB externí SDRAM (16bitová @ 200 MHz DDR, 800 MB/s) plus 4,2 MB interní SRAM a 32 MB octal flash paměť (200 MHz DDR, 400 MB/s).

  • PAG7936 barevný senzor 1 MP s globální závěrkou.

  • Integrovaná IMU (akcelerometr + gyroskop) a mikrofon pro fúzi zvuku a pohybu.

  • High‑speed USB‑C (480 Mb/s, proudový limit 1,5 A), gigabitový Ethernet (s podporou PoE přes shield), Wi‑Fi a/b/g/n + Bluetooth 5.1 (čipová anténa nebo varianta U.FL).

  • Slot microSD — SD až 2 GB, SDHC až 32 GB, SDXC až 2 TB.

  • LiPo nabíječka (rychlé nabíjení 500 mA), ADC pro napětí baterie, RTC s 8 KB zálohovací RAM a vyhrazený pin pro zálohovací baterii.

  • 18 I/O pinů, všechny s výstupem 3,3 V / tolerantní na 3,3 V, 20 mA na pin, schopné generovat přerušení.

  • Uživatelská RGB LED, uživatelské tlačítko a samostatná stavová LED pro nabíjení / USB / napájení VIN.

Varování

I/O piny N6 nejsou tolerantní na 5 V. Nepřipojujte zařízení přímo k 5V MCU, jako je Arduino Mega. N6 napájejte pouze přes VIN.

Rozložení pinů

Rozložení pinů OpenMV N6 PAG7936

Reference pinů

Název pinu

Funkce

P0

SPI2 MOSI / I2S2 SDO

P1

SPI2 MISO / I2S2 SDI

P2

SPI2 SCLK / UART4 TX / CAN1 TX / I2S2 CK

P3

SPI2 SS / UART4 RX / CAN1 RX / I2S2 WS

P4

I2C2 SCL / UART3 TX / TIM2 CH3 / I3C2 SCL

P5

I2C2 SDA / UART3 RX / TIM2 CH4 / I3C2 SDA

P6

TIM12 CH1 (na tomto pinu není ADC — viz P6_ADC)

P6_ADC

vyhrazený 12bitový ADC vstup (interně propojený s P6)

P7

TIM4 CH1

P8

TIM4 CH2

P9

TIM17 CH1

P10

TIM15 CH2 / frame sync I/O

P11

wakeup (aktivní v nule, WKUP3)

P12

RESET — stáhnutím na GND se deska resetuje (není to GPIO)

P13

UART7 RX

P14

UART7 TX

P15

SPI4 CS

P16

SPI4 SCK

P17

SPI4 MISO

P18

SPI4 MOSI

SW

uživatelské tlačítko (aktivní v nule)

ONOFF (SW2)

tlačítko probuzení z hlubokého spánku (aktivní v nule, WKUP2)

ST

nízká úroveň při napájení z VIN, vysoká při napájení z USB

CHG

aktivní v nule; nízká úroveň, dokud se připojená LiPo baterie nabíjí

PG

aktivní v nule; nízká úroveň, když je přítomno napájení VIN nebo USB

BAT_ADC

interní ADC kanál měřící napětí připojené LiPo baterie

LED_RED

červený kanál RGB LED (aktivní v nule)

LED_GREEN

zelený kanál RGB LED (aktivní v nule)

LED_BLUE

modrý kanál RGB LED (aktivní v nule)

Poznámka

Linka frame‑sync P10 je sdílená sběrnice. Je zároveň propojena s MCU, triggerovacím / expozičním pinem senzoru kamery i s uživatelským headerem. Směr je definován aplikací — linku může řídit MCU, senzor nebo externí signál podle toho, jak je senzor nakonfigurován (některé senzory mohou stejný pin používat jako triggerovací vstup nebo jako expoziční výstup). Dbejte na to, aby byl vždy aktivní pouze jeden ovladač.

Poznámka

ONOFF a P11 jsou vztaženy k vždy zapnuté větvi RAW (nikoli k spínané větvi 3,3 V), takže zůstávají funkční, i když je zbytek desky v hlubokém spánku / nízkopříkonovém režimu. Oba vstupy jsou aktivní v nule.

Tyto piny procházejí převodníky úrovní, aby mohly fungovat na větvi RAW. Pokud nutně potřebujete chování GPIO přímo na 3,3 V na pinech ONOFF nebo P11 (například k jejich ovládání z 3,3V MCU bez průchodu převodníkem), deska nabízí pájecí plošky s pull‑up a 0ohmovou propojkou, které umožňují převodník obejít. Jedná se o pokročilou hardwarovou úpravu — většina uživatelů by ji měla ponechat beze změny.

Poznámka

P15–P18 jsou sdíleny s gigabitovým Ethernet PHY, který je ve výchozím stavu zapojen a aktivní. Chcete‑li tyto piny použít jako uživatelské I/O, musíte přepájet 0ohmový rezistor na zadní straně desky do polohy GPIO. Tím se vypne pouze gigabitový Ethernet — Ethernet 10/100 Mb/s na svých vyhrazených pinech funguje dál.

Napájecí piny

  • 3.3V — regulovaná větev 3,3 V. Na N6 je pouze výstupní — nepřivádějte do tohoto pinu externí napájení. Pro shieldy je k dispozici až 1 A.

  • VIN — vstup 5 V. Napájí desku a integrovanou LiPo nabíječku.

  • RAW — vstup/výstup, vždy zapnutý (3,6 V – 5 V). Vede ten zdroj, který je právě aktivní (VIN, USB nebo připojená baterie), a lze jej použít i jako vstup. Při přivádění napájení do RAW jej musíte budit přes sériovou diodu — jinak by proud tekl zpět do VIN/USB a poškodil napájecí zdroj nebo ochranu na desce.

  • GND — společná zem.

Poznámka

Čip pro správu napájení na desce automaticky vybírá z USB a VIN ten s vyšším napětím pro napájení desky a nabíječky baterie. Pokud je připojena LiPo baterie, nabíjí se z přebytečné rezervy, a pokud napětí VIN/USB poklesne nebo se odpojí, řadič přejde na baterii, aby deska zůstala v chodu.

Poznámka

Na zadní straně desky jsou pájecí plošky pro externí 3,3V zálohovací baterii RTC. Připojení knoflíkového článku k těmto ploškám udržuje RTC a 8 KB zálohovací RAM v chodu, i když je zbytek desky bez napájení.

Tip

K modelování, jak dlouho N6 vydrží v provozu na baterii při daném pracovním cyklu aktivní / hluboký spánek, použijte odhadovač výdrže baterie.

Ethernet piny

N6 vyvádí páry MDI Ethernet PHY na vyhrazené plošky vedle GPIO headeru. Piny MDI nelze bezpečně připojit přímo k RJ45 — mezi PHY a kabelem je nutná Ethernet magnetika (izolační transformátor, ať už zabudovaný v magjacku nebo na shieldu). OpenMV PoE shield ji obsahuje; pokud si vyrábíte vlastní konektor, použijte RJ45 s integrovanou magnetikou nebo externí transformátor.

  • ETH_LED — LED stavu linky/aktivity. Aktivní v nule, když je linka navázaná; bliká při provozu.

  • DA P / DA N — pár A (TX při 10/100, používán všemi rychlostmi).

  • DB P / DB N — pár B (RX při 10/100, používán všemi rychlostmi).

  • DC P / DC N — pár C, používán pouze při gigabitu.

  • DD P / DD N — pár D, používán pouze při gigabitu.

10/100 Mb/s potřebuje jen páry A a B. Gigabit potřebuje všechny čtyři páry A–D.

Piny pro obnovu a ladění

  • RESET — stáhnutím na GND se deska resetuje. Po uvolnění MCU nastartuje normálně.

  • BOOT0 — přitáhnutím na 3,3 V při zapnutí desky se vstoupí do režimu ROM bootloaderu. OpenMV IDE tento režim používá k přeflashování bootloaderu na desce.

  • BOOT1 — přepínač, který uvede desku do vývojářského režimu pro použití s nástroji ST (ST‑LINK připojený k ARM 10pinovému SWD/JTAG headeru). Pro normální provoz s firmwarem a nástroji OpenMV jej ponechte vypnutý.

Deska je osazena vyhrazeným ARM 10pinovým SWD/JTAG headerem kompatibilním s adaptéry ST‑LINK a SEGGER J‑Link.

Integrované periferie

LED

N6 má dvě RGB LED:

  • Uživatelská RGB LED — softwarově řiditelná, vyvedená jako LED_RED, LED_GREEN a LED_BLUE

    from machine import LED
    
    LED("LED_RED").on()
    LED("LED_GREEN").on()
    LED("LED_BLUE").on()
    
  • Napájecí LED — řízená přímo hardwarem správy napájení na desce, bez softwarového ovládání. Použijte ji k rychlému přečtení stavu napájení.

    Za běhu:

    Kanál

    Význam

    Modrá

    deska je napájena z VIN (zhasne při USB)

    Zelená

    přítomno napájení USB nebo VIN

    Červená

    nabíjení připojené LiPo baterie

    V hlubokém spánku jsou všechny kanály zhasnuté kromě červeného, který stále svítí během nabíjení LiPo baterie.

Uživatelská tlačítka

N6 má dvě tlačítka:

  • SW — univerzální uživatelské tlačítko. Aktivní při stažení na nízkou úroveň.

  • ONOFF (SW2) — tlačítko probuzení. Jediné tlačítko, které dokáže probudit desku z hlubokého spánku.

from machine import Pin

sw    = Pin("SW",    Pin.IN)   # user button
onoff = Pin("ONOFF", Pin.IN)   # SW2 — wakes from deep sleep
print(sw.value(), onoff.value())

Chcete‑li desku uvést do hlubokého spánku a probudit ji tlačítkem ONOFF (SW2), stačí zavolat machine.deepsleep() — není potřeba žádná konfigurace probuzení, tlačítko je zapojeno přímo na vstup WKUP2:

import machine

machine.deepsleep()   # press ONOFF (SW2) to wake the board

ONOFF můžete také zapojit jako softwarový vypínač. Reagujte na náběžnou hranu — linka se po uvolnění tlačítka uživatelem ustálí na vysoké úrovni, takže další stisk je jednoznačně událostí probuzení:

import machine
from machine import Pin

def power_off(_):
    machine.deepsleep()

Pin("ONOFF", Pin.IN).irq(power_off, Pin.IRQ_RISING)

# ...rest of the application runs here. Press ONOFF once to sleep,
# press it again to wake.

Piny stavu napájení

Tři stavové vstupy aktivní v nule umožňují firmwaru vidět, co dělá čip správy napájení na desce:

  • ST — nízká úroveň, když deska běží na VIN, vysoká, když běží na napájení z USB.

  • CHG — nízká úroveň, dokud se připojená LiPo baterie nabíjí.

  • PG — nízká úroveň, když je přítomno napájení VIN nebo USB.

from machine import Pin

on_vin    = not Pin("ST",  Pin.IN).value()
charging  = not Pin("CHG", Pin.IN).value()
power_ok  = not Pin("PG",  Pin.IN).value()

Senzor kamery

PAG7936 je ovládán přes modul csi — kamerové senzory

import csi

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

while True:
    img = cam.snapshot()

Senzor sedí na výměnném modulu — vyměňte jej za kterýkoli z dalších modulů kamery OpenMV (globální závěrka, termální, vyšší rozlišení atd.) bez nutnosti měnit zbytek desky.

PAG7936 podporuje triggerovaný režim — integrace pixelů je přesně synchronizována s každým voláním csi.CSI.snapshot namísto volně běžícího snímkového hodinového signálu, což je užitečné pro synchronizaci snímání s externí událostí nebo jiným senzorem. Povolte jej přes csi.CSI.ioctl s csi.IOCTL_SET_TRIGGERED_MODE. Snímková frekvence klesne přibližně na polovinu oproti volně běžícímu režimu, protože vyčítání už nepipelinuje s integrací dalšího snímku:

cam.ioctl(csi.IOCTL_SET_TRIGGERED_MODE, True)

NPU

1GHz Neural‑ART NPU desky N6 (600 GOPS INT8) je vyvedena přes modul ml — Strojové učení. Modely uložené na souborovém systému /rom určeném pouze pro čtení se načítají přímo z flash paměti bez kopírování do RAM, takže i velké detektory pohodlně vejdou vedle živého framebufferu. Spusťte detektor YOLOv8 na každém snímku a vykreslete predikce přes živý obraz:

import csi
import time
import ml
from ml.postprocessing.ultralytics import YoloV8

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

# Load YOLO V8 model from ROM FS.
model = ml.Model("/rom/yolov8n_192.tflite", postprocess=YoloV8(threshold=0.4))
print(model)

# Visualization parameters.
n = len(model.labels)
model_class_colors = [
    (int(255 * i // n), int(255 * (n - i - 1) // n), 255)
    for i in range(n)
]

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

    # boxes is a list of list per class of ((x, y, w, h), score) tuples
    boxes = model.predict([img])

    # Draw bounding boxes around the detected objects
    for i, class_detections in enumerate(boxes):
        rects = [r for r, score in class_detections]
        labels = [model.labels[i] for j in range(len(rects))]
        colors = [model_class_colors[i] for j in range(len(rects))]
        ml.utils.draw_predictions(img, rects, labels, colors, format=None)

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

Mikrofon

Mikrofon na desce se snímá přes audio — Modul Audio. Každý buffer přichází jako 16bitový PCM se znaménkem typu bytearray, což velmi usnadňuje jeho předání do ulab/numpy pro rychlý DSP. Jednoduchý detektor hlasitosti — vypíše vždy, když efektivní hodnota (RMS) hlasitosti překročí práh:

import audio
from ulab import numpy as np

def loudness(pcmbuf):
    samples = np.array(np.frombuffer(pcmbuf, dtype=np.int16), dtype=np.float)
    rms = np.sqrt(np.mean(samples ** 2))
    if rms > 10000:
        print("Loud!", int(rms))

audio.init(channels=1, frequency=16000, gain_db=24)
audio.start_streaming(loudness)

while True:
    pass

IMU

Akcelerometr + gyroskop na desce pod modulem kamery jsou vyvedeny přes imu — imu senzor

import imu
import time

while True:
    print(imu.acceleration_mg())   # (x, y, z) in milli‑g
    print(imu.angular_rate_mdps()) # (x, y, z) in milli‑deg/s
    time.sleep_ms(100)

Wi‑Fi

Čip CYW43439 na desce je vyveden přes network — konfigurace sítě jako rozhraní stanice (station). Po připojení ipconfig("addr4") vrací dvojici (ip, netmask)

import network, time

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ssid", "password")
while not wlan.isconnected():
    time.sleep(1)
print("Wi‑Fi IP:", wlan.ipconfig("addr4")[0])

Bluetooth

Tentýž CYW43439 vyvádí i Bluetooth 5.1. Pro BLE přívětivé k asynciu použijte aioble — Asynchronní BLE — například inzerujte zařízení jako periferii a čekejte na připojení centrálního zařízení:

import asyncio
import aioble

async def run():
    while True:
        conn = await aioble.advertise(250_000, name="OpenMV-N6")
        print("Connected:", conn.device)
        await conn.disconnected()

asyncio.run(run())

Ethernet

Když je k ploškám MDI připojen RJ45 (s magnetikou), gigabitové PHY se zobrazí jako rozhraní LAN. Jakmile je linka navázána, automaticky se spustí DHCP:

import network, time

lan = network.LAN()
lan.active(True)
while not lan.isconnected():
    time.sleep(1)
print("Ethernet IP:", lan.ipconfig("addr4")[0])

Karta microSD

Po vložení karty se automaticky připojí na /sdcard a je použitelná přes běžný souborový systém:

import os

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

Reference sběrnic

GPIO

Ke čtení nebo řízení kteréhokoli z pinů popsaných na potisku použijte machine.Pin. Výstupy jsou 3,3 V CMOS a mohou na každém pinu pohltit/dodat až 20 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())

Kterýkoli vstupní pin může také vyvolat přerušení při změnách hrany:

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

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

UART

Sběrnice

TX

RX

UART3

P4

P5

UART4

P2

P3

UART7

P14

P13

from machine import UART

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

I²C

Sběrnice

SCL

SDA

I2C2

P4

P5

from machine import I2C

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

Stejný hardware lze přes machine.I2CTarget použít i v režimu cíle (slave) a zpřístupnit tak paměťovou oblast jinému I²C kontroléru:

from machine import I2CTarget

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

SPI

Sběrnice

MOSI

MISO

SCK

CS

SPI2

P0

P1

P2

P3

SPI4

P18

P17

P16

P15

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

Sběrnice

TX

RX

CAN1

P2

P3

Poznámka

CAN zatím není ve firmwaru v5.0.0 na této desce podporován.

from machine import CAN

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

ADC

Oba ADC kanály procházejí napěťovým děličem s operačním zesilovačem ve funkci bufferu, než se dostanou do MCU, takže read_u16() je na každém pinu mapováno na jiné napětí plného rozsahu.

Pin

Plný rozsah

Poznámky

P6_ADC

~3,3 V

univerzální ploška, interně propojená s P6

BAT_ADC

~5,0 V

interní kanál pro LiPo baterii

from machine import ADC
import time

adc = ADC("P6_ADC")
bat = ADC("BAT_ADC")

while True:
    print("P6:", adc.read_u16() * 3.3 / 65535, "V")
    print("BAT:", bat.read_u16() * 5.0 / 65535, "V")
    time.sleep_ms(100)

PWM

Pin

Časovač / kanál

P4

TIM2 CH3

P5

TIM2 CH4

P6

TIM12 CH1

P7

TIM4 CH1

P8

TIM4 CH2

P9

TIM17 CH1

P10

TIM15 CH2

Kterýkoli z nich ovládejte přes machine.PWM

from machine import Pin, PWM

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

Softwarově bit‑bangované sběrnice

machine.SoftI2C a machine.SoftSPI fungují na libovolném GPIO, pokud potřebujete další sběrnici.

Termální senzor (mimo desku)

Firmware obsahuje ovladač fir — ovladač termálního senzoru (fir == far infrared, vzdálené infračervené záření) pro externě zapojené termální kamery:

  • MLX90621 — IR pole 16 × 4

  • MLX90640 — IR pole 32 × 24

  • MLX90641 — IR pole 16 × 12

  • AMG8833 — IR pole 8 × 8

Připojte modul k I²C sběrnici desky a čtěte snímky pomocí 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())

Ovladač fir komunikuje se senzorem pouze přes I²C 2 — připojte modul k P4 (SCL) a P5 (SDA).

Časování

time

Modul time pokrývá blokující zpoždění, monotónní ticky a měření uplynulého času:

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)

Virtuální časovače

machine.Timer plánuje periodické nebo jednorázové callbacky, aniž by zabíral slot hardwarového časovače. Jako id předejte -1 pro použití virtuálního (softwarového) časovače:

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"))

Hodnoty periody jsou v milisekundách. K zastavení a uvolnění slotu zavolejte deinit().

Hodiny reálného času

machine.RTC udržuje reálný čas přes resety a (s volitelnou 3,3V zálohovací baterií připojenou k zadním ploškám, viz Napájecí piny) i přes úplnou ztrátu napájení:

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())

RTC běží i během hlubokého spánku, takže jej můžete použít jako zdroj probuzení pro machine.deepsleep().

Watchdog

machine.WDT resetuje desku, pokud aplikace zamrzne. Po spuštění jej nelze zastavit ani překonfigurovat — krmte jej pravidelně uvnitř hlavní smyčky:

from machine import WDT

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

Informace o bootu a běhu

Okno USB bootloaderu

Při každém zapnutí kamera spustí krátký bootloader (několik sekund), který umožní OpenMV IDE aktualizovat firmware, aniž by uživatel musel vstupovat do režimu DFU. Po vypršení okna bootloader předá řízení boot.py a poté main.py.

Běžící skript může na vyžádání znovu vstoupit do bootloaderu voláním machine.bootloader()

import machine

machine.bootloader()

Souborový systém a pořadí bootu

Firmware N6 při bootu připojuje až tři souborové systémy:

  • Interní flash paměť — vždy připojena na /flash. Ve výchozím stavu obsahuje main.py a README.txt; vytváří se při úplně prvním bootu.

  • Karta microSD — pokud je karta vložena, připojí se na /sdcard.

  • ROMFS — souborový systém určený pouze pro čtení, mapovaný do paměti, na /rom, používaný pro distribuci velkých datových assetů (např. AI modelů), které těží z přístupu bez kopírování. MicroPython jej připojuje automaticky při startu, dříve než se spustí jakýkoli uživatelský Python.

Po připojení je pracovní adresář nastaven na /sdcard, pokud je karta přítomna, jinak na /flash. Interpret pak spouští skripty z tohoto adresáře:

  • boot.py se spustí při každém soft resetu (studený start, Ctrl‑D z REPL nebo kdykoli běžící skript skončí).

  • main.py se spustí pouze při studeném startu, ihned po boot.py. Následné soft resety znovu spustí boot.py, ale skočí rovnou do REPL — k opětovnému spuštění main.py musíte desku plně resetovat.

Umístění boot.py nebo main.py na SD kartu přepíše kopii ve flash paměti, aniž by se jí dotklo — oba soubory se hledají v boot adresáři (/sdcard, když je karta připojena, jinak /flash).

Výchozí main.py dodávaný na čerstvě naflashované desce pouze bliká modrým kanálem uživatelské RGB LED jako tep (dva krátké pulzy, krátká pauza), takže poznáte, že se firmware nabootoval čistě bez připojeného hostitele.

sys.path je rozšířena tak, aby zahrnovala všechny tři souborové systémy a jejich podadresáře lib/, takže importovatelné moduly mohou ležet v /flash/lib, /sdcard/lib nebo /rom/lib.

Chcete‑li systém přinutit ignorovat vloženou SD kartu (například ke spuštění main.py z flash paměti i při přítomné kartě), vytvořte prázdný soubor s názvem SKIPSD v kořeni /flash.

Při připojení přes USB se boot souborový systém (/sdcard, pokud je karta přítomna, jinak /flash) na hostiteli také vyčíslí jako USB mass‑storage disk, což vám umožňuje přímo editovat boot.py, main.py a další soubory. Před resetováním kamery disk vysuňte, aby hostitel uložil své uložené (cached) zápisy.

Poznámka

Protože OS zachází s diskem jako s pasivním blokovým zařízením, soubory vytvořené nebo upravené kódem běžícím na OpenMV Cam se neobjeví, dokud hostitel disk znovu nepřipojí. Pokud OS i OpenMV Cam zapisují do stejného souborového systému současně, OS zvítězí a přepíše změny provedené kamerou. Pro veškerá data, která skript zapisuje zpět, používejte SD kartu a před jejich čtením z hostitele kartu znovu připojte.

Poznámka

Červený kanál uživatelské RGB LED se může krátce rozsvítit, když hostitel čte z USB mass‑storage disku nebo na něj zapisuje — jde o indikátor aktivity řízený firmwarem, nikoli o závadu.

Velikosti úložiště

N6 se dodává s:

  • /flash4 MB FAT souborový systém, pro čtení i zápis.

  • /rom24 MB souborový systém ROMFS určený pouze pro čtení, mapovaný do paměti, používaný k distribuci skriptů a ML modelů, které těží z přístupu mmap bez kopírování.

  • /sdcard — plná velikost vložené microSD karty (pokud je přítomna), pro čtení i zápis.

Indikátor hard‑faultu

Pokud uživatelská RGB LED rychle cykluje všemi barvami — natolik rychle, že to spíše vypadá jako mihotavá bílá LED než jako rozlišitelné odstíny — firmware narazil na neopravitelný hard fault. Pro obnovu firmware přeflashujte; pokud přeflashování nepomůže, deska může být fyzicky poškozena.

Softwarové knihovny

Kompletní seznam modulů — včetně těch, které jsou jedinečné pro build N6 — najdete v indexu knihoven.