OpenMV Cam RT1062

OpenMV Cam RT1062 je nízkopříkonová deska pro strojové vidění postavená kolem NXP i.MX RT1062 (Cortex‑M7 @ 600 MHz). Deska kombinuje vysokorychlostní síťování přes USB‑C, Wi‑Fi/Bluetooth a 10/100 Ethernet se senzorem OV5640 5MP na vyměnitelném nosiči. Kamera odebírá z LiPo baterie v hlubokém spánku jen ~30 µA, což ji činí vhodnou pro projekty napájené z baterie.

OpenMV Cam RT1062

Kompletní datasheet, fotografie a rozměry najdete na produktové stránce OpenMV Cam RT1062.

Hlavní vlastnosti

  • NXP i.MX RT1062 Cortex‑M7 na 600 MHz.

  • 32 MB externí SDRAM (16‑bit @ 160 MHz, 320 MB/s) plus 1 MB interní SRAM a 16 MB QSPI flash (133 MHz 4‑bit SDR, čtení 66 MB/s); 4 KB EEPROM na R6+.

  • Senzor OV5640 5MP s rolling shutterem.

  • Integrovaná IMU (12‑bit 3‑osý akcelerometr, ±2/4/8 g).

  • Vysokorychlostní USB‑C (480 Mb/s, proudový limit 1,5 A), 10/100 Mb/s Ethernet (s podporou PoE přes shield), Wi‑Fi a/b/g/n + Bluetooth 5.1 (čipová anténa nebo varianta U.FL).

  • Slot microSD — SD do 2 GB, SDHC do 32 GB, SDXC do 2 TB.

  • Nabíječka LiPo (500 mA na R6+, 100 mA na R4/R5), RTC s ploškami pro záložní baterii. Hluboký spánek odebírá na baterii ~30 µA.

  • 14 I/O pinů, všechny s výstupem 3,3 V / tolerantní k 3,3 V, 4 mA na pin, schopné přerušení.

  • Uživatelská RGB LED, uživatelské tlačítko SW, hardwarové tlačítko napájení (stavový automat hluboký spánek / probuzení) a samostatná stavová LED pro nabíjení / USB / napájení VIN.

Varování

I/O piny RT1062 nejsou tolerantní k 5 V. Nepřipojujte zařízení přímo k 5V MCU jako je Arduino Mega. Desku napájejte pouze přes VIN.

Rozložení pinů

Rozložení pinů OpenMV Cam RT1062 OV5640

Referenční přehled pinů

Název pinu

Funkce

P0

SPI1 MOSI / PWM2 B3

P1

SPI1 MISO / CAN0 TX

P2

SPI1 SCLK / PWM2 B3

P3

SPI1 SS / CAN0 RX

P4

I2C1 SCL / UART1 TX / PWM1 X2

P5

I2C1 SDA / UART1 RX / PWM1 X3

P6

ADC

P7

PWM2 A0

P8

PWM2 B0

P9

PWM1 A3

P10

PWM1 B3 / frame sync I/O

P11

wakeup (aktivní v nule, pro probuzení připojte na GND)

P12

RESET — připojením na GND resetuje desku (není to GPIO)

P13

digitální I/O

P14

digitální I/O

ON/OFF

ploška na headeru replikující hardwarové tlačítko napájení (aktivní v nule)

SW

uživatelské tlačítko (aktivní v nule)

ST

nízká úroveň při napájení z VIN, vysoká při napájení z USB

CHG

aktivní v nule; nízká úroveň, dokud se připojená LiPo baterie nabíjí

PG

aktivní v nule; nízká úroveň, když je přítomno napájení z VIN nebo USB

LED_RED

červený kanál RGB LED (aktivní v nule)

LED_GREEN

zelený kanál RGB LED (aktivní v nule)

LED_BLUE

modrý kanál RGB LED (aktivní v nule)

Poznámka

Linka frame‑sync P10 je sdílená sběrnice. Je zapojena současně k MCU, ke spouštěcímu / expozičnímu pinu senzoru kamery a k uživatelskému headeru. Směr je definovaný aplikací — podle konfigurace senzoru ji může řídit MCU, senzor nebo externí signál. Zajistěte, aby byl vždy aktivní pouze jeden zdroj signálu.

Poznámka

ON/OFF a P11 jsou vztaženy k vždy zapnuté větvi RAW (nikoli ke spínané větvi 3,3 V), takže zůstávají funkční, zatímco zbytek desky je v režimu hlubokého spánku / nízké spotřeby. Oba vstupy jsou aktivní v nule.

