OpenMV N6¶
OpenMV N6 は STMicroelectronics の STM32N657(Cortex‑M55 @ 800 MHz)を中心に構成され、INT8 で 600 GOPS の性能を持つ 1 GHz のオンチップ NPU を搭載しています。この NPU を、取り外し可能なキャリアに載せた PAG7936 1 MP グローバルシャッターセンサー、ギガビットイーサネット、USB‑C ハイスピード、Wi‑Fi、Bluetooth 5.1 と組み合わせ、ライブ映像のストリーミングと並行して YOLOv8/YOLOv11 の推論を 30 FPS で実行します。
完全なデータシート、写真、寸法については OpenMV N6 製品ページ を参照してください。
主な特長¶
STM32N657 Cortex‑M55 800 MHz(1280 DMIPS)、ARM Helium 128 ビット SIMD 搭載 — 6.4 ギガオペレーションのベクトルスループット。
1 GHz NPU、INT8 で 600 GOPS — YOLOv8/YOLOv11 の検出を 30 FPS で実行。
最大 5MP の RAW Bayer に対応する ISP、スケーリングと 3D 回転に対応する 2D GPU、1080p までの H.264 エンコード、ハードウェア JPEG コーデック。
64 MB の外部 SDRAM(16 ビット @ 200 MHz DDR、800 MB/s)に加え、4.2 MB の内部 SRAM と 32 MB のオクタルフラッシュ(200 MHz DDR、400 MB/s)。
PAG7936 1 MP カラーグローバルシャッターセンサー。
音声とモーションの融合のための オンボード IMU(加速度センサー+ジャイロスコープ)と マイク。
ハイスピード USB‑C(480 Mb/s、1.5 A 電流制限)、ギガビットイーサネット(シールド経由で PoE 対応)、Wi‑Fi a/b/g/n + Bluetooth 5.1(チップアンテナまたは U.FL オプション)。
microSD ソケット — SD は最大 2 GB、SDHC は最大 32 GB、SDXC は最大 2 TB。
LiPo 充電器(500 mA 急速充電)、バッテリー電圧 ADC、8 KB のバックアップ RAM 付き RTC、専用のバックアップバッテリーピン。
18 本の I/O ピン、すべて 3.3 V 出力 / 3.3 V トレラント、ピンあたり 20 mA、割り込み対応。
ユーザー RGB LED、ユーザーボタン、充電 / USB / VIN 電源用の独立したステータス LED。
警告
N6 の I/O ピンは 5 V トレラントではありません。Arduino Mega のような 5 V の MCU にデバイスを直接接続しないでください。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 / フレーム同期 I/O |
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 |
接続された LiPo バッテリー電圧を測定する内部 ADC チャンネル |
LED_RED |
RGB LED の赤チャンネル(アクティブロー) |
LED_GREEN |
RGB LED の緑チャンネル(アクティブロー) |
LED_BLUE |
RGB LED の青チャンネル(アクティブロー) |
注釈
P10 のフレーム同期ラインは共有バスです。 これは MCU、カメラセンサーのトリガー / 露出ピン、そしてユーザーヘッダーのすべてに同時に配線されています。方向はアプリケーション依存で、センサーの構成方法に応じて MCU、センサー、または外部信号がこれを駆動できます(一部のセンサーは同じピンをトリガー入力 または 露出出力として使用できます)。同時に駆動するドライバーが 1 つだけになるようにしてください。
注釈
ONOFF と P11 は常時オンの RAW レール(切り替え式の 3.3 V レールではない)を基準としているため、ボードの残りの部分がディープスリープ / 低電力モードにある間も機能を維持します。どちらの入力もアクティブローです。
これらのピンは RAW レールに載せられるようにレベルシフターを通っています。ONOFF または P11 で 3.3 V 直結の GPIO 動作がどうしても必要な場合(例えばシフターを通さずに 3.3 V の MCU から駆動する場合)、ボードにはシフターをバイパスできるプルアップと 0 オームのジャンパーパッドが用意されています。これは上級者向けのハードウェア改造です — ほとんどのユーザーはそのままにしておくべきです。
注釈
P15〜P18 はギガビットイーサネット PHY と共有されており、デフォルトで配線され有効になっています。これらのピンをユーザー I/O として使用するには、ボード背面の 0 オーム抵抗を GPIO 位置にリフローし直す必要があります。これによって無効になるのはギガビットイーサネットのみで、10/100 Mb/s イーサネットは専用ピンで動作し続けます。
電源ピン¶
3.3V — レギュレートされた 3.3 V レール。N6 では 出力のみ です — このピンに外部電源を供給しないでください。シールド用に最大 1 A 利用可能。
VIN — 5 V 入力。ボードとオンボードの LiPo 充電器に給電します。
RAW — 入力/出力、常時オン(3.6 V〜5 V)。アクティブなソース(VIN、USB、または接続されたバッテリー)を伝送し、入力としても使用できます。RAW に電源を供給する場合は直列ダイオードを介して駆動しなければなりません — そうしないと電流が VIN/USB に逆流し、電源やオンボードの保護回路を損傷します。
GND — 共通グラウンド。
注釈
オンボードの電源管理チップは、USB と VIN のうち電圧が高い方 を自動的に選んでボードとバッテリー充電器に給電します。LiPo が接続されている場合は余剰の余裕分で充電し、VIN/USB の電圧が下がったり取り外されたりした場合はバッテリーにフォールバックしてボードの動作を維持します。
注釈
ボードの背面には外部の 3.3 V RTC バックアップバッテリー 用のはんだパッドがあります。これらのパッドにコイン電池を配線すると、ボードの残りの部分が無給電の間も RTC と 8 KB のバックアップ RAM を動作させ続けられます。
Tip
バッテリー寿命推定ツール を使って、特定のアクティブ / ディープスリープのデューティサイクルにおいて N6 がバッテリーでどれくらい動作するかをモデル化できます。
イーサネットピン¶
N6 は GPIO ヘッダーの隣の専用パッドにイーサネット PHY の MDI ペアを引き出しています。MDI ピンを RJ45 に直接配線するのは安全ではありません — PHY とケーブルの間にはイーサネット用磁気部品(絶縁トランス。magjack に内蔵されているか、シールド上にある)が 必須 です。OpenMV PoE シールドにはこれらが含まれています。自作のジャックを使う場合は、磁気部品一体型の RJ45 または外部トランスを使用してください。
ETH_LED — リンク/アクティビティ LED。リンクが確立しているときはアクティブロー。トラフィック時に点滅します。
DA P / DA N — ペア A(10/100 では TX。すべての速度で使用)。
DB P / DB N — ペア B(10/100 では RX。すべての速度で使用)。
DC P / DC N — ペア C。ギガビットでのみ使用。
DD P / DD N — ペア D。ギガビットでのみ使用。
10/100 Mb/s ではペア A と B のみが必要です。ギガビットでは 4 つのペア A〜D すべてが必要です。
リカバリーおよびデバッグピン¶
RESET — GND に引いてボードをリセットします。解放すると MCU は通常通り起動します。
BOOT0 — ボードへの給電中に 3.3 V に引くと、ROM ブートローダーモードに入ります。OpenMV IDE はこのモードを使ってオンボードのブートローダーを再フラッシュします。
BOOT1 — ボードを ST のツール(ARM 10 ピン SWD/JTAG ヘッダーに接続した ST‑LINK)で使用する開発者モードにするスイッチです。OpenMV ファームウェアおよびツールでの通常動作時は、これを無効のままにしておいてください。
専用の ARM 10 ピン SWD/JTAG ヘッダーが装備されており、ST‑LINK および SEGGER J‑Link アダプターと互換性があります。
オンボードペリフェラル¶
LED¶
N6 には 2 つの RGB LED があります。
ユーザー RGB LED — ソフトウェアで制御可能で、
LED_RED、LED_GREEN、LED_BLUEとして公開されます:from machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
電源 LED — オンボードの電源管理ハードウェアによって直接駆動され、ソフトウェア制御はできません。電源の状態を一目で把握するために使用します。
動作中:
チャンネル
意味
青
VIN がボードに給電している(USB 時は消灯)
緑
USB または VIN 電源が供給されている
赤
接続された LiPo バッテリーを充電中
ディープスリープ中はすべてのチャンネルが消灯しますが、赤だけは例外 で、LiPo の充電中は点灯し続けます。
電源ステータスピン¶
3 つのアクティブローのステータス入力により、ファームウェアはオンボードの電源管理チップの状態を確認できます。
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¶
N6 の 1 GHz Neural‑ART NPU(INT8 で 600 GOPS)は 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 として届くため、簡単な DSP のために 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 も公開します。asyncio に適した BLE には aioble --- 非同期 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())
イーサネット¶
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 V CMOS で、ピンあたり最大 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())
任意の入力ピンはエッジ遷移で割り込みを発生させることもできます:
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")
同じハードウェアは 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 V |
汎用パッド。内部で P6 に接続 |
BAT_ADC |
約 5.0 V |
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 IR アレイ
MLX90640 — 32 × 24 IR アレイ
MLX90641 — 16 × 12 IR アレイ
AMG8833 — 8 × 8 IR アレイ
モジュールをボードの 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 は、ハードウェアタイマースロットを消費せずに周期的またはワンショットのコールバックをスケジュールします。仮想(ソフトウェア)タイマーを使用するには、id として -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"))
周期の値はミリ秒単位です。停止してスロットを解放するには deinit() を呼び出します。
リアルタイムクロック¶
machine.RTC はリセットをまたいで、また(背面パッドにオプションの 3.3 V バックアップバッテリーを配線すれば。電源ピン を参照)完全な電源喪失をまたいで実時間を保持します:
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 ブートローダーウィンドウ¶
電源投入のたびに、カメラは短いブートローダー(数秒間)を実行し、ユーザーが DFU モードに入らなくても OpenMV IDE がファームウェアを更新できるようにします。ウィンドウが終了すると、ブートローダーは boot.py、続いて main.py に処理を引き渡します。
実行中のスクリプトは、machine.bootloader() を呼び出すことでオンデマンドでブートローダーに再び入ることができます:
import machine
machine.bootloader()
ファイルシステムとブート順序¶
N6 ファームウェアはブート時に最大 3 つのファイルシステムをマウントします。
内部フラッシュ — 常に
/flashにマウントされます。デフォルトでmain.pyとREADME.txtを保持し、初回ブート時に作成されます。microSD カード — カードが挿入されている場合は
/sdcardにマウントされます。ROMFS —
/romにある読み取り専用のメモリマップドファイルシステムで、ゼロコピーアクセスの恩恵を受ける大きなデータアセット(AI モデルなど)を出荷するために使用されます。ユーザーの Python が実行される前に、起動時に MicroPython によって自動的にマウントされます。
マウント後、カードが存在する場合は作業ディレクトリが /sdcard に、そうでなければ /flash に設定されます。インタープリタはその後、そのディレクトリからスクリプトを実行します。
boot.pyは すべての ソフトリセット(コールドブート、REPL からのCtrl‑D、または実行中のスクリプトが戻ったとき)で実行されます。main.pyは コールドブート時のみ、boot.pyの直後に実行されます。それ以降のソフトリセットではboot.pyが再実行されますが、その後は直接 REPL に移行します —main.pyを再実行するには、ボードを完全にリセットする必要があります。
boot.py または main.py を SD カードに置くと、フラッシュ内のコピーには触れずにそれを上書きします — どちらのファイルもブートディレクトリ(カードがマウントされているときは /sdcard、そうでなければ /flash)で検索されます。
新しくフラッシュしたボードに出荷時に同梱されているデフォルトの main.py は、ハートビートとしてユーザー RGB LED の 青 チャンネルを点滅させるだけ(短いパルス 2 回、短い間隔)なので、ホストを何も接続していなくてもファームウェアが正常にブートしたことが分かります。
sys.path は 3 つのファイルシステムすべてとそれぞれの lib/ サブディレクトリを含むように拡張されるため、インポート可能なモジュールは /flash/lib、/sdcard/lib、または /rom/lib に置くことができます。
挿入された SD カードをシステムに無視させる(例えばカードが存在していてもフラッシュの main.py を実行する)には、/flash のルートに SKIPSD という名前の空ファイルを作成します。
USB 経由で接続されると、ブートファイルシステム(カードが存在する場合は /sdcard、そうでなければ /flash)はホスト上で USB マスストレージドライブとしても列挙され、boot.py、main.py、その他のファイルを直接編集できます。カメラをリセットする前にドライブを取り出して、ホストがキャッシュした書き込みをフラッシュするようにしてください。
注釈
OS はドライブをパッシブなブロックデバイスとして扱うため、OpenMV Cam 上で実行されるコードによって作成または変更されたファイルは、ホストがドライブを再マウントするまで表示されません。OS と OpenMV Cam が同じファイルシステムに同時に書き込むと、OS が優先され、カメラが行った変更が上書きされます。スクリプトが書き戻すデータには SD カードを使用し、ホストからそれらのファイルを読む前に再マウントしてください。
注釈
ホストが USB マスストレージドライブから読み取り、または書き込みを行っている間、ユーザー RGB LED の 赤 チャンネルが一瞬点灯することがあります — これはファームウェアが駆動するアクティビティインジケーターであり、障害ではありません。
ストレージサイズ¶
N6 には次のものが同梱されています。
/flash— 4 MB の FAT ファイルシステム、読み書き可能。/rom— 24 MB の読み取り専用メモリマップド ROMFS。ゼロコピー mmap アクセスの恩恵を受けるスクリプトや ML モデルを出荷するために使用されます。/sdcard— 挿入された microSD カードのフルサイズ(存在する場合)、読み書き可能。
ハードフォールトインジケーター¶
ユーザー RGB LED がすべての色を高速で循環している場合 — はっきりした色合いというよりは きらめく白い LED のように見えるほど高速な場合 — ファームウェアは回復不能なハードフォールトに陥っています。回復するにはファームウェアを再フラッシュしてください。再フラッシュしても改善しない場合は、ボードが物理的に損傷している可能性があります。
ソフトウェアライブラリ¶
モジュールの完全な一覧(N6 ビルド固有のものを含む)については ライブラリインデックス を参照してください。