OpenMV N6¶
OpenMV N6 dibangun di sekitar STMicroelectronics STM32N657 (Cortex‑M55 @ 800 MHz) dengan NPU on‑chip 1 GHz yang memiliki rating 600 GOPS INT8. Papan ini memadukan NPU dengan sensor global‑shutter PAG7936 1 MP pada carrier yang dapat dilepas, gigabit Ethernet, USB‑C kecepatan tinggi, Wi‑Fi, dan Bluetooth 5.1, serta menjalankan inferensi YOLOv8/YOLOv11 pada 30 FPS bersamaan dengan streaming video langsung.
Untuk datasheet lengkap, foto, dan dimensi, lihat halaman produk OpenMV N6.
Sorotan Utama¶
STM32N657 Cortex‑M55 pada 800 MHz (1280 DMIPS) dengan ARM Helium 128‑bit SIMD — throughput vektor 6,4 gigaops.
NPU 1 GHz, 600 GOPS INT8 — menjalankan deteksi YOLOv8/YOLOv11 pada 30 FPS.
ISP untuk RAW Bayer hingga 5MP, 2D GPU untuk penskalaan dan rotasi 3D, enkode H.264 hingga 1080p, dan codec JPEG berbasis hardware.
64 MB SDRAM eksternal (16‑bit @ 200 MHz DDR, 800 MB/s) ditambah 4,2 MB SRAM internal dan 32 MB flash oktal (200 MHz DDR, 400 MB/s).
Sensor global‑shutter warna 1 MP PAG7936.
IMU onboard (akselerometer + giroskop) dan mikrofon untuk fusi audio + gerak.
USB‑C kecepatan tinggi (480 Mb/s, batas arus 1,5 A), gigabit Ethernet (mendukung PoE via shield), Wi‑Fi a/b/g/n + Bluetooth 5.1 (antena chip atau opsi U.FL).
Soket microSD — SD hingga 2 GB, SDHC hingga 32 GB, SDXC hingga 2 TB.
Pengisi daya LiPo (fast charge 500 mA), ADC tegangan baterai, RTC dengan 8 KB RAM cadangan dan pin baterai cadangan tersendiri.
18 pin I/O, semua 3,3 V output / toleran 3,3 V, 20 mA per pin, mendukung interupsi.
LED RGB pengguna, tombol pengguna, dan LED status terpisah untuk pengisian daya / USB / daya VIN.
Peringatan
Pin I/O N6 tidak toleran terhadap 5 V. Jangan hubungkan perangkat ini langsung ke MCU 5 V seperti Arduino Mega. Daya N6 hanya melalui VIN.
Pinout¶
Referensi pin¶
Nama pin |
Fungsi |
|---|---|
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 (tidak ada ADC pada pin ini — lihat |
P6_ADC |
input ADC 12‑bit khusus (terhubung secara internal ke P6) |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM17 CH1 |
P10 |
TIM15 CH2 / sinkronisasi bingkai I/O |
P11 |
wakeup (aktif low, WKUP3) |
P12 |
RESET — hubungkan ke GND untuk mereset papan (bukan GPIO) |
P13 |
UART7 RX |
P14 |
UART7 TX |
P15 |
SPI4 CS |
P16 |
SPI4 SCK |
P17 |
SPI4 MISO |
P18 |
SPI4 MOSI |
SW |
tombol pengguna (aktif low) |
ONOFF (SW2) |
tombol wakeup deep‑sleep (aktif low, WKUP2) |
ST |
low pada daya VIN, high pada daya USB |
CHG |
aktif‑low; low saat baterai LiPo yang terhubung sedang mengisi daya |
PG |
aktif‑low; low ketika daya VIN atau USB tersedia |
BAT_ADC |
saluran ADC internal yang mengukur tegangan baterai LiPo yang terpasang |
LED_RED |
saluran merah LED RGB (aktif low) |
LED_GREEN |
saluran hijau LED RGB (aktif low) |
LED_BLUE |
saluran biru LED RGB (aktif low) |
Catatan
Jalur frame‑sync P10 adalah bus bersama. Jalur ini terhubung ke MCU, pin trigger/eksposur sensor kamera, dan header pengguna secara bersamaan. Arahnya ditentukan oleh aplikasi — MCU, sensor, atau sinyal eksternal dapat mengendarai jalur tersebut tergantung pada konfigurasi sensor (beberapa sensor dapat menggunakan pin yang sama sebagai input trigger atau output eksposur). Pastikan hanya satu driver yang aktif dalam satu waktu.
Catatan
ONOFF dan P11 merujuk ke rel RAW yang selalu aktif (bukan rel 3,3 V yang diaktifkan), sehingga keduanya tetap berfungsi saat bagian lain papan berada dalam mode deep sleep / daya rendah. Kedua input bersifat aktif low.
Pin-pin ini melewati level shifter sehingga dapat beroperasi pada rel RAW. Jika Anda benar-benar membutuhkan perilaku GPIO langsung 3,3 V pada ONOFF atau P11 (misalnya untuk menggerakkannya dari MCU 3,3 V tanpa melewati shifter), papan ini menyediakan pad pull‑up dan jumper 0‑ohm yang memungkinkan Anda melewati shifter. Ini adalah modifikasi hardware tingkat lanjut — sebagian besar pengguna sebaiknya membiarkannya.
Catatan
P15–P18 berbagi dengan Gigabit Ethernet PHY, yang terpasang dan aktif secara default. Untuk menggunakan pin-pin ini sebagai I/O pengguna, Anda harus mereflow resistor 0‑ohm di bagian belakang papan ke posisi GPIO. Ini hanya menonaktifkan gigabit Ethernet — Ethernet 10/100 Mb/s tetap bekerja pada pin khususnya.
Pin daya¶
3.3V — rel 3,3 V yang diatur. Hanya output pada N6 — jangan masukkan daya eksternal ke pin ini. Tersedia hingga 1 A untuk shield.
VIN — input 5 V. Memberi daya pada papan dan pengisi daya LiPo onboard.
RAW — input/output, selalu aktif (3,6 V – 5 V). Membawa sumber daya mana pun yang aktif (VIN, USB, atau baterai yang terpasang), dan juga dapat digunakan sebagai input. Anda harus menggunakan dioda seri saat menyuplai daya ke RAW — jika tidak, arus akan mengalir kembali ke VIN/USB dan merusak suplai atau proteksi onboard.
GND — ground bersama.
Catatan
Chip manajemen daya onboard secara otomatis memilih USB atau VIN yang memiliki tegangan lebih tinggi untuk memberi daya pada papan dan pengisi baterai. Jika LiPo terpasang, baterai akan mengisi daya pada headroom yang tersisa, dan kontroler beralih ke baterai untuk menjaga papan tetap berjalan jika VIN/USB turun atau dicabut.
Catatan
Bagian belakang papan memiliki pad solder untuk baterai cadangan RTC 3,3 V eksternal. Menghubungkan sel koin ke pad ini menjaga RTC dan 8 KB RAM cadangan tetap berjalan saat bagian lain papan tidak mendapat daya.
Tip
Gunakan estimator umur baterai untuk memodelkan berapa lama N6 akan berjalan pada baterai untuk siklus aktif / deep-sleep tertentu.
Pin Ethernet¶
N6 mengekspos pasangan MDI Ethernet PHY pada pad khusus di sebelah header GPIO. Pin MDI tidak aman untuk langsung dihubungkan ke RJ45 — magnetics Ethernet (transformator isolasi, baik yang terintegrasi dalam magjack maupun pada shield) diperlukan antara PHY dan kabel. Shield PoE OpenMV sudah menyertakannya; jika Anda membuat jack sendiri, gunakan RJ45 terintegrasi magnetics atau transformator eksternal.
ETH_LED — LED tautan/aktivitas. Aktif low saat tautan terhubung; berkedip saat ada lalu lintas.
DA P / DA N — pasangan A (TX pada 10/100, digunakan oleh semua kecepatan).
DB P / DB N — pasangan B (RX pada 10/100, digunakan oleh semua kecepatan).
DC P / DC N — pasangan C, hanya digunakan pada gigabit.
DD P / DD N — pasangan D, hanya digunakan pada gigabit.
10/100 Mb/s hanya membutuhkan pasangan A dan B. Gigabit membutuhkan semua empat pasangan A–D.
Pin pemulihan dan debug¶
RESET — hubungkan ke GND untuk mereset papan. Melepasnya memungkinkan MCU untuk memulai secara normal.
BOOT0 — hubungkan ke 3,3 V saat menghidupkan papan untuk masuk ke mode bootloader ROM. OpenMV IDE menggunakan mode ini untuk mem-flash ulang bootloader onboard.
BOOT1 — sakelar yang menempatkan papan ke mode developer untuk digunakan dengan tooling ST (ST‑LINK yang terhubung ke header SWD/JTAG ARM 10‑pin). Biarkan ini dinonaktifkan untuk operasi normal dengan firmware dan tool OpenMV.
Header SWD/JTAG ARM 10‑pin khusus sudah dipasang, kompatibel dengan adaptor ST‑LINK dan SEGGER J‑Link.
Periferal onboard¶
LED¶
N6 memiliki dua LED RGB:
LED RGB Pengguna — dapat dikontrol oleh perangkat lunak, diekspos sebagai
LED_RED,LED_GREEN, danLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
LED Daya — digerakkan langsung oleh hardware manajemen daya onboard, tanpa kontrol perangkat lunak. Gunakan untuk melihat kondisi suplai daya secara sekilas.
Saat berjalan:
Saluran
Makna
Biru
VIN memberi daya pada papan (mati saat USB)
Hijau
Daya USB atau VIN tersedia
Merah
mengisi daya baterai LiPo yang terpasang
Dalam deep sleep semua saluran mati kecuali Merah, yang masih menyala saat LiPo sedang mengisi daya.
Pin status daya¶
Tiga input status aktif‑low memungkinkan firmware melihat apa yang dilakukan chip manajemen daya onboard:
ST — low saat papan berjalan pada VIN, high saat berjalan pada daya USB.
CHG — low saat baterai LiPo yang terpasang sedang mengisi daya.
PG — low ketika daya VIN atau USB tersedia.
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()
Sensor kamera¶
PAG7936 digerakkan melalui modul csi --- sensor kamera
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()
Sensor terletak pada modul yang dapat dilepas — tukar dengan salah satu modul kamera OpenMV lainnya (global shutter, termal, resolusi lebih tinggi, dll.) tanpa mengubah bagian papan yang lain.
PAG7936 mendukung mode trigger — integrasi piksel bersesuaian tepat dengan setiap panggilan csi.CSI.snapshot daripada clock bingkai yang berjalan bebas, berguna untuk menyinkronkan pengambilan gambar ke suatu peristiwa eksternal atau sensor lain. Aktifkan melalui csi.CSI.ioctl dengan csi.IOCTL_SET_TRIGGERED_MODE. Laju bingkai turun sekitar setengah dari mode free-running karena readout tidak lagi di-pipeline dengan integrasi bingkai berikutnya:
cam.ioctl(csi.IOCTL_SET_TRIGGERED_MODE, True)
NPU¶
NPU Neural‑ART 1 GHz N6 (600 GOPS INT8) diekspos melalui modul ml --- Machine Learning. Model yang disimpan di filesystem read-only /rom dimuat langsung dari flash tanpa menyalin ke RAM, sehingga bahkan detektor besar pun dapat ditampung dengan nyaman bersamaan dengan buffer bingkai langsung. Jalankan detektor YOLOv8 pada setiap bingkai dan gambar prediksi di atas citra langsung:
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 onboard ditangkap melalui audio --- Modul Audio. Setiap buffer hadir sebagai bytearray PCM signed 16‑bit, yang memudahkan pengumpanan ke ulab/numpy untuk DSP cepat. Detektor kenyaringan sederhana — cetak setiap kali volume RMS melewati ambang batas:
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¶
Akselerometer + giroskop onboard di bawah modul kamera diekspos melalui imu --- sensor imu
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¶
CYW43439 onboard diekspos melalui network --- konfigurasi jaringan sebagai antarmuka station. Setelah terhubung, ipconfig("addr4") mengembalikan pasangan (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¶
CYW43439 yang sama juga mengekspos Bluetooth 5.1. Gunakan aioble --- Async BLE untuk BLE yang ramah asyncio — misalnya, beriklan sebagai periferal dan tunggu central untuk terhubung:
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¶
Ketika RJ45 (dengan magnetics) terhubung ke pad MDI, PHY gigabit muncul sebagai antarmuka LAN. DHCP berjalan secara otomatis setelah tautan terhubung:
import network, time
lan = network.LAN()
lan.active(True)
while not lan.isconnected():
time.sleep(1)
print("Ethernet IP:", lan.ipconfig("addr4")[0])
Kartu microSD¶
Ketika kartu dimasukkan, kartu tersebut akan dipasang secara otomatis di /sdcard dan dapat digunakan melalui sistem file biasa:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Referensi bus¶
GPIO¶
Gunakan machine.Pin untuk membaca atau menggerakkan salah satu pin yang tercetak di silkscreen. Output adalah 3,3 V CMOS dan dapat sink/source hingga 20 mA per pin.
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())
Setiap pin input juga dapat memicu interupsi pada transisi tepi:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Bus |
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¶
Bus |
SCL |
SDA |
|---|---|---|
I2C2 |
P4 |
P5 |
from machine import I2C
i2c = I2C(2, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")
Hardware yang sama juga dapat digunakan dalam mode target (slave) melalui machine.I2CTarget untuk mengekspos wilayah memori ke kontroler I²C lainnya:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Bus |
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¶
Bus |
TX |
RX |
|---|---|---|
CAN1 |
P2 |
P3 |
Catatan
CAN belum didukung pada papan ini di firmware 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¶
Kedua saluran ADC melewati pembagi tegangan yang di-buffer dengan op‑amp sebelum mencapai MCU, sehingga read_u16() dipetakan ke tegangan input full‑scale yang berbeda pada setiap pin.
Pin |
Full‑scale |
Catatan |
|---|---|---|
P6_ADC |
~3,3 V |
pad serbaguna, terhubung secara internal ke P6 |
BAT_ADC |
~5,0 V |
saluran internal untuk baterai LiPo |
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 |
Timer / saluran |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM12 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM17 CH1 |
P10 |
TIM15 CH2 |
Gerakkan salah satunya melalui machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P6"), freq=1_000, duty_u16=32768)
Bus software bit‑banged¶
machine.SoftI2C dan machine.SoftSPI bekerja pada GPIO mana pun jika Anda membutuhkan bus tambahan.
Sensor termal (off‑board)¶
Firmware menyertakan driver fir --- driver sensor termal (fir == far infrared) untuk imager termal yang dihubungkan secara eksternal:
MLX90621 — array IR 16 × 4
MLX90640 — array IR 32 × 24
MLX90641 — array IR 16 × 12
AMG8833 — array IR 8 × 8
Hubungkan modul ke bus I²C papan dan baca bingkai dengan 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())
Driver fir hanya berkomunikasi dengan sensor melalui I²C 2 — hubungkan modul ke P4 (SCL) dan P5 (SDA).
Penentuan waktu¶
time¶
Modul time mencakup penundaan blocking, tick monotonic, dan pengukuran waktu yang berlalu:
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)
Timer virtual¶
machine.Timer menjadwalkan callback periodik atau one‑shot tanpa mengkonsumsi slot timer hardware. Berikan -1 sebagai id untuk menggunakan timer virtual (perangkat lunak):
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"))
Nilai periode dalam milidetik. Panggil deinit() untuk menghentikan dan melepaskan slot.
Real‑time clock¶
machine.RTC menjaga waktu jam dinding melewati reset dan (dengan baterai cadangan 3,3 V opsional yang dihubungkan ke pad belakang, lihat Pin daya) melewati kehilangan daya penuh:
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 juga berjalan melalui deep sleep, sehingga Anda dapat menggunakannya sebagai sumber wakeup untuk machine.deepsleep().
Watchdog¶
machine.WDT mereset papan jika aplikasi hang. Setelah dimulai, watchdog tidak dapat dihentikan atau dikonfigurasi ulang — beri makan secara berkala di dalam loop utama Anda:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Info boot dan runtime¶
Jendela bootloader USB¶
Pada setiap power‑up, kamera menjalankan bootloader singkat (beberapa detik) yang memungkinkan OpenMV IDE memperbarui firmware tanpa pengguna harus masuk ke mode DFU. Setelah jendela berakhir, bootloader menyerahkan ke boot.py lalu ke main.py.
Skrip yang sedang berjalan dapat masuk kembali ke bootloader sesuai permintaan dengan memanggil machine.bootloader()
import machine
machine.bootloader()
Filesystem dan urutan boot¶
Firmware N6 memasang hingga tiga filesystem saat boot:
Flash internal — selalu dipasang di
/flash. Menyimpanmain.pydanREADME.txtsecara default; dibuat pada boot pertama.Kartu microSD — jika kartu dimasukkan, kartu dipasang di
/sdcard.ROMFS — filesystem read‑only, memory‑mapped di
/romyang digunakan untuk mengirimkan aset data besar (misalnya model AI) yang mendapat manfaat dari akses zero‑copy. Dipasang secara otomatis oleh MicroPython saat startup, sebelum Python pengguna mana pun berjalan.
Setelah pemasangan, direktori kerja diatur ke /sdcard saat kartu tersedia, jika tidak ke /flash. Interpreter kemudian menjalankan skrip dari direktori tersebut:
boot.pydijalankan pada setiap soft reset (cold boot,Ctrl‑Ddari REPL, atau setiap kali skrip yang berjalan kembali).main.pydijalankan hanya pada cold boot, segera setelahboot.py. Soft reset berikutnya menjalankan ulangboot.pytetapi langsung ke REPL — untuk menjalankan ulangmain.pyAnda harus mereset papan sepenuhnya.
Meletakkan boot.py atau main.py ke kartu SD akan mengganti salinan di flash tanpa menyentuhnya — kedua file dicari di direktori boot (/sdcard saat kartu dipasang, jika tidak /flash).
main.py default yang dikirimkan pada papan yang baru di-flash hanya mengedipkan saluran biru LED RGB pengguna sebagai heartbeat (dua pulsa pendek, jeda pendek), sehingga Anda dapat mengetahui bahwa firmware telah boot dengan bersih tanpa host yang terpasang.
sys.path diperluas untuk menyertakan ketiga filesystem dan subdirektori lib/-nya, sehingga modul yang dapat diimpor dapat berada di /flash/lib, /sdcard/lib, atau /rom/lib.
Untuk memaksa sistem mengabaikan kartu SD yang dimasukkan (misalnya untuk menjalankan main.py flash meskipun ada kartu), buat file kosong bernama SKIPSD di root /flash.
Ketika terhubung melalui USB, filesystem boot (/sdcard jika ada kartu, jika tidak /flash) juga dihitung sebagai drive USB mass‑storage di host, memungkinkan Anda mengedit boot.py, main.py, dan file lain secara langsung. Eject drive sebelum mereset kamera agar host membuang penulisan yang di-cache.
Catatan
Karena OS memperlakukan drive sebagai perangkat blok pasif, file yang dibuat atau dimodifikasi oleh kode yang berjalan pada OpenMV Cam tidak akan muncul sampai host me-mount ulang drive. Jika OS dan OpenMV Cam menulis filesystem yang sama secara bersamaan, OS akan menang dan menimpa perubahan yang dibuat oleh kamera. Gunakan kartu SD untuk data apa pun yang ditulis kembali oleh skrip, dan mount ulang sebelum membaca file tersebut dari host.
Catatan
Saluran merah LED RGB pengguna mungkin menyala sebentar saat host membaca dari atau menulis ke drive USB mass‑storage — ini adalah indikator aktivitas yang digerakkan firmware, bukan kesalahan.
Ukuran penyimpanan¶
N6 dikirimkan dengan:
/flash— filesystem FAT 4 MB, baca/tulis./rom— ROMFS read-only yang dipetakan ke memori 24 MB, digunakan untuk mengirimkan skrip dan model ML yang mendapat manfaat dari akses mmap zero-copy./sdcard— ukuran penuh kartu microSD yang dimasukkan (jika ada), baca/tulis.
Indikator hard‑fault¶
Jika LED RGB pengguna berputar cepat melalui semua warna — cukup cepat sehingga cenderung terlihat seperti LED putih berkelip daripada warna yang berbeda — firmware telah mengalami hard fault yang tidak dapat dipulihkan. Flash ulang firmware untuk memulihkan; jika mem-flash ulang tidak membantu, papan mungkin rusak secara fisik.
Pustaka perangkat lunak¶
Lihat indeks library untuk daftar lengkap modul — termasuk yang unik untuk build N6.