Tyto piny procházejí přes převodníky úrovní, aby mohly fungovat na větvi RAW. Pokud nutně potřebujete chování GPIO přímo na 3,3 V na ON/OFF nebo P11 (například pro jejich řízení z 3,3V MCU bez průchodu přes převodník), deska nabízí plošky pull‑up a 0‑ohmové propojky, které umožňují převodník obejít. Jde o pokročilou hardwarovou úpravu — většina uživatelů by se jí měla vyhnout.

Poznámka

P13 a P14 jsou ve výchozím stavu prosté GPIO bez zvláštní funkce. Plošky lze volitelně přesměrovat na jiné signály přepájením 0‑ohmových můstků (solder bridge) na zadní straně desky:

  • P13 ↔ stav CHG / JTAG TRSTB

  • P14 ↔ stav ST / JTAG TDI

Většina uživatelů se těchto propojek nedotkne — ponechte je ve výchozím nastavení GPIO, pokud konkrétně nepotřebujete zpětné čtení správy napájení nebo JTAG.

Napájecí piny

  • 3.3V — regulovaná větev 3,3 V. Na RT1062 je pouze výstupem — nepřivádějte do tohoto pinu externí napájení. Pro shieldy je k dispozici až 1 A.

  • VIN — vstup 5 V. Napájí desku a integrovanou nabíječku LiPo.

  • RAW — vstup/výstup, vždy zapnutý (3,6 V – 5 V). Vede signál podle toho, který zdroj je aktivní (VIN, USB nebo připojená baterie), a lze jej použít i jako vstup. Při přivádění napájení do RAW jej musíte řídit přes sériovou diodu — jinak by proud tekl zpět do VIN/USB a poškodil zdroj nebo integrovanou ochranu.

  • GND — společná zem.

Poznámka

Integrovaný čip pro správu napájení automaticky vybere ten z USB nebo VIN, který má vyšší napětí, pro napájení desky a nabíječky baterie. Pokud je připojena LiPo baterie, nabíjí se ze zbývající rezervy a řadič se přepne na baterii, aby udržel desku v chodu, pokud VIN/USB poklesnou nebo se odpojí.

Poznámka

Na zadní straně desky jsou pájecí plošky pro externí 3,3 V záložní baterii RTC. Připojením knoflíkové baterie k těmto ploškám zůstane RTC v chodu, zatímco zbytek desky je bez napájení.

Tip

Pomocí odhadovače životnosti baterie můžete modelovat, jak dlouho RT1062 vydrží na baterii při daném pracovním cyklu aktivní / hluboký spánek.

Ethernetové piny

RT1062 vyvádí MDI páry 10/100 Mb/s Ethernet PHY na vyhrazené plošky vedle GPIO headeru. MDI piny nelze bezpečně zapojit přímo do RJ45 — mezi PHY a kabelem je nutná ethernetová magnetika (izolační transformátor, buď zabudovaný v magjacku, nebo na shieldu). OpenMV PoE shield ji obsahuje; pokud si vyrábíte vlastní konektor, použijte RJ45 s integrovanou magnetikou nebo externí transformátor.

  • ETH_LED — LED stavu linky/aktivity. Aktivní v nule, když je linka aktivní; bliká při provozu.

  • ETH_TXP / ETH_TXN — vysílací pár.

  • ETH_RXP / ETH_RXN — přijímací pár.

Poznámka

Header rovněž vyvádí čtyři plošky s potiskem Reserved. Ty jsou rozměrově kompatibilní s gigabitovými ethernetovými páry na OpenMV N6 (DC P/N a DD P/N), takže stejný Ethernet / PoE shield lze zapojit do obou desek. PHY čipu RT1062 zvládá jen 10/100 Mb/s, takže tyto čtyři plošky nemají žádné elektrické propojení — ponechte je nezapojené.

Piny pro obnovu a ladění

  • RESET — připojením na GND resetuje desku. Uvolnění umožní MCU normálně nastartovat.

  • SBL — připojením na 3,3 V během napájení desky se přejde do režimu ROM bootloaderu (Serial Boot Loader). OpenMV IDE tento režim používá k přeflashování integrovaného bootloaderu.

Je osazen vyhrazený header ARM 10‑pin SWD/JTAG kompatibilní s adaptéry ST‑LINK a SEGGER J‑Link.

Poznámka

RT1062 přes tento konektor ve výchozím stavu vyvádí pouze ladění SWD. Plný JTAG není k dispozici bez úprav.

Integrované periferie

LED diody

RT1062 má dvě RGB LED:

  • Uživatelská RGB LED — softwarově ovladatelná, vyvedená jako LED_RED, LED_GREEN a LED_BLUE

    from machine import LED
    
    LED("LED_RED").on()
    LED("LED_GREEN").on()
    LED("LED_BLUE").on()
    
  • Napájecí LED — řízená přímo integrovaným hardwarem pro správu napájení, bez softwarového ovládání. Použijte ji k rychlému zjištění, co zdroj dělá.

    Za běhu:

    Kanál

    Význam

    Modrá

    Desku napájí VIN (zhasnutá při USB)

    Zelená

    Přítomno napájení z USB nebo VIN

    Červená

    nabíjení připojené LiPo baterie

    V hlubokém spánku jsou všechny kanály zhasnuté kromě červeného, který stále svítí, dokud se LiPo nabíjí.

Tlačítka

RT1062 má dvě tlačítka:

  • SW — univerzální uživatelské tlačítko. Čitelné z kódu jako běžný GPIO vstup aktivní v nule:

    from machine import Pin
    
    sw = Pin("SW", Pin.IN)
    print(sw.value())
    
  • Tlačítko napájení — řízené vyhrazeným stavovým automatem řadiče napájení na desce RT1062, výhradně v hardwaru. Není vyvedeno do uživatelského kódu; řadič rozhoduje, co udělat, podle toho, jak dlouho je drženo:

    • Podržení ~5 s, zatímco deska běží → stavový automat přejde do hlubokého spánku.

    • Podržení ~1 s, zatímco je deska v hlubokém spánku → stavový automat systém znovu zapne.

    Stažení plošky headeru ON/OFF do nuly má stejný účinek jako stisk integrovaného tlačítka napájení — užitečné pro zapojení externího spínače nebo řízení linky z jiného mikrokontroléru.

Piny stavu napájení

Tři stavové vstupy aktivní v nule z integrovaného čipu pro správu napájení:

  • PG — nízká úroveň, když je přítomno napájení z VIN nebo USB. Vždy zapojeno.

  • ST — nízká úroveň, když deska běží na VIN, vysoká při běhu na napájení z USB. Ve výchozím stavu nezapojeno.

  • CHG — nízká úroveň, dokud se připojená LiPo baterie nabíjí. Ve výchozím stavu nezapojeno.

from machine import Pin

power_ok = not Pin("PG", Pin.IN).value()

Senzor kamery

OV5640 je řízen přes modul csi — kamerové senzory

import csi

cam = csi.CSI()
cam.reset()
cam.pixformat(csi.RGB565)
cam.framesize(csi.QVGA)
cam.snapshot(time=2000)       # let auto‑exposure settle

while True:
    img = cam.snapshot()

OV5640 má integrovaný JPEG kompresor. Nastavte csi.CSI.pixformat na csi.JPEG a senzor dodává komprimované snímky přímo do kamery po sběrnici kamery, což činí praktickými zachycení ve vysokém rozlišení: csi.HD (1280×720), csi.FHD (1920×1080) i plné 5MP csi.WQXGA2 (2592×1944) se streamují jako JPEG. Kompresi nalaďte pomocí csi.CSI.quality (0-100, vyšší = větší snímky, více detailů):

cam.pixformat(csi.JPEG)
cam.framesize(csi.WQXGA2)
cam.quality(90)

Senzor je umístěn na vyměnitelném modulu — vyměňte jej za kterýkoli z dalších modulů kamery OpenMV (global shutter, termální, vyšší rozlišení atd.) bez změny zbytku desky.

Strojové učení

ml — Strojové učení spouští kvantizované modely TFLite na Cortex‑M7 s jádry CMSIS‑NN — dostatečně rychle pro kompaktní detektory při několika snímcích za sekundu. Modely na souborovém systému /rom určeném pouze pro čtení se nahrávají přímo z flash paměti bez kopírování do RAM. Zde je detektor BlazeFace 128×128 překreslující detekovaný obličej a jeho šest význačných bodů do každého snímku:

import csi
import time
import ml
from ml.postprocessing.mediapipe import BlazeFace

# Initialize the sensor.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))

# Load built-in face detection model
model = ml.Model("/rom/blazeface_front_128.tflite", postprocess=BlazeFace(threshold=0.4))
print(model)

