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.
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¶
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 |
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_GREENiLED_BLUEfrom 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.
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žimain.pyiREADME.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
/romkoji 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.pyse izvršava pri svakom mekom resetu (hladno pokretanje,Ctrl‑Diz REPL‑a ili kad god se skripta u izvođenju vrati).main.pyse izvršava samo pri hladnom pokretanju, neposredno nakonboot.py. Naknadni meki resetovi ponovno pokrećuboot.py, ali padaju izravno u REPL — za ponovno pokretanjemain.pymorate 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:
/flash— 4 MB FAT datotečni sustav, čitanje/pisanje./rom— 24 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.