OpenMV N6¶
OpenMV N6 được xây dựng trên nền tảng STMicroelectronics STM32N657 (Cortex‑M55 @ 800 MHz) với NPU tích hợp 1 GHz đạt 600 GOPS INT8. Bo mạch kết hợp NPU với cảm biến toàn cục PAG7936 1 MP trên khung gắn rời được, Ethernet gigabit, USB‑C tốc độ cao, Wi‑Fi và Bluetooth 5.1, đồng thời chạy suy luận YOLOv8/YOLOv11 ở 30 FPS song song với truyền phát video trực tiếp.
Để xem datasheet đầy đủ, ảnh chụp và kích thước, hãy truy cập trang sản phẩm OpenMV N6.
Điểm nổi bật¶
STM32N657 Cortex‑M55 tại 800 MHz (1280 DMIPS) với ARM Helium 128‑bit SIMD — thông lượng vector 6,4 gigaops.
NPU 1 GHz, 600 GOPS INT8 — chạy phát hiện YOLOv8/YOLOv11 ở 30 FPS.
ISP cho RAW Bayer lên đến 5MP, GPU 2D cho thu phóng và xoay 3D, mã hóa H.264 đến 1080p, và codec JPEG phần cứng.
SDRAM ngoài 64 MB (16‑bit @ 200 MHz DDR, 800 MB/s) cùng với SRAM nội 4,2 MB và bộ nhớ flash octal 32 MB (200 MHz DDR, 400 MB/s).
Cảm biến màu toàn cục 1 MP PAG7936.
IMU tích hợp (gia tốc kế + con quay hồi chuyển) và microphone dùng cho phối hợp âm thanh + chuyển động.
USB‑C tốc độ cao (480 Mb/s, giới hạn dòng 1,5 A), Ethernet gigabit (hỗ trợ PoE qua shield), Wi‑Fi a/b/g/n + Bluetooth 5.1 (ăng‑ten chip hoặc tùy chọn U.FL).
Khe cắm microSD — SD đến 2 GB, SDHC đến 32 GB, SDXC đến 2 TB.
Bộ sạc LiPo (sạc nhanh 500 mA), ADC đo điện áp pin, RTC với 8 KB RAM dự phòng và chân pin dự phòng riêng biệt.
18 chân I/O, tất cả đầu ra 3,3 V / chịu được 3,3 V, 20 mA mỗi chân (pin), có khả năng ngắt.
Đèn LED RGB người dùng, nút người dùng, và đèn LED trạng thái riêng biệt cho sạc / USB / nguồn VIN.
Cảnh báo
Các chân (pin) I/O của N6 không chịu được 5 V. Không kết nối thiết bị trực tiếp với MCU 5 V như Arduino Mega. Cấp nguồn cho N6 chỉ qua VIN.
Sơ đồ chân¶
Tham chiếu chân¶
Tên chân |
Chức năng |
|---|---|
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 (không có ADC trên chân này — xem |
P6_ADC |
đầu vào ADC 12‑bit chuyên dụng (nối nội bộ với P6) |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM17 CH1 |
P10 |
TIM15 CH2 / đồng bộ khung hình I/O |
P11 |
wakeup (tích cực mức thấp, WKUP3) |
P12 |
RESET — kéo xuống GND để khởi động lại bo mạch (không phải GPIO) |
P13 |
UART7 RX |
P14 |
UART7 TX |
P15 |
SPI4 CS |
P16 |
SPI4 SCK |
P17 |
SPI4 MISO |
P18 |
SPI4 MOSI |
SW |
nút người dùng (tích cực mức thấp) |
ONOFF (SW2) |
nút wakeup ngủ sâu (tích cực mức thấp, WKUP2) |
ST |
thấp khi nguồn VIN, cao khi nguồn USB |
CHG |
tích cực mức thấp; thấp trong khi pin LiPo gắn đang sạc |
PG |
tích cực mức thấp; thấp khi có nguồn VIN hoặc USB |
BAT_ADC |
kênh ADC nội đo điện áp pin LiPo gắn vào |
LED_RED |
kênh đỏ đèn LED RGB (tích cực mức thấp) |
LED_GREEN |
kênh xanh lá đèn LED RGB (tích cực mức thấp) |
LED_BLUE |
kênh xanh dương đèn LED RGB (tích cực mức thấp) |
Ghi chú
Đường đồng bộ khung hình P10 là bus dùng chung. Nó được nối với MCU, chân kích hoạt / phơi sáng của cảm biến camera, và header người dùng cùng một lúc. Hướng do ứng dụng xác định — MCU, cảm biến, hoặc tín hiệu bên ngoài đều có thể điều khiển tùy thuộc vào cách cảm biến được cấu hình (một số cảm biến có thể dùng cùng chân này như đầu vào kích hoạt hoặc đầu ra phơi sáng). Đảm bảo chỉ có một driver hoạt động tại một thời điểm.
Ghi chú
ONOFF và P11 được tham chiếu với đường RAW luôn bật (không phải đường 3,3 V được chuyển mạch), vì vậy chúng vẫn hoạt động trong khi phần còn lại của bo mạch đang ở chế độ ngủ sâu / tiết kiệm điện. Cả hai đầu vào đều tích cực mức thấp.
Các chân này đi qua bộ dịch mức để có thể chạy trên đường RAW. Nếu bạn thực sự cần hành vi GPIO 3,3 V‑trực tiếp trên ONOFF hoặc P11 (ví dụ để điều khiển chúng từ MCU 3,3 V mà không qua bộ dịch), bo mạch có các pad pullup và jumper 0‑ohm cho phép bỏ qua bộ dịch. Đây là sửa đổi phần cứng nâng cao — hầu hết người dùng nên để nguyên.
Ghi chú
P15–P18 được chia sẻ với Gigabit Ethernet PHY, được kết nối và hoạt động theo mặc định. Để dùng các chân này như I/O người dùng, bạn phải hàn lại điện trở 0‑ohm ở mặt sau bo mạch sang vị trí GPIO. Thao tác này chỉ vô hiệu hóa Ethernet gigabit — Ethernet 10/100 Mb/s vẫn hoạt động trên các chân chuyên dụng của nó.
Chân nguồn¶
3.3V — đường 3,3 V được điều chỉnh. Chỉ là đầu ra trên N6 — không cấp nguồn bên ngoài vào chân này. Có thể cung cấp đến 1 A cho các shield.
VIN — đầu vào 5 V. Cấp nguồn cho bo mạch và bộ sạc LiPo tích hợp.
RAW — vào/ra, luôn bật (3,6 V – 5 V). Mang nguồn nào đang hoạt động (VIN, USB, hoặc pin gắn vào), và cũng có thể được dùng làm đầu vào. Bạn phải nối RAW qua diode nối tiếp khi cấp nguồn vào nó — nếu không dòng điện sẽ chảy ngược lại vào VIN/USB và làm hỏng nguồn cung hoặc mạch bảo vệ tích hợp.
GND — chung nối đất.
Ghi chú
Chip quản lý nguồn tích hợp tự động chọn USB hoặc VIN nào có điện áp cao hơn để cấp nguồn cho bo mạch và bộ sạc pin. Nếu có LiPo gắn vào, nó sạc bằng lượng dự phòng còn lại, và bộ điều khiển chuyển sang pin để tiếp tục chạy bo mạch nếu VIN/USB sụt áp hoặc bị rút ra.
Ghi chú
Mặt sau bo mạch có các pad hàn cho pin dự phòng RTC 3,3 V bên ngoài. Kết nối pin đồng xu vào các pad này giữ RTC và 8 KB RAM dự phòng hoạt động khi phần còn lại của bo mạch không có nguồn.
Mẹo
Dùng công cụ ước tính tuổi thọ pin để mô phỏng thời gian N6 chạy trên pin với chu kỳ hoạt động / ngủ sâu nhất định.
Chân Ethernet¶
N6 đưa ra các cặp MDI của Ethernet PHY trên các pad chuyên dụng bên cạnh header GPIO. Các chân MDI không an toàn để nối thẳng vào RJ45 — magnetics Ethernet (biến áp cách ly, tích hợp trong magjack hoặc trên shield) là bắt buộc giữa PHY và cáp. Shield PoE của OpenMV đã tích hợp sẵn; nếu bạn tự làm jack, hãy dùng RJ45 tích hợp magnetics hoặc biến áp bên ngoài.
ETH_LED — đèn LED kết nối/hoạt động. Tích cực mức thấp khi có kết nối; nhấp nháy khi có lưu lượng.
DA P / DA N — cặp A (TX trong 10/100, dùng ở mọi tốc độ).
DB P / DB N — cặp B (RX trong 10/100, dùng ở mọi tốc độ).
DC P / DC N — cặp C, chỉ dùng ở gigabit.
DD P / DD N — cặp D, chỉ dùng ở gigabit.
10/100 Mb/s chỉ cần cặp A và B. Gigabit cần tất cả bốn cặp A–D.
Chân khôi phục và gỡ lỗi¶
RESET — kéo xuống GND để khởi động lại bo mạch. Nhả ra để MCU khởi động bình thường.
BOOT0 — kéo lên 3,3 V trong khi cấp nguồn cho bo mạch để vào chế độ bootloader ROM. OpenMV IDE sử dụng chế độ này để nạp lại bootloader tích hợp.
BOOT1 — công tắc đưa bo mạch vào chế độ nhà phát triển để sử dụng với các công cụ của ST (ST‑LINK gắn vào header SWD/JTAG 10 chân ARM). Để tắt cho hoạt động bình thường với firmware và công cụ OpenMV.
Header SWD/JTAG 10 chân ARM chuyên dụng được tích hợp, tương thích với bộ điều hợp ST‑LINK và SEGGER J‑Link.
Ngoại vi tích hợp¶
Đèn LED¶
N6 có hai đèn LED RGB:
Đèn LED RGB người dùng — có thể điều khiển bằng phần mềm, hiển thị là
LED_RED,LED_GREENvàLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
Đèn LED nguồn — được điều khiển trực tiếp bởi phần cứng quản lý nguồn tích hợp, không có điều khiển phần mềm. Dùng để nhìn nhanh trạng thái nguồn.
Khi đang chạy:
Kênh
Ý nghĩa
Xanh dương
VIN đang cấp nguồn cho bo mạch (tắt khi dùng USB)
Xanh lá
Có nguồn USB hoặc VIN
Đỏ
đang sạc pin LiPo gắn vào
Trong chế độ ngủ sâu tất cả các kênh đều tắt ngoại trừ Đỏ, vẫn sáng trong khi LiPo đang sạc.
Chân trạng thái nguồn¶
Ba đầu vào trạng thái tích cực mức thấp cho phép firmware thấy chip quản lý nguồn tích hợp đang làm gì:
ST — thấp khi bo mạch chạy bằng VIN, cao khi chạy bằng nguồn USB.
CHG — thấp trong khi pin LiPo gắn đang sạc.
PG — thấp khi có nguồn VIN hoặc 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()
Cảm biến camera¶
PAG7936 được điều khiển qua module csi --- cảm biến camera
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()
Cảm biến nằm trên module rời — hoán đổi với bất kỳ module camera OpenMV nào khác (toàn cục, nhiệt, độ phân giải cao hơn, v.v.) mà không cần thay đổi phần còn lại của bo mạch.
PAG7936 hỗ trợ chế độ kích hoạt — tích hợp điểm ảnh căn chỉnh chính xác với mỗi lần gọi csi.CSI.snapshot thay vì đồng hồ khung hình chạy tự do, hữu ích để đồng bộ hóa chụp ảnh với sự kiện bên ngoài hoặc cảm biến khác. Bật qua csi.CSI.ioctl với csi.IOCTL_SET_TRIGGERED_MODE. Tốc độ khung hình giảm xuống khoảng một nửa so với chế độ chạy tự do vì quá trình đọc không còn pipeline với tích hợp khung hình tiếp theo:
cam.ioctl(csi.IOCTL_SET_TRIGGERED_MODE, True)
NPU¶
NPU Neural‑ART 1 GHz của N6 (600 GOPS INT8) được hiển thị qua module ml --- Machine Learning. Các mô hình (ML) lưu trữ trên hệ thống tập tin chỉ đọc /rom tải trực tiếp từ flash mà không cần sao chép vào RAM, vì vậy ngay cả các bộ phát hiện lớn cũng vừa thoải mái bên cạnh bộ đệm khung hình trực tiếp. Chạy bộ phát hiện YOLOv8 trên mỗi khung hình và vẽ các dự đoán lên trên ảnh trực tiếp:
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")
Microphone¶
Microphone tích hợp được thu qua audio --- Mô-đun Âm thanh. Mỗi bộ đệm đến dưới dạng bytearray PCM có dấu 16‑bit, giúp dễ dàng đưa vào ulab/numpy để xử lý DSP nhanh. Bộ phát hiện độ to đơn giản — in ra khi âm lượng RMS vượt ngưỡng:
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¶
Gia tốc kế + con quay hồi chuyển tích hợp bên dưới module camera được hiển thị qua imu --- cảm biến 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 tích hợp được hiển thị qua network --- cấu hình mạng như giao diện trạm. Sau khi kết nối, ipconfig("addr4") trả về cặp (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 tương tự cũng hiển thị Bluetooth 5.1. Dùng aioble --- Async BLE cho BLE thân thiện với asyncio — ví dụ, quảng bá như một ngoại vi và chờ một trung tâm kết nối:
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¶
Khi RJ45 (có magnetics) được kết nối với các pad MDI, gigabit PHY xuất hiện như giao diện LAN. DHCP chạy tự động sau khi kết nối được thiết lập:
import network, time
lan = network.LAN()
lan.active(True)
while not lan.isconnected():
time.sleep(1)
print("Ethernet IP:", lan.ipconfig("addr4")[0])
Thẻ microSD¶
Khi thẻ được cắm vào, nó được gắn tự động tại /sdcard và có thể dùng qua hệ thống tập tin thông thường:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Tham chiếu bus¶
GPIO¶
Dùng machine.Pin để đọc hoặc điều khiển bất kỳ chân nào được in trên bảng mạch. Đầu ra là 3,3 V CMOS và có thể nhận/cấp đến 20 mA mỗi chân (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())
Bất kỳ chân đầu vào nào cũng có thể kích hoạt ngắt khi chuyển cạnh:
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")
Phần cứng tương tự cũng có thể được dùng ở chế độ target (slave) qua machine.I2CTarget để hiển thị vùng bộ nhớ cho bộ điều khiển I²C khác:
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 |
Ghi chú
CAN chưa được hỗ trợ trên bo mạch này trong 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¶
Cả hai kênh ADC đi qua bộ chia điện áp có đệm op‑amp trước khi đến MCU, vì vậy read_u16() được ánh xạ với điện áp đầu vào toàn thang khác nhau trên mỗi chân (pin).
Chân |
Toàn thang |
Ghi chú |
|---|---|---|
P6_ADC |
~3,3 V |
pad đa năng, nối nội bộ với P6 |
BAT_ADC |
~5,0 V |
kênh nội cho pin 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¶
Chân |
Bộ định thời / kênh |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM12 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
P9 |
TIM17 CH1 |
P10 |
TIM15 CH2 |
Điều khiển bất kỳ cái nào qua machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P6"), freq=1_000, duty_u16=32768)
Bus bit‑bang bằng phần mềm¶
machine.SoftI2C và machine.SoftSPI hoạt động trên bất kỳ GPIO nào nếu bạn cần thêm bus.
Cảm biến nhiệt (bên ngoài bo mạch)¶
Firmware bao gồm driver fir --- trình điều khiển cảm biến nhiệt (fir == hồng ngoại xa) cho các máy ảnh nhiệt được kết nối bên ngoài:
MLX90621 — mảng IR 16 × 4
MLX90640 — mảng IR 32 × 24
MLX90641 — mảng IR 16 × 12
AMG8833 — mảng IR 8 × 8
Nối module với bus I²C của bo mạch và đọc khung hình bằng 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 chỉ giao tiếp với cảm biến qua I²C 2 — nối module với P4 (SCL) và P5 (SDA).
Định thời¶
time¶
Module time hỗ trợ trễ chặn, ticks đơn điệu, và đo thời gian trôi qua:
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)
Bộ định thời ảo¶
machine.Timer lên lịch các hàm gọi lại định kỳ hoặc một lần mà không tốn một slot bộ định thời phần cứng. Truyền -1 làm id để dùng bộ định thời ảo (phần mềm):
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"))
Giá trị chu kỳ tính bằng mili giây. Gọi deinit() để dừng và giải phóng slot.
Đồng hồ thời gian thực¶
machine.RTC giữ thời gian đồng hồ treo qua các lần khởi động lại và (với pin dự phòng 3,3 V tùy chọn được nối vào các pad phía sau, xem Chân nguồn) qua mất nguồn hoàn toàn:
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 cũng chạy qua chế độ ngủ sâu, vì vậy bạn có thể dùng nó như nguồn đánh thức cho machine.deepsleep().
Watchdog¶
machine.WDT khởi động lại bo mạch nếu ứng dụng bị treo. Một khi đã khởi động, nó không thể dừng hoặc cấu hình lại — cấp dưỡng nó định kỳ bên trong vòng lặp chính của bạn:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Thông tin khởi động và thời gian chạy¶
Cửa sổ bootloader USB¶
Mỗi lần bật nguồn, camera chạy một bootloader ngắn (vài giây) cho phép OpenMV IDE cập nhật firmware mà không cần người dùng vào chế độ DFU. Sau khi cửa sổ hết hạn, bootloader chuyển giao cho boot.py rồi main.py.
Tập lệnh đang chạy có thể vào lại bootloader theo yêu cầu bằng cách gọi machine.bootloader()
import machine
machine.bootloader()
Hệ thống tập tin và thứ tự khởi động¶
Firmware N6 gắn tối đa ba hệ thống tập tin khi khởi động:
Flash nội bộ — luôn được gắn tại
/flash. Chứamain.pyvàREADME.txttheo mặc định; được tạo trong lần khởi động đầu tiên.Thẻ microSD — nếu thẻ được cắm vào, nó được gắn tại
/sdcard.ROMFS — hệ thống tập tin chỉ đọc, ánh xạ bộ nhớ tại
/romdùng để cung cấp các tài sản dữ liệu lớn (ví dụ mô hình (ML) AI) được hưởng lợi từ truy cập zero‑copy. Được gắn tự động bởi MicroPython khi khởi động, trước khi Python người dùng nào chạy.
Sau khi gắn, thư mục làm việc được đặt thành /sdcard khi thẻ có mặt, ngược lại là /flash. Trình thông dịch sau đó chạy các tập lệnh từ thư mục đó:
boot.pyđược thực thi trên mỗi lần soft reset (khởi động lạnh,Ctrl‑Dtừ REPL, hoặc bất cứ khi nào tập lệnh đang chạy trả về).main.pychỉ được thực thi khi khởi động lạnh, ngay sauboot.py. Các lần soft reset tiếp theo chạy lạiboot.pynhưng đi thẳng đến REPL — để chạy lạimain.pybạn phải khởi động lại hoàn toàn bo mạch.
Thả boot.py hoặc main.py lên thẻ SD ghi đè bản sao trong flash mà không động đến nó — cả hai tập tin đều được tìm trong thư mục khởi động (/sdcard khi thẻ được gắn, ngược lại là /flash).
main.py mặc định được cung cấp trên bo mạch vừa nạp firmware chỉ nhấp nháy kênh xanh dương của đèn LED RGB người dùng như nhịp tim (hai xung ngắn, khoảng trống ngắn), để bạn có thể biết firmware đã khởi động thành công mà không cần có host nào được kết nối.
sys.path được mở rộng để bao gồm cả ba hệ thống tập tin và các thư mục con lib/ của chúng, vì vậy các module có thể nhập được có thể nằm trong /flash/lib, /sdcard/lib, hoặc /rom/lib.
Để buộc hệ thống bỏ qua thẻ SD đã cắm (ví dụ để chạy main.py trên flash ngay cả khi có thẻ), tạo một tập tin rỗng tên SKIPSD ở gốc của /flash.
Khi kết nối qua USB, hệ thống tập tin khởi động (/sdcard nếu có thẻ, ngược lại là /flash) cũng được liệt kê như ổ đĩa lưu trữ khối lượng USB trên host, cho phép bạn chỉnh sửa boot.py, main.py, và bất kỳ tập tin nào khác trực tiếp. Eject ổ đĩa trước khi khởi động lại camera để host xóa các lần ghi được lưu trong bộ nhớ đệm.
Ghi chú
Vì hệ điều hành xử lý ổ đĩa như thiết bị khối bị động, các tập tin được tạo hoặc sửa đổi bởi mã chạy trên OpenMV Cam sẽ không hiển thị cho đến khi host gắn lại ổ đĩa. Nếu cả hệ điều hành và OpenMV Cam cùng ghi vào hệ thống tập tin tại cùng một thời điểm, hệ điều hành sẽ thắng và ghi đè các thay đổi của camera. Dùng thẻ SD cho bất kỳ dữ liệu nào tập lệnh ghi lại, và gắn lại trước khi đọc những tập tin đó từ host.
Ghi chú
Kênh đỏ của đèn LED RGB người dùng có thể sáng thoáng trong khi host đang đọc từ hoặc ghi vào ổ đĩa lưu trữ khối lượng USB — đây là chỉ thị hoạt động do firmware điều khiển, không phải lỗi.
Kích thước lưu trữ¶
N6 được xuất xưởng với:
/flash— hệ thống tập tin FAT 4 MB, đọc/ghi./rom— ROMFS ánh xạ bộ nhớ chỉ đọc 24 MB, dùng để cung cấp các tập lệnh và mô hình (ML) ML được hưởng lợi từ truy cập mmap zero-copy./sdcard— kích thước đầy đủ của thẻ microSD được cắm (khi có), đọc/ghi.
Chỉ thị lỗi phần cứng nghiêm trọng¶
Nếu đèn LED RGB người dùng đang nhanh chóng chuyển đổi qua tất cả các màu sắc — đủ nhanh để có xu hướng trông như đèn LED trắng lấp lánh thay vì các màu riêng biệt — firmware đã gặp lỗi phần cứng nghiêm trọng không thể phục hồi. Nạp lại firmware để khôi phục; nếu nạp lại không giúp ích, bo mạch có thể bị hỏng vật lý.
Thư viện phần mềm¶
Xem chỉ mục thư viện để có danh sách đầy đủ các module — bao gồm những module duy nhất trong bản dựng N6.