OpenMV N6

OpenMV N6 izgrađen je oko STMicroelectronics STM32N657 (Cortex‑M55 @ 800 MHz) s NPU‑om na čipu radne frekvencije 1 GHz i učinkom od 600 GOPS INT8. Ploča kombinira NPU s PAG7936 1 MP global‑shutter senzorom na odvojivom nosaču, gigabitnim Ethernetom, USB‑C high‑speed sučeljem, Wi‑Fijem i Bluetoothom 5.1, te izvodi YOLOv8/YOLOv11 zaključivanje pri 30 FPS uz istovremeni prijenos videa uživo.

OpenMV N6

Za potpuni podatkovni list, fotografije i dimenzije pogledajte stranicu proizvoda OpenMV N6.

Naglasci

  • STM32N657 Cortex‑M55 pri 800 MHz (1280 DMIPS) s ARM Helium 128‑bitnim SIMD‑om — vektorska propusnost od 6,4 gigaopsa.

  • NPU od 1 GHz, 600 GOPS INT8 — izvodi YOLOv8/YOLOv11 detekciju pri 30 FPS.

  • ISP za do 5 MP RAW Bayer, 2D GPU za skaliranje i 3D rotaciju, H.264 kodiranje do 1080p i hardverski JPEG kodek.

  • 64 MB vanjske SDRAM (16‑bitne @ 200 MHz DDR, 800 MB/s) uz 4,2 MB interne SRAM i 32 MB oktalne flash memorije (200 MHz DDR, 400 MB/s).

  • PAG7936 1 MP global‑shutter senzor u boji.

  • Ugrađeni IMU (akcelerometar + žiroskop) i mikrofon za fuziju zvuka i pokreta.

  • High‑speed USB‑C (480 Mb/s, ograničenje struje 1,5 A), gigabitni Ethernet (može koristiti PoE preko shielda), Wi‑Fi a/b/g/n + Bluetooth 5.1 (čip antena ili U.FL opcija).

  • microSD utor — SD do 2 GB, SDHC do 32 GB, SDXC do 2 TB.

  • LiPo punjač (brzo punjenje 500 mA), ADC za napon baterije, RTC s 8 KB rezervne RAM memorije i namjenskim pinom za rezervnu bateriju.

  • 18 I/O pinova, svi 3,3 V izlaz / podnose 3,3 V, 20 mA po pinu, sposobni za prekide.

  • Korisnička RGB LED, korisničko tipkalo i zaseban statusni LED za punjenje / USB / VIN napajanje.

Upozorenje

I/O pinovi modela N6 ne podnose 5 V. Nemojte uređaj izravno spajati na 5 V MCU poput Arduino Mega. Napajajte N6 isključivo preko VIN.

Raspored pinova

Raspored pinova OpenMV N6 PAG7936

Referenca pinova

Naziv pina

Funkcija

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 ovom pinu nema ADC‑a — pogledajte P6_ADC)

P6_ADC

namjenski 12‑bitni ADC ulaz (interno povezan s P6)

P7

TIM4 CH1

P8

TIM4 CH2

P9

TIM17 CH1

P10

TIM15 CH2 / I/O za sinkronizaciju sličica

P11

buđenje (aktivno nisko, WKUP3)

P12

RESET — povucite na GND za resetiranje ploče (nije GPIO)

P13

UART7 RX

P14

UART7 TX

P15

SPI4 CS

P16

SPI4 SCK

P17

SPI4 MISO

P18

SPI4 MOSI

SW

korisničko tipkalo (aktivno nisko)

ONOFF (SW2)

tipkalo za buđenje iz dubokog sna (aktivno nisko, WKUP2)

ST

nisko pri VIN napajanju, visoko pri USB napajanju

CHG

aktivno nisko; nisko dok se priključena LiPo baterija puni

PG

aktivno nisko; nisko kada je prisutno VIN ili USB napajanje

BAT_ADC

interni ADC kanal koji mjeri napon priključene LiPo baterije

LED_RED

crveni kanal RGB LED‑a (aktivan nisko)

LED_GREEN

zeleni kanal RGB LED‑a (aktivan nisko)

LED_BLUE

plavi kanal RGB LED‑a (aktivan nisko)

Napomena

Linija za sinkronizaciju sličica P10 dijeljena je sabirnica. Spojena je istovremeno na MCU, na okidačni / ekspozicijski pin senzora kamere i na korisničko zaglavlje. Smjer ovisi o aplikaciji — ovisno o tome kako je senzor konfiguriran, liniju mogu pokretati MCU, senzor ili vanjski signal (neki senzori mogu isti pin koristiti kao okidački ulaz ili kao ekspozicijski izlaz). Pazite da je u svakom trenutku aktivan samo jedan pokretač.