clock = time.clock()
while True:
    clock.tick()
    img = csi0.snapshot()

    # faces is a list of ((x, y, w, h), score, keypoints) tuples
    for r, score, keypoints in model.predict([img]):
        ml.utils.draw_predictions(img, [r], ("face",), ((0, 0, 255),), format=None)

        # keypoints is a ndarray of shape (6, 2)
        # 0 - right eye (x, y)
        # 1 - left eye (x, y)
        # 2 - nose (x, y)
        # 3 - mouth (x, y)
        # 4 - right ear (x, y)
        # 5 - left ear (x, y)
        ml.utils.draw_keypoints(img, keypoints, color=(255, 0, 0))

    print(clock.fps(), "fps")

IMU

Firmware RT1062 integrovaný akcelerometr k modulu imu — imu senzor nepřipojuje. Komunikujte s ním místo toho přímo po interní sběrnici I²C — čip je na adrese 0x15 a obsahuje tři znaménkové 12‑bitové kanály zrychlení plus 8‑bitový bajt teploty počínaje registrem 0x03

import machine
import time

ADDR     = 0x15
DATA_REG = 0x03
LSB_PER_G = 1024.0    # ±2 g range

def s12(hi, lo):
    v = ((hi << 8) | lo) >> 4
    return v - 0x1000 if v & 0x800 else v

bus = machine.I2C(2)
print("Devices on I²C2:", bus.scan())

while True:
    d = bus.readfrom_mem(ADDR, DATA_REG, 7)
    x = s12(d[0], d[1]) / LSB_PER_G
    y = s12(d[2], d[3]) / LSB_PER_G
    z = s12(d[4], d[5]) / LSB_PER_G
    temp_c = d[6] * 0.586 + 25.0
    print("x=%+.2fg  y=%+.2fg  z=%+.2fg  T=%.1f°C" % (x, y, z, temp_c))
    time.sleep_ms(100)

EEPROM

Desky R6 a novější obsahují generickou 4 KB I²C EEPROM na téže interní sběrnici jako akcelerometr. (Starší revize ji nemají — volání těchto úryvků na R4/R5 vyprší kvůli chybějícímu I²C ack.) Použijte standardní API machine.I2C readfrom_mem / writeto_mem s 16‑bitovou adresou paměti:

import machine
import time

EEPROM_ADDR = 0x50            # default address
PAGE_SIZE   = 32              # bytes per page (both read and write)
EEPROM_SIZE = 4096

bus = machine.I2C(2)

# Dump the entire 4 KB one page at a time
data = bytearray()
for offset in range(0, EEPROM_SIZE, PAGE_SIZE):
    data += bus.readfrom_mem(EEPROM_ADDR, offset, PAGE_SIZE, addrsize=16)
print(len(data), "bytes")

# Write a small payload back at offset 0 (fits in one page)
bus.writeto_mem(EEPROM_ADDR, 0, b"hello, world", addrsize=16)
time.sleep_ms(10)             # ~5 ms write cycle after each page

# Read it back
print(bus.readfrom_mem(EEPROM_ADDR, 0, 12, addrsize=16))

Jak čtení, tak zápisy musí zůstat v rámci jedné 32bajtové stránky. Jakýkoli větší přenos rozdělte na jedno volání na stránku a mezi po sobě jdoucí zápisy přidejte prodlevu zápisového cyklu ~5 ms.

Wi‑Fi

Integrovaný modul z rodiny CYW43 je vyveden přes network — konfigurace sítě jako stanicové rozhraní. Po připojení ipconfig("addr4") vrací dvojici (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

Tentýž bezdrátový modul vyvádí také Bluetooth 5.1. Pro BLE přívětivé k asyncio použijte aioble — Asynchronní BLE — například inzerujte jako periferie a vyčkejte na připojení centrály:

import asyncio
import aioble

async def run():
    while True:
        conn = await aioble.advertise(250_000, name="OpenMV-RT1062")
        print("Connected:", conn.device)
        await conn.disconnected()

asyncio.run(run())

Ethernet

Když je k MDI ploškám připojen RJ45 (s magnetikou), 10/100 PHY se objeví jako rozhraní LAN. Jakmile linka naběhne, automaticky se spustí DHCP:

import network, time

lan = network.LAN()
lan.active(True)
while not lan.isconnected():
    time.sleep(1)
print("Ethernet IP:", lan.ipconfig("addr4")[0])

Karta microSD

Po vložení karty se automaticky připojí na /sdcard a je použitelná přes běžný souborový systém:

import os

for entry in os.listdir("/sdcard"):
    print(entry)

Referenční přehled sběrnic

GPIO

Použijte machine.Pin pro čtení nebo řízení kteréhokoli z popsaných pinů. Výstupy jsou 3,3 V CMOS a mohou pojmout/dodat až 4 mA na 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())

