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ů#

OpenMV Cam RT1062 OV5640 Pinout

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

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.