Napomena

ONOFF i P11 referencirani su na uvijek uključenu RAW liniju (a ne na prekidanu 3,3 V liniju), pa ostaju funkcionalni dok je ostatak ploče u dubokom snu / načinu niske potrošnje. Oba ulaza su aktivna nisko.

Ovi pinovi prolaze kroz prilagodnike razine napona kako bi mogli raditi na RAW liniji. Ako vam je apsolutno potrebno izravno 3,3 V GPIO ponašanje na ONOFF ili P11 (primjerice za njihovo pokretanje s 3,3 V MCU‑a bez prolaska kroz prilagodnik), ploča izlaže pull‑up i 0‑ohmske jumper jastučiće koji omogućuju zaobilaženje prilagodnika. Ovo je napredna hardverska preinaka — većina korisnika trebala bi to ostaviti netaknutim.

Napomena

P15–P18 dijele se s Gigabit Ethernet PHY‑em, koji je povezan i prema zadanim postavkama aktivan. Da biste ove pinove koristili kao korisnički I/O, morate preljemiti 0‑ohmski otpornik na poleđini ploče na GPIO poziciju. Time se onemogućuje samo gigabitni Ethernet — 10/100 Mb/s Ethernet i dalje radi na svojim namjenskim pinovima.

Pinovi za napajanje

  • 3.3V — regulirana 3,3 V linija. Na N6 je samo izlaz — nemojte u ovaj pin dovoditi vanjsko napajanje. Dostupno do 1 A za shieldove.

  • VIN — 5 V ulaz. Napaja ploču i ugrađeni LiPo punjač.

  • RAW — ulaz/izlaz, uvijek uključen (3,6 V – 5 V). Prenosi onaj izvor koji je aktivan (VIN, USB ili priključenu bateriju), a može se koristiti i kao ulaz. RAW morate pokretati kroz serijsku diodu kada u njega dovodite napajanje — inače će struja teći natrag u VIN/USB i oštetiti napajanje ili ugrađenu zaštitu.

  • GND — zajednička masa.

Napomena

Ugrađeni čip za upravljanje napajanjem automatski bira onaj od USB‑a ili VIN‑a koji ima viši napon za napajanje ploče i punjača baterije. Ako je priključena LiPo baterija, puni se iz preostale rezerve napona, a upravljač se vraća na bateriju kako bi ploča nastavila raditi ako VIN/USB padnu ili budu isključeni.

Napomena

Poleđina ploče ima lemne jastučiće za vanjsku 3,3 V RTC rezervnu bateriju. Spajanjem dugmaste baterije na te jastučiće RTC i 8 KB rezervne RAM memorije nastavljaju raditi dok je ostatak ploče bez napajanja.

Savjet

Koristite procjenitelj trajanja baterije za modeliranje koliko će dugo N6 raditi na bateriji za zadani omjer aktivnog rada i dubokog sna.

Ethernet pinovi

N6 izlaže MDI parove Ethernet PHY‑a na namjenskim jastučićima pokraj GPIO zaglavlja. MDI pinovi nije sigurno spajati izravno na RJ45 — Ethernet magnetika (izolacijski transformator, bilo ugrađen u magjack ili na shieldu) obavezna je između PHY‑a i kabela. OpenMV PoE shield uključuje je; ako sami izrađujete priključak, koristite RJ45 s integriranom magnetikom ili vanjski transformator.

  • ETH_LED — LED veze/aktivnosti. Aktivan nisko kada je veza uspostavljena; bljeska pri prometu.

  • DA P / DA N — par A (TX kod 10/100, koristi se pri svim brzinama).

  • DB P / DB N — par B (RX kod 10/100, koristi se pri svim brzinama).

  • DC P / DC N — par C, koristi se samo pri gigabitu.

  • DD P / DD N — par D, koristi se samo pri gigabitu.

10/100 Mb/s treba samo parove A i B. Gigabit treba sva četiri para A–D.

Pinovi za oporavak i otklanjanje pogrešaka

  • RESET — povucite na GND za resetiranje ploče. Otpuštanjem MCU pokreće normalno.

  • BOOT0 — povucite na 3,3 V tijekom napajanja ploče za ulazak u ROM bootloader način. OpenMV IDE koristi ovaj način za ponovno upisivanje ugrađenog pokretača (bootloader).

  • BOOT1 — prekidač koji ploču stavlja u razvojni način za korištenje sa ST‑ovim alatima (ST‑LINK priključen na ARM 10‑pinsko SWD/JTAG zaglavlje). Ostavite ovo onemogućeno za normalan rad s OpenMV firmverom i alatima.