Kterýkoli vstupní pin může také vyvolat přerušení při hranových přechodech:

def handler(pin):
    print("triggered:", pin)

Pin("P1", Pin.IN, Pin.PULL_UP).irq(
    handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)

UART

Sběrnice

TX

RX

UART1

P4

P5

from machine import UART

uart = UART(1, baudrate=115200)
uart.write("hello")
uart.read(5)

I²C

Sběrnice

SCL

SDA

I2C1

P4

P5

from machine import I2C

i2c = I2C(1, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")

Stejný hardware lze použít i v režimu cíle (slave) přes machine.I2CTarget k vyvedení paměťové oblasti jinému I²C řadiči:

from machine import I2CTarget

buf = bytearray(32)
target = I2CTarget(1, addr=0x42, mem=buf)

SPI

Sběrnice

MOSI

MISO

SCK

CS

SPI1

P0

P1

P2

P3

from machine import SPI
from machine import Pin

spi = SPI(1, 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

Sběrnice

TX

RX

CAN1

P1

P3

Poznámka

CAN zatím není na této desce ve firmwaru v5.0.0 podporován.

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

Jediný uživatelský ADC pin je P6, který má plný rozsah při ~3,3 V:

from machine import ADC
import time

adc = ADC("P6")
while True:
    voltage = adc.read_u16() * 3.3 / 65535
    print(voltage)
    time.sleep_ms(100)

PWM

Pin

Kanál FlexPWM

P0

PWM2 B3

P2

PWM2 B3

P4

PWM1 X2

P5

PWM1 X3

P7

PWM2 A0

P8

PWM2 B0

P9

PWM1 A3

P10

PWM1 B3

Řiďte kterýkoli z nich přes machine.PWM

from machine import Pin, PWM

pwm = PWM(Pin("P9"), freq=1_000, duty_u16=32768)

Softwarově bit‑bangované sběrnice

machine.SoftI2C a machine.SoftSPI fungují na libovolném GPIO, pokud potřebujete další sběrnici.

Termální senzor (mimo desku)

Firmware obsahuje ovladač fir — ovladač termálního senzoru (fir == far infrared, vzdálené infračervené záření) pro externě zapojené termální zobrazovače:

  • MLX90621 — IR pole 16 × 4

  • MLX90640 — IR pole 32 × 24

  • MLX90641 — IR pole 16 × 12

  • AMG8833 — IR pole 8 × 8

Modul zapojte na sběrnici I²C desky a čtěte snímky pomocí 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())

Ovladač fir komunikuje se senzorem pouze přes I²C 4 — modul zapojte na P4 (SCL) a P5 (SDA).

Časování

time

Modul time pokrývá blokující prodlevy, monotónní tiky a měření uplynulého času:

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)

Virtuální časovače

machine.Timer plánuje periodické nebo jednorázové callbacky, aniž by zabíral slot hardwarového časovače. Pro použití virtuálního (softwarového) časovače předejte jako id hodnotu -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"))

Hodnoty periody jsou v milisekundách. Pro zastavení a uvolnění slotu zavolejte deinit().

Hodiny reálného času

machine.RTC udržuje reálný čas napříč resety a (s volitelnou 3,3 V záložní baterií zapojenou na zadní plošky, viz Napájecí piny) i napříč úplnou ztrátou napájení:

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 běží i během hlubokého spánku, takže jej můžete použít jako zdroj probuzení pro machine.deepsleep().

Watchdog

machine.WDT resetuje desku, pokud aplikace zamrzne. Po spuštění jej nelze zastavit ani znovu nakonfigurovat — pravidelně jej krmte uvnitř hlavní smyčky:

from machine import WDT

wdt = WDT(timeout=5_000)   # 5 second window
while True:
    # ...do work...
    wdt.feed()

Informace o bootu a běhu

Okno USB bootloaderu

Při každém zapnutí kamera spustí krátký bootloader (několik sekund), který umožní OpenMV IDE aktualizovat firmware, aniž by uživatel musel vstupovat do režimu DFU. Po vypršení okna bootloader předá řízení boot.py a poté main.py.

Běžící skript může na vyžádání znovu vstoupit do bootloaderu voláním machine.bootloader()

import machine

machine.bootloader()

Souborový systém a pořadí bootu

Firmware RT1062 při bootu připojuje až tři souborové systémy:

  • Interní flash — vždy připojena na /flash. Ve výchozím stavu obsahuje main.py a README.txt; vytvoří se při úplně prvním bootu.

  • Karta microSD — pokud je karta vložena, připojí se na /sdcard.

  • ROMFS — souborový systém pouze pro čtení mapovaný do paměti na /rom používaný k distribuci velkých datových zdrojů (např. AI modelů), které těží z přístupu bez kopírování. Připojuje jej automaticky MicroPython při startu, ještě před spuštěním jakéhokoli uživatelského Python kódu.

Po připojení je pracovní adresář nastaven na /sdcard, pokud je karta přítomna, jinak na /flash. Interpret pak spouští skripty z tohoto adresáře:

  • boot.py se spouští při každém softwarovém resetu (studený start, Ctrl‑D z REPL nebo kdykoli běžící skript skončí).

  • main.py se spouští pouze při studeném startu, hned po boot.py. Následné softwarové resety znovu spustí boot.py, ale přejdou rovnou do REPL — pro opětovné spuštění main.py musíte desku plně resetovat.

Umístění boot.py nebo main.py na SD kartu přepíše kopii ve flash paměti, aniž by se jí dotklo — oba soubory se vyhledávají v bootovacím adresáři (/sdcard, když je karta připojena, jinak /flash).

Výchozí main.py dodávaný na čerstvě naflashované desce pouze bliká modrým kanálem uživatelské RGB LED jako heartbeat (dva krátké pulzy, krátká mezera), takže poznáte, že firmware nabootoval čistě, i bez připojeného hostitele.

sys.path je rozšířen tak, aby zahrnoval všechny tři souborové systémy a jejich podadresáře lib/, takže importovatelné moduly mohou být v /flash/lib, /sdcard/lib nebo /rom/lib.

Chcete‑li přimět systém ignorovat vloženou SD kartu (například pro spuštění main.py z flash paměti i při přítomné kartě), vytvořte v kořeni /flash prázdný soubor s názvem SKIPSD.

Při připojení přes USB se bootovací souborový systém (/sdcard, pokud je karta přítomna, jinak /flash) na hostiteli vyenumeruje také jako USB velkokapacitní úložiště, což vám umožní přímo upravovat boot.py, main.py a jakékoli další soubory. Před resetem kamery jednotku odpojte (eject), aby hostitel vyprázdnil své cache zápisy.

Poznámka

Protože OS zachází s jednotkou jako s pasivním blokovým zařízením, soubory vytvořené nebo upravené kódem běžícím na OpenMV Cam se neobjeví, dokud hostitel jednotku znovu nepřipojí. Pokud OS i OpenMV Cam zapisují do téhož souborového systému současně, OS zvítězí a přepíše změny provedené kamerou. Pro jakákoli data, která skript zapisuje zpět, použijte SD kartu a před jejich čtením z hostitele jednotku znovu připojte.

Poznámka

Červený kanál uživatelské RGB LED se může krátce rozsvítit, zatímco hostitel čte z USB velkokapacitního úložiště nebo do něj zapisuje — jde o indikátor aktivity řízený firmwarem, nikoli o závadu.

Velikosti úložišť

RT1062 se dodává s:

  • /flash — souborový systém FAT 4 MB, čtení/zápis.

  • /rom8 MB ROMFS pouze pro čtení mapovaný do paměti, používaný k distribuci skriptů a ML modelů, které těží z přístupu mmap bez kopírování.

  • /sdcard — plná velikost jakékoli vložené karty microSD (je‑li přítomna), čtení/zápis.

Indikátor hard‑faultu

Pokud uživatelská RGB LED rychle cyklicky střídá všechny barvy — natolik rychle, že to spíše vypadá jako mihotavá bílá LED než jednotlivé odstíny — firmware narazil na neobnovitelný hard fault. K obnově přeflashujte firmware; pokud přeflashování nepomůže, deska může být fyzicky poškozená.

Softwarové knihovny

Kompletní seznam modulů — včetně toho, které jsou jedinečné pro build RT1062 — najdete v indexu knihoven.