OpenMV N6¶
OpenMV N6 побудований на базі мікроконтролера STMicroelectronics STM32N657 (Cortex‑M55 @ 800 МГц) з вбудованим NPU на 1 ГГц, розрахованим на 600 GOPS INT8. Плата поєднує NPU з датчиком PAG7936 1 МП із глобальним затвором на знімному модулі, гігабітним Ethernet, USB‑C на повній швидкості, Wi‑Fi та Bluetooth 5.1 і здатна виконувати інференс YOLOv8/YOLOv11 зі швидкістю 30 FPS паралельно з потоковим відео.
Повний технічний паспорт, фотографії та розміри дивіться на сторінці продукту OpenMV N6.
Особливості¶
STM32N657 Cortex‑M55 на 800 МГц (1280 DMIPS) з ARM Helium 128‑розрядним SIMD — 6,4 гігаопераційна векторна пропускна здатність.
NPU 1 ГГц, 600 GOPS INT8 — виконує виявлення YOLOv8/YOLOv11 зі швидкістю 30 FPS.
ISP для RAW Bayer до 5 МП, 2D GPU для масштабування та 3D-обертання, кодування H.264 до 1080p і апаратний кодек JPEG.
64 МБ зовнішньої SDRAM (16‑розрядна @ 200 МГц DDR, 800 МБ/с) плюс 4,2 МБ внутрішньої SRAM і 32 МБ octal flash (200 МГц DDR, 400 МБ/с).
PAG7936 — кольоровий датчик 1 МП із глобальним затвором.
Вбудований IMU (акселерометр + гіроскоп) і мікрофон для аудіо та злиття руху.
USB‑C на повній швидкості (480 Мб/с, обмеження струму 1,5 А), гігабітний Ethernet (підтримка PoE через шилд), Wi‑Fi a/b/g/n + Bluetooth 5.1 (вбудована антена або варіант U.FL).
Слот microSD — SD до 2 ГБ, SDHC до 32 ГБ, SDXC до 2 ТБ.
Зарядний пристрій LiPo (швидка зарядка 500 мА), ADC напруги акумулятора, RTC із 8 КБ резервної RAM і окремим виводом резервного живлення.
18 виводів вводу/виводу, всі з виходом 3,3 В / сумісні з 3,3 В, 20 мА на вивід, з підтримкою переривань.
RGB LED для користувача, кнопка користувача та окремий індикаторний LED для зарядки / USB / живлення VIN.
Попередження
Виводи вводу/виводу N6 не є сумісними з 5 В. Не підключайте пристрій безпосередньо до 5‑вольтового MCU на кшталт Arduino Mega. Живіть N6 лише через VIN.
Розпіновка¶
Довідник виводів¶
Назва виводу |
Функція |
|---|---|
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 (немає ADC на цьому виводі — див. |
P6_ADC |
виділений 12‑розрядний вхід ADC (внутрішньо підключений до P6) |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM17 CH1 |
P10 |
TIM15 CH2 / синхронізація кадрів вводу/виводу |
P11 |
пробудження (активний низький рівень, WKUP3) |
P12 |
RESET — з’єднати з GND для скидання плати (не є GPIO) |
P13 |
UART7 RX |
P14 |
UART7 TX |
P15 |
SPI4 CS |
P16 |
SPI4 SCK |
P17 |
SPI4 MISO |
P18 |
SPI4 MOSI |
SW |
кнопка користувача (активний низький рівень) |
ONOFF (SW2) |
кнопка пробудження після глибокого сну (активний низький рівень, WKUP2) |
ST |
низький при живленні від VIN, високий при живленні від USB |
CHG |
активний низький; низький рівень під час зарядки підключеного акумулятора LiPo |
PG |
активний низький; низький рівень, коли присутнє живлення VIN або USB |
BAT_ADC |
внутрішній канал ADC, що вимірює напругу підключеного акумулятора LiPo |
LED_RED |
червоний канал RGB LED (активний низький) |
LED_GREEN |
зелений канал RGB LED (активний низький) |
LED_BLUE |
синій канал RGB LED (активний низький) |
Примітка
Лінія синхронізації кадрів P10 є спільною шиною. Вона підключена до MCU, виводу тригера / витримки датчика камери та заголовка користувача одночасно. Напрямок визначається застосунком — MCU, датчик або зовнішній сигнал можуть керувати нею залежно від конфігурації датчика (деякі датчики можуть використовувати той самий вивід як вхід тригера або вихід витримки). Переконайтеся, що активний лише один драйвер одночасно.
Примітка
ONOFF і P11 відносяться до завжди увімкненої шини RAW (не до комутованої шини 3,3 В), тому вони залишаються функціональними, поки решта плати перебуває в режимі глибокого сну / низького енергоспоживання. Обидва входи активні при низькому рівні.
Ці виводи проходять через перетворювачі рівня, щоб вони могли працювати на шині RAW. Якщо вам абсолютно необхідна поведінка GPIO безпосередньо 3,3 В на ONOFF або P11 (наприклад, щоб керувати ними від MCU на 3,3 В без проходження через перетворювач), плата має підтяжні та нульові перемичкові контактні майданчики, які дозволяють обійти перетворювач. Це складна апаратна модифікація — більшість користувачів не повинні її чіпати.
Примітка
P15–P18 використовуються спільно з PHY гігабітного Ethernet, який підключений і активний за замовчуванням. Щоб використовувати ці виводи як GPIO користувача, необхідно перенести нульовий резистор на зворотній стороні плати на позицію GPIO. Це вимикає лише гігабітний Ethernet — Ethernet 10/100 Мб/с продовжує працювати на власних виводах.
Виводи живлення¶
3.3V — стабілізована шина 3,3 В. Лише вихід на N6 — не подавайте зовнішнє живлення на цей вивід. До 1 А доступно для шилдів.
VIN — вхід 5 В. Живить плату та вбудований зарядний пристрій LiPo.
RAW — вхід/вихід, завжди увімкнений (3,6 В – 5 В). Несе будь-яке активне джерело (VIN, USB або підключений акумулятор), а також може використовуватися як вхід. Під час подачі живлення в RAW необхідно використовувати послідовний діод — інакше струм потече назад у VIN/USB і пошкодить джерело або вбудований захист.
GND — загальна земля.
Примітка
Вбудована мікросхема управління живленням автоматично вибирає USB або VIN з вищою напругою для живлення плати та зарядного пристрою. Якщо підключено LiPo, він заряджається на залишку напруги, а контролер переходить на акумулятор для підтримки роботи плати, якщо VIN/USB знизиться або буде відключено.
Примітка
На зворотній стороні плати є контактні майданчики для підпаювання зовнішнього резервного акумулятора RTC на 3,3 В. Підключення монетного елемента до цих майданчиків підтримує роботу RTC і 8 КБ резервної RAM, коли решта плати знеструмлена.
Порада
Використовуйте оцінювач ресурсу акумулятора для моделювання тривалості роботи N6 від акумулятора при заданому циклі активності / глибокого сну.
Виводи Ethernet¶
N6 виводить пари MDI PHY Ethernet на виділені майданчики поряд із заголовком GPIO. Виводи MDI не можна підключати напряму до RJ45 — між PHY та кабелем обов’язково потрібні магнітні компоненти Ethernet (трансформатор ізоляції, вбудований у magjack або на шилді). OpenMV PoE shield містить їх; якщо ви використовуєте власне гніздо, застосовуйте RJ45 із вбудованими магнітними компонентами або зовнішній трансформатор.
ETH_LED — LED зв’язку/активності. Активний низький рівень при наявності зв’язку; мигає при трафіку.
DA P / DA N — пара A (TX у 10/100, використовується на всіх швидкостях).
DB P / DB N — пара B (RX у 10/100, використовується на всіх швидкостях).
DC P / DC N — пара C, використовується лише на гігабітній швидкості.
DD P / DD N — пара D, використовується лише на гігабітній швидкості.
10/100 Мб/с потребує лише пар A і B. Гігабіт потребує всіх чотирьох пар A–D.
Виводи відновлення та налагодження¶
RESET — з’єднати з GND для скидання плати. Відпускання дозволяє MCU нормально стартувати.
BOOT0 — з’єднати з 3,3 В під час увімкнення плати для входу в режим ROM завантажувача. OpenMV IDE використовує цей режим для перепрошивки вбудованого завантажувача.
BOOT1 — перемикач, що переводить плату в режим розробника для використання з інструментами ST (ST‑LINK, підключений до 10‑контактного заголовка ARM SWD/JTAG). Залишайте вимкненим для звичайної роботи з мікропрограмою та інструментами OpenMV.
Встановлений виділений заголовок ARM 10‑pin SWD/JTAG, сумісний з адаптерами ST‑LINK і SEGGER J‑Link.
Вбудовані периферійні пристрої¶
Світлодіоди¶
N6 має два RGB LED:
RGB LED користувача — керований програмно, доступний як
LED_RED,LED_GREENіLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
LED живлення — керується безпосередньо апаратною схемою управління живленням, без програмного контролю. Використовуйте його для швидкого визначення стану живлення.
Під час роботи:
Канал
Значення
Синій
VIN живить плату (вимкнений при USB)
Зелений
Присутнє живлення USB або VIN
Червоний
зарядка підключеного акумулятора LiPo
У глибокому сні всі канали вимкнені крім Червоного, який все ще світиться під час зарядки LiPo.
Виводи стану живлення¶
Три входи активного низького рівня дозволяють мікропрограмі бачити, що робить вбудована мікросхема управління живленням:
ST — низький рівень, коли плата працює від VIN, високий — при роботі від USB.
CHG — низький рівень під час зарядки підключеного акумулятора LiPo.
PG — низький рівень при наявності живлення VIN або 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()
Датчик камери¶
PAG7936 керується через модуль csi — датчики камери
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()
Датчик знаходиться на знімному модулі — замініть його на будь-який інший модуль камери OpenMV (глобальний затвор, тепловізійний, більш висока роздільна здатність тощо) без змін на решті плати.
PAG7936 підтримує режим тригера — інтеграція пікселів точно збігається з кожним викликом csi.CSI.snapshot, а не з вільно-запущеним тактовим сигналом кадру, що корисно для синхронізації захоплення із зовнішньою подією або іншим датчиком. Увімкніть це через csi.CSI.ioctl з csi.IOCTL_SET_TRIGGERED_MODE. Частота кадрів падає приблизно до половини вільно-запущеного режиму, оскільки зчитування більше не конвеєризується з інтеграцією наступного кадру:
cam.ioctl(csi.IOCTL_SET_TRIGGERED_MODE, True)
NPU¶
NPU Neural‑ART на 1 ГГц N6 (600 GOPS INT8) доступний через модуль ml — Машинне навчання. Моделі, збережені у файловій системі лише для читання /rom, завантажуються безпосередньо з флеш-пам’яті без копіювання в RAM, тому навіть великі детектори легко поміщаються поряд із живим кадровим буфером. Запускайте детектор YOLOv8 на кожному кадрі та малюйте передбачення поверх живого зображення:
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")
Мікрофон¶
Вбудований мікрофон захоплюється через audio — Аудіомодуль. Кожен буфер надходить як знакова 16‑розрядна PCM bytearray, що дозволяє легко передавати дані в ulab/numpy для швидкої обробки сигналів. Простий детектор гучності — виводити повідомлення щоразу, коли гучність RMS перевищує поріг:
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¶
Вбудований акселерометр + гіроскоп під модулем камери доступний через imu — датчик 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 доступний через network — налаштування мережі як інтерфейс станції. Після підключення ipconfig("addr4") повертає пару (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 також забезпечує Bluetooth 5.1. Використовуйте aioble — Async BLE для зручного з asyncio BLE — наприклад, оголошуйтеся як периферійний пристрій і чекайте підключення центрального пристрою:
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¶
Коли RJ45 (з магнітними компонентами) підключений до майданчиків MDI, гігабітний PHY з’являється як інтерфейс LAN. DHCP запускається автоматично після встановлення зв’язку:
import network, time
lan = network.LAN()
lan.active(True)
while not lan.isconnected():
time.sleep(1)
print("Ethernet IP:", lan.ipconfig("addr4")[0])
Карта microSD¶
Коли картка вставлена, вона автоматично монтується в /sdcard і доступна через звичайну файлову систему:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Довідник шин¶
GPIO¶
Використовуйте machine.Pin для читання або керування будь-яким із шовкографічних виводів. Виходи — 3,3 В CMOS і можуть поглинати/забезпечувати до 20 мА на вивід.
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 |
|---|---|---|
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¶
Шина |
SCL |
SDA |
|---|---|---|
I2C2 |
P4 |
P5 |
from machine import I2C
i2c = I2C(2, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")
Те саме апаратне забезпечення також може використовуватися в режимі ведений (slave) через machine.I2CTarget для відкриття доступу до області пам’яті іншому контролеру I²C:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
Шина |
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¶
Шина |
TX |
RX |
|---|---|---|
CAN1 |
P2 |
P3 |
Примітка
CAN поки не підтримується на цій платі у мікропрограмі 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¶
Обидва канали ADC проходять через буферований операційним підсилювачем дільник напруги перед надходженням до MCU, тому read_u16() відповідає різній вхідній напрузі повної шкали на кожному виводі.
Вивід |
Повна шкала |
Примітки |
|---|---|---|
P6_ADC |
~3,3 В |
майданчик загального призначення, внутрішньо підключений до P6 |
BAT_ADC |
~5,0 В |
внутрішній канал для акумулятора 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¶
Вивід |
Таймер / канал |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM12 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM17 CH1 |
P10 |
TIM15 CH2 |
Керуйте будь-яким із них через machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P6"), freq=1_000, duty_u16=32768)
Програмні шини з бітовим маніпулюванням¶
machine.SoftI2C і machine.SoftSPI працюють на будь-якому GPIO, якщо вам потрібна додаткова шина.
Тепловий датчик (зовнішній)¶
Мікропрограма містить драйвер fir — драйвер теплового датчика (fir == далекий інфрачервоний діапазон) для зовнішньо підключених теплових сенсорів:
MLX90621 — ІЧ-масив 16 × 4
MLX90640 — ІЧ-масив 32 × 24
MLX90641 — ІЧ-масив 16 × 12
AMG8833 — ІЧ-масив 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 охоплює блокуючі затримки, монотонні тики та вимірювання плинного часу:
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 як ідентифікатор для використання віртуального (програмного) таймера:
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"))
Значення periodу задаються в мілісекундах. Викличте deinit() для зупинки та звільнення слоту.
Годинник реального часу¶
machine.RTC зберігає астрономічний час між скиданнями і (з необов’язковим резервним акумулятором 3,3 В, підключеним до задніх майданчиків, див. Виводи живлення) при повній втраті живлення:
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 також працює під час глибокого сну, тому ви можете використовувати його як джерело пробудження для machine.deepsleep().
Сторожовий таймер¶
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()
Файлова система та порядок завантаження¶
Мікропрограма N6 монтує до трьох файлових систем при завантаженні:
Внутрішня флеш-пам’ять — завжди монтується в
/flash. За замовчуванням міститьmain.pyтаREADME.txt; створюється при першому завантаженні.Карта microSD — якщо картка вставлена, монтується в
/sdcard.ROMFS — файлова система лише для читання з відображенням у пам’яті в
/rom, яка використовується для постачання великих ресурсів даних (наприклад, моделей ШІ), що отримують переваги від доступу без копіювання. Монтується автоматично MicroPython при запуску, до виконання будь-якого Python-коду користувача.
Після монтування робочий каталог встановлюється в /sdcard, якщо картка присутня, інакше в /flash. Потім інтерпретатор запускає скрипти з цього каталогу:
boot.pyвиконується при кожному м’якому скиданні (холодне завантаження,Ctrl‑Dз REPL або щоразу, коли запущений скрипт завершується).main.pyвиконується лише при холодному завантаженні, одразу післяboot.py. Наступні м’які скидання повторно запускаютьboot.py, але переходять безпосередньо в REPL — щоб перезапуститиmain.py, необхідно повністю скинути плату.
Розміщення boot.py або main.py на SD-картці замінює копію у флеш-пам’яті без її зміни — обидва файли шукаються в каталозі завантаження (/sdcard, якщо картка змонтована, інакше /flash).
Стандартний main.py, що постачається на щойно прошитій платі, просто блимає синім каналом RGB LED користувача як серцебиття (два коротких імпульси, короткий проміжок), щоб можна було переконатися, що мікропрограма завантажилася без проблем без підключеного хоста.
sys.path розширено для включення всіх трьох файлових систем та їхніх підкаталогів lib/, тому імпортовані модулі можуть знаходитися в /flash/lib, /sdcard/lib або /rom/lib.
Щоб змусити систему ігнорувати вставлену SD-картку (наприклад, для запуску main.py флеш-пам’яті навіть з картою), створіть порожній файл з назвою SKIPSD в кореневому каталозі /flash.
При підключенні через USB файлова система завантаження (/sdcard, якщо картка присутня, інакше /flash) також відображається як USB-накопичувач на хості, дозволяючи редагувати boot.py, main.py та будь-які інші файли безпосередньо. Вийміть накопичувач перед скиданням камери, щоб хост скинув кешовані записи.
Примітка
Оскільки ОС сприймає накопичувач як пасивний блоковий пристрій, файли, створені або змінені кодом, що виконується на OpenMV Cam, не відображатимуться до перемонтування накопичувача хостом. Якщо і ОС, і OpenMV Cam записують в ту саму файлову систему одночасно, ОС переможе і перезапише зміни, зроблені камерою. Використовуйте SD-картку для будь-яких даних, які скрипт записує назад, і перемонтовуйте перед читанням цих файлів з хоста.
Примітка
Червоний канал RGB LED користувача може коротко засвічуватися, поки хост читає або записує на USB-накопичувач — це індикатор активності на рівні мікропрограми, а не несправність.
Розміри сховища¶
N6 постачається з:
/flash— файлова система FAT 4 МБ, читання/запис./rom— ROMFS лише для читання з відображенням у пам’яті 24 МБ, використовується для постачання скриптів і моделей МН із доступом через mmap без копіювання./sdcard— повний розмір будь-якої вставленої карти microSD (якщо присутня), читання/запис.
Індикатор жорсткого збою¶
Якщо RGB LED користувача швидко перебирає всі кольори — достатньо швидко, щоб це схоже радше на миготливий білий LED, ніж на окремі відтінки — мікропрограма зіткнулася з невідновлюваним жорстким збоєм. Перепрошийте мікропрограму для відновлення; якщо перепрошивка не допомагає, плата може бути фізично пошкоджена.
Програмні бібліотеки¶
Дивіться індекс бібліотек для повного списку модулів — включно з тими, що є унікальними для збірки N6.