Ugrađeno je namjensko ARM 10‑pinsko SWD/JTAG zaglavlje, kompatibilno sa ST‑LINK i SEGGER J‑Link adapterima.

Ugrađene periferije

LED‑ovi

N6 ima dva RGB LED‑a:

  • Korisnički RGB LED — softverski upravljiv, izložen kao LED_RED, LED_GREEN i LED_BLUE

    from machine import LED
    
    LED("LED_RED").on()
    LED("LED_GREEN").on()
    LED("LED_BLUE").on()
    
  • LED napajanja — pokreće ga izravno ugrađeni hardver za upravljanje napajanjem, bez softverske kontrole. Koristite ga da na prvi pogled očitate što napajanje radi.

    Tijekom rada:

    Kanal

    Značenje

    Plava

    VIN napaja ploču (isključeno pri USB‑u)

    Zelena

    prisutno USB ili VIN napajanje

    Crvena

    punjenje priključene LiPo baterije

    U dubokom snu svi su kanali isključeni osim crvenog, koji i dalje svijetli dok se LiPo baterija puni.

Korisnička tipkala

N6 ima dva tipkala:

  • SW — korisničko tipkalo opće namjene. Aktivno kada je povučeno nisko.

  • ONOFF (SW2) — tipkalo za buđenje. Jedino tipkalo koje može izvesti ploču iz dubokog sna.

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

Za stavljanje ploče u duboki san tako da je ONOFF (SW2) ponovno probudi, jednostavno pozovite machine.deepsleep() — nije potrebna nikakva konfiguracija buđenja, tipkalo je izravno spojeno na WKUP2 ulaz:

import machine

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

ONOFF možete spojiti i kao softverski prekidač napajanja. Okidajte na rastući brid — linija se ustaljuje na visokoj razini nakon što korisnik otpusti tipkalo, pa je sljedeći pritisak nedvosmisleno događaj buđenja:

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.

Pinovi statusa napajanja

Tri aktivno‑niska statusna ulaza omogućuju firmveru da vidi što ugrađeni čip za upravljanje napajanjem radi:

  • ST — nisko kada ploča radi na VIN‑u, visoko kada radi na USB napajanju.

  • CHG — nisko dok se priključena LiPo baterija puni.

  • PG — nisko kada je prisutno VIN ili USB napajanje.

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 kamere

PAG7936 se pokreće kroz modul csi — senzori kamere

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 se nalazi na odvojivom modulu — zamijenite ga bilo kojim drugim OpenMV modulom kamere (global shutter, termalni, veće razlučivosti itd.) bez mijenjanja ostatka ploče.

PAG7936 podržava okidani način rada — integracija piksela poravnava se točno sa svakim pozivom csi.CSI.snapshot, umjesto sa slobodnim takom sličica, što je korisno za sinkronizaciju snimanja s vanjskim događajem ili drugim senzorom. Omogućite ga kroz csi.CSI.ioctl s csi.IOCTL_SET_TRIGGERED_MODE. Brzina sličica pada na otprilike polovicu načina slobodnog rada jer se očitavanje više ne odvija usporedno s integracijom sljedeće sličice:

cam.ioctl(csi.IOCTL_SET_TRIGGERED_MODE, True)

NPU

N6‑ov Neural‑ART NPU od 1 GHz (600 GOPS INT8) izložen je kroz modul ml — Strojno učenje. Modeli pohranjeni na samo‑za‑čitanje /rom datotečnom sustavu učitavaju se izravno iz flash memorije bez kopiranja u RAM, pa čak i veliki detektori udobno stanu uz međuspremnik slike uživo. Pokrenite YOLOv8 detektor na svakoj sličici i nacrtajte predviđanja preko slike uživo:

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

Ugrađeni mikrofon snima se kroz audio — Audio modul. Svaki međuspremnik dolazi kao predznačeni 16‑bitni PCM bytearray, što ga čini trivijalnim za prosljeđivanje u ulab/numpy za brzu DSP obradu. Jednostavan detektor glasnoće — ispisuje kad god RMS glasnoća prijeđe prag:

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

Ugrađeni akcelerometar + žiroskop ispod modula kamere izloženi su kroz 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

Ugrađeni CYW43439 izložen je preko network — konfiguracija mreže kao stanično sučelje. Nakon povezivanja, ipconfig("addr4") vraća par (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

Isti CYW43439 izlaže i Bluetooth 5.1. Koristite aioble — Asinkroni BLE za BLE prilagođen asynciju — primjerice, oglašavajte se kao periferija i čekajte da se poveže središnji uređaj:

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

Kada je RJ45 (s magnetikom) spojen na MDI jastučiće, gigabitni PHY pojavljuje se kao LAN sučelje. DHCP se pokreće automatski čim se veza uspostavi:

import network, time

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

microSD kartica

Kada se kartica umetne, automatski se montira na /sdcard i može se koristiti kroz uobičajeni datotečni sustav:

import os

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

Referenca sabirnica

GPIO

Koristite machine.Pin za čitanje ili pokretanje bilo kojeg pina označenog na ploči. Izlazi su 3,3 V CMOS i mogu ponirati/izvoditi do 20 mA po pinu.

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

Bilo koji ulazni pin može također pokrenuti prekid pri promjeni brida:

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

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

UART

Sabirnica

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

Sabirnica

SCL

SDA

I2C2

P4

P5

from machine import I2C

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

Isti hardver može se koristiti i u ciljnom (slave) načinu kroz machine.I2CTarget kako bi se memorijsko područje izložilo drugom I²C upravljaču:

from machine import I2CTarget

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

SPI

Sabirnica

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

Sabirnica

TX

RX

CAN1

P2

P3

Napomena

CAN još nije podržan na ovoj ploči u firmveru v5.0.0.

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 kanala prolaze kroz djelitelj napona s op‑amp međuspremnikom prije nego što dođu do MCU‑a, pa je read_u16() na svakom pinu preslikan na drugačiji puni raspon ulaznog napona.

Pin

Puni raspon

Napomene

P6_ADC

~3,3 V

jastučić opće namjene, interno povezan s P6

BAT_ADC

~5,0 V

interni kanal za LiPo bateriju

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

Mjerač vremena / kanal

P4

TIM2 CH3

P5

TIM2 CH4

P6

TIM12 CH1

P7

TIM4 CH1

P8

TIM4 CH2

P9

TIM17 CH1

P10

TIM15 CH2

Pokrenite bilo koji od njih preko machine.PWM

from machine import Pin, PWM

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

Softverski bit‑bang sabirnice

machine.SoftI2C i machine.SoftSPI rade na bilo kojem GPIO‑u ako vam treba dodatna sabirnica.

Termalni senzor (izvan ploče)

Firmver uključuje fir — upravljački program termalnog senzora (fir == daleko infracrveno) upravljački program za izvana ožičene termalne snimače:

  • MLX90621 — 16 × 4 IR niz

  • MLX90640 — 32 × 24 IR niz

  • MLX90641 — 16 × 12 IR niz

  • AMG8833 — 8 × 8 IR niz

Spojite modul na I²C sabirnicu ploče i čitajte sličice pomoću 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 upravljački program komunicira sa senzorom samo preko I²C 2 — spojite modul na P4 (SCL) i P5 (SDA).

Tempiranje

time

Modul time pokriva blokirajuća kašnjenja, monotone otkucaje i mjerenje proteklog vremena:

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)

Virtualni mjerači vremena

machine.Timer raspoređuje periodičke ili jednokratne povratne pozive bez zauzimanja hardverskog mjesta za mjerač vremena. Proslijedite -1 kao id za korištenje virtualnog (softverskog) mjerača vremena:

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

Vrijednosti razdoblja su u milisekundama. Pozovite deinit() za zaustavljanje i oslobađanje mjesta.

Sat stvarnog vremena

machine.RTC održava stvarno vrijeme kroz resete i (uz opcionalnu 3,3 V rezervnu bateriju spojenu na stražnje jastučiće, pogledajte Pinovi za napajanje) kroz potpuni gubitak napajanja:

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 također radi kroz duboki san, pa ga možete koristiti kao izvor buđenja za machine.deepsleep().

Watchdog

machine.WDT resetira ploču ako se aplikacija zaglavi. Nakon pokretanja ne može se zaustaviti ni rekonfigurirati — hranite ga periodički unutar glavne petlje:

from machine import WDT

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

Informacije o pokretanju i izvođenju

Prozor USB bootloadera

Pri svakom uključivanju kamera pokreće kratak bootloader (nekoliko sekundi) koji omogućuje OpenMV IDE‑u ažuriranje firmvera bez potrebe da korisnik ulazi u DFU način. Nakon isteka prozora bootloader predaje upravljanje datoteci boot.py, a zatim main.py.

Skripta u izvođenju može ponovno ući u bootloader na zahtjev pozivom machine.bootloader()

import machine

machine.bootloader()

Datotečni sustav i redoslijed pokretanja

Firmver N6 pri pokretanju montira do tri datotečna sustava:

  • Interna flash memorija — uvijek montirana na /flash. Prema zadanom sadrži main.py i README.txt; stvara se pri prvom pokretanju.

  • microSD kartica — ako je kartica umetnuta, montira se na /sdcard.

  • ROMFS — samo‑za‑čitanje, memorijski mapirani datotečni sustav na /rom koji se koristi za isporuku velikih podatkovnih sadržaja (npr. AI modela) koji imaju koristi od pristupa bez kopiranja. MicroPython ga montira automatski pri pokretanju, prije nego što se pokrene bilo koja korisnička Python skripta.

Nakon montiranja, radni direktorij postavlja se na /sdcard kada je kartica prisutna, inače na /flash. Interpreter zatim pokreće skripte iz tog direktorija:

  • boot.py se izvršava pri svakom mekom resetu (hladno pokretanje, Ctrl‑D iz REPL‑a ili kad god se skripta u izvođenju vrati).

  • main.py se izvršava samo pri hladnom pokretanju, neposredno nakon boot.py. Naknadni meki resetovi ponovno pokreću boot.py, ali padaju izravno u REPL — za ponovno pokretanje main.py morate potpuno resetirati ploču.

Stavljanje datoteke boot.py ili main.py na SD karticu nadjačava kopiju u flash memoriji bez njezina mijenjanja — obje se datoteke traže u direktoriju za pokretanje (/sdcard kada je kartica montirana, inače /flash).

Zadani main.py isporučen na svježe upisanoj ploči samo trepće plavim kanalom korisničkog RGB LED‑a kao otkucaj srca (dva kratka impulsa, kratka stanka), pa možete prepoznati da se firmver uredno pokrenuo bez ikakvog priključenog domaćina.

sys.path je proširen tako da uključuje sva tri datotečna sustava i njihove lib/ poddirektorije, pa uvozivi moduli mogu boraviti u /flash/lib, /sdcard/lib ili /rom/lib.

Da biste prisilili sustav da zanemari umetnutu SD karticu (primjerice za pokretanje main.py iz flash memorije čak i kada je kartica prisutna), stvorite praznu datoteku naziva SKIPSD u korijenu /flash.

Kada je povezan preko USB‑a, datotečni sustav za pokretanje (/sdcard ako je kartica prisutna, inače /flash) na domaćinu se također enumerira kao USB pogon za masovnu pohranu, što vam omogućuje izravno uređivanje boot.py, main.py i bilo kojih drugih datoteka. Izbacite pogon prije resetiranja kamere kako bi domaćin ispraznio svoje predmemorirane upise.

Napomena

Budući da OS pogon tretira kao pasivni blok uređaj, datoteke koje stvori ili izmijeni kôd koji se izvodi na OpenMV Cam neće se pojaviti dok domaćin ponovno ne montira pogon. Ako i OS i OpenMV Cam istovremeno pišu na isti datotečni sustav, OS će pobijediti i prepisati promjene koje je napravila kamera. Koristite SD karticu za sve podatke koje skripta zapisuje natrag, i ponovno montirajte prije čitanja tih datoteka s domaćina.

Napomena

Crveni kanal korisničkog RGB LED‑a može nakratko zasvijetliti dok domaćin čita s ili piše na USB pogon za masovnu pohranu — to je pokazatelj aktivnosti vođen firmverom, a ne kvar.

Veličine pohrane

N6 se isporučuje s:

  • /flash4 MB FAT datotečni sustav, čitanje/pisanje.

  • /rom24 MB samo‑za‑čitanje memorijski mapirani ROMFS, koji se koristi za isporuku skripti i ML modela koji imaju koristi od mmap pristupa bez kopiranja.

  • /sdcard — pune veličine bilo koje umetnute microSD kartice (kada je prisutna), čitanje/pisanje.

Pokazatelj ozbiljnog kvara (hard fault)

Ako korisnički RGB LED brzo kruži kroz sve boje — dovoljno brzo da izgleda kao treperavi bijeli LED umjesto zasebnih nijansi — firmver je naišao na nepopravljiv ozbiljan kvar (hard fault). Ponovno upišite firmver za oporavak; ako ponovno upisivanje ne pomogne, ploča je možda fizički oštećena.

Softverske biblioteke

Pogledajte indeks biblioteka za potpuni popis modula — uključujući one koji su jedinstveni za N6 izgradnju.