OpenMV Cam RT1062

OpenMV Cam RT1062 — це малопотужна плата технічного зору на базі NXP i.MX RT1062 (Cortex‑M7 @ 600 МГц). Плата поєднує високошвидкісний USB‑C, Wi‑Fi/Bluetooth та 10/100 Ethernet із датчиком OV5640 5 МП на знімному модулі. Камера споживає лише ~30 мкА від акумулятора LiPo у режимі глибокого сну, що робить її ідеальною для проєктів із живленням від акумулятора.

OpenMV Cam RT1062

Повну документацію, фотографії та розміри дивіться на сторінці продукту OpenMV Cam RT1062.

Особливості

  • NXP i.MX RT1062 Cortex‑M7 на 600 МГц.

  • 32 МБ зовнішньої SDRAM (16‑розрядна @ 160 МГц, 320 МБ/с) плюс 1 МБ внутрішньої SRAM та 16 МБ QSPI флеш-пам’яті (133 МГц 4‑розрядний SDR, 66 МБ/с читання); 4 КБ EEPROM на R6+.

  • Датчик OV5640 5 МП із ковзаючим затвором.

  • Вбудований IMU (12‑розрядний 3‑осьовий акселерометр, ±2/4/8 g).

  • Високошвидкісний USB‑C (480 Мб/с, обмеження струму 1,5 А), 10/100 Мб/с Ethernet (підтримка PoE через шилд), Wi‑Fi a/b/g/n + Bluetooth 5.1 (антена на чіпі або варіант U.FL).

  • Роз’єм microSD — SD до 2 ГБ, SDHC до 32 ГБ, SDXC до 2 ТБ.

  • Зарядний пристрій LiPo (500 мА на R6+, 100 мА на R4/R5), RTC із контактними майданчиками для резервного акумулятора. Глибокий сон споживає ~30 мкА від акумулятора.

  • 14 виводів вводу/виводу, всі 3,3 В вихід / 3,3 В сумісний, 4 мА на вивід, з підтримкою переривань.

  • Користувацький RGB-світлодіод, кнопка SW, апаратна кнопка живлення (автомат станів глибокого сну / пробудження) та окремий статусний світлодіод для індикації зарядки / USB / живлення від VIN.

Попередження

Виводи вводу/виводу RT1062 не сумісні з 5 В. Не підключайте пристрій безпосередньо до 5 В мікроконтролера, наприклад Arduino Mega. Живіть плату лише через VIN.

Розпіновка

OpenMV Cam RT1062 OV5640 Pinout

Довідник виводів

Назва виводу

Функція

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 / синхронізація кадрів вхід/вихід

P11

пробудження (активний низький рівень, підключіть до GND для пробудження)

P12

RESET — підтягніть до GND для скидання плати (не GPIO)

P13

цифровий вхід/вихід

P14

цифровий вхід/вихід

ON/OFF

контактний майданчик заголовка, що реплікує апаратну кнопку живлення (активний низький рівень)

SW

кнопка користувача (активний низький рівень)

ST

низький при живленні від VIN, високий при живленні від USB

CHG

активний низький рівень; низький, поки підключений акумулятор LiPo заряджається

PG

активний низький рівень; низький, коли присутнє живлення від VIN або USB

LED_RED

червоний канал RGB-світлодіода (активний низький рівень)

LED_GREEN

зелений канал RGB-світлодіода (активний низький рівень)

LED_BLUE

синій канал RGB-світлодіода (активний низький рівень)

Примітка

Лінія синхронізації кадрів P10 є спільною шиною. Вона підключена одночасно до MCU, виводу тригера/витримки датчика камери та роз’єму користувача. Напрямок визначається застосунком — MCU, датчик або зовнішній сигнал можуть керувати нею залежно від конфігурації датчика. Переконайтеся, що одночасно активний лише один драйвер.

Примітка

ON/OFF та P11 прив’язані до завжди ввімкненої шини RAW (не до комутованої шини 3,3 В), тому вони залишаються функціональними, поки решта плати перебуває в режимі глибокого сну / малого споживання. Обидва входи активні при низькому рівні.

Ці виводи проходять через перетворювачі рівнів, щоб вони могли використовувати шину RAW. Якщо вам абсолютно необхідна безпосередня поведінка GPIO 3,3 В на ON/OFF або P11 (наприклад, щоб керувати ними від MCU 3,3 В без проходження через перетворювач), плата має підтягуючі та нульомних омних перемикальні контактні майданчики, що дозволяють обійти перетворювач. Це складне апаратне доопрацювання — більшості користувачів слід залишити все без змін.

Примітка

P13 та P14 за замовчуванням є звичайними GPIO без спеціальних функцій. Контактні майданчики можна за бажанням перекомутувати на інші сигнали, перепаявши перемичкові резистори 0 Ом на зворотному боці плати:

  • P13 ↔ статус CHG / JTAG TRSTB

  • P14 ↔ статус ST / JTAG TDI

Більшості користувачів не потрібно чіпати ці перемички — залиште їх у режимі GPIO за замовчуванням, якщо вам спеціально не потрібен зворотний зв’язок управління живленням або JTAG.

Виводи живлення

  • 3.3V — стабілізована шина 3,3 В. Лише вихід на RT1062 — не подавайте зовнішнє живлення на цей вивід. До 1 А доступно для шилдів.

  • VIN — вхід 5 В. Живить плату та вбудований зарядний пристрій LiPo.

  • RAW — вхід/вихід, завжди ввімкнений (3,6 В – 5 В). Несе будь-яке активне джерело (VIN, USB або підключений акумулятор) і може також використовуватися як вхід. Ви повинні підключати RAW через послідовний діод при подачі живлення в нього — інакше струм потече назад у VIN/USB та пошкодить джерело живлення або вбудований захист.

  • GND — спільна земля.

Примітка

Вбудований чіп управління живленням автоматично вибирає USB або VIN із вищою напругою для живлення плати та зарядного пристрою акумулятора. Якщо підключено LiPo, він заряджається на залишковій напрузі, а контролер перемикається на акумулятор для підтримання роботи плати, якщо VIN/USB просідають або відключаються.

Примітка

На звороті плати є контактні майданчики для зовнішнього резервного акумулятора RTC 3,3 В. Підключення таблеткової батарейки до цих майданчиків підтримує роботу RTC, поки решта плати знеструмлена.

Порада

Використовуйте калькулятор ресурсу акумулятора, щоб змоделювати, як довго RT1062 буде працювати від акумулятора для заданого циклу активності / глибокого сну.

Виводи Ethernet

RT1062 виводить пари MDI PHY Ethernet 10/100 Мб/с на виділені контактні майданчики поруч із роз’ємом GPIO. Виводи MDI небезпечно підключати безпосередньо до RJ45 — між PHY та кабелем необхідна магнітна розв’язка Ethernet (ізолюючий трансформатор, вбудований у magjack або на шилді). OpenMV PoE шилд включає їх; якщо ви виготовляєте власний роз’єм, використовуйте RJ45 з вбудованими магнітами або зовнішній трансформатор.

  • ETH_LED — світлодіод зв’язку/активності. Активний низький рівень при наявності зв’язку; мигає при передачі трафіку.

  • ETH_TXP / ETH_TXN — пара передачі.

  • ETH_RXP / ETH_RXN — пара прийому.

Примітка

Роз’єм також виводить чотири контактні майданчики з трафаретним написом Reserved. Вони сумісні за рисунком контактів із парами гігабітного Ethernet на OpenMV N6 (DC P/N та DD P/N), щоб один і той самий Ethernet / PoE шилд можна було підключити до обох плат. PHY RT1062 підтримує лише 10/100 Мб/с, тому ці чотири майданчики не мають електричного з’єднання — залишіть їх непідключеними.

Виводи відновлення та налагодження

  • RESET — підтягніть до GND для скидання плати. Відпускання дозволяє MCU запуститися нормально.

  • SBL — підтягніть до 3,3 В під час подачі живлення на плату для входу в режим ROM завантажувача (Serial Boot Loader). OpenMV IDE використовує цей режим для перепрошивки вбудованого завантажувача.

Встановлено виділений роз’єм ARM 10‑pin SWD/JTAG, сумісний із адаптерами ST‑LINK та SEGGER J‑Link.

Примітка

RT1062 за замовчуванням виводить лише SWD налагодження через цей роз’єм. Повний JTAG недоступний з коробки.

Вбудовані периферійні пристрої

Світлодіоди

RT1062 має два RGB-світлодіоди:

  • Користувацький RGB-світлодіод — керований програмно, доступний як LED_RED, LED_GREEN та LED_BLUE

    from machine import LED
    
    LED("LED_RED").on()
    LED("LED_GREEN").on()
    LED("LED_BLUE").on()
    
  • Світлодіод живлення — керується безпосередньо апаратним забезпеченням управління живленням на платі, без програмного керування. Використовуйте його для швидкої перевірки стану джерела живлення.

    Під час роботи:

    Канал

    Значення

    Синій

    VIN живить плату (вимкнений при USB)

    Зелений

    Присутнє живлення від USB або VIN

    Червоний

    заряджається підключений акумулятор LiPo

    У режимі глибокого сну всі канали вимкнені крім Червоного, який продовжує світитися під час заряджання LiPo.

Кнопки

RT1062 має дві кнопки:

  • SW — кнопка користувача загального призначення. Зчитується з коду як звичайний вхід GPIO активного низького рівня:

    from machine import Pin
    
    sw = Pin("SW", Pin.IN)
    print(sw.value())
    
  • Кнопка живлення — керується виділеним автоматом станів контролера живлення на платі RT1062, повністю апаратно. Вона не доступна для користувацького коду; контролер вирішує, що робити, залежно від тривалості утримання:

    • Утримуйте ~5 с, поки плата працює → автомат станів переходить у режим глибокого сну.

    • Утримуйте ~1 с, поки плата в режимі глибокого сну → автомат станів вмикає систему знову.

    Подача низького рівня на контактний майданчик заголовка ON/OFF має той самий ефект, що й натискання кнопки живлення на платі — корисно для підключення зовнішнього вимикача або керування лінією від іншого мікроконтролера.

Виводи стану живлення

Три активних низьких входи стану від вбудованого чіпа управління живленням:

  • PG — низький, коли присутнє живлення від VIN або USB. Завжди підключений.

  • ST — низький, коли плата працює від VIN, високий при роботі від USB. За замовчуванням не підключений.

  • CHG — низький, поки підключений акумулятор LiPo заряджається. За замовчуванням не підключений.

from machine import Pin

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

Датчик камери

OV5640 керується через модуль csi — датчики камери

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 має вбудований JPEG-компресор. Встановіть csi.CSI.pixformat на csi.JPEG, і датчик доставляє стиснуті кадри безпосередньо на камеру через шину камери, що робить захоплення з високою роздільною здатністю практичним: csi.HD (1280×720), csi.FHD (1920×1080) та повний 5 МП csi.WQXGA2 (2592×1944) — усі передаються як JPEG. Налаштуйте стиснення за допомогою csi.CSI.quality (0-100, вище = більші кадри, більше деталей):

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

Датчик розміщений на знімному модулі — замініть його на будь-який інший модуль камери OpenMV (глобальний затвор, тепловізійний, з вищою роздільною здатністю тощо) без зміни решти плати.

Машинне навчання

ml — Машинне навчання запускає квантовані моделі TFLite на Cortex‑M7 з ядрами CMSIS‑NN — достатньо швидко для компактних детекторів при кількох кадрах на секунду. Моделі у файловій системі /rom лише для читання завантажуються безпосередньо з флеш-пам’яті без копіювання в RAM. Ось детектор BlazeFace 128×128, що накладає виявлене обличчя та шість його ключових точок на кожен кадр:

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

Мікропрограма RT1062 не підключає вбудований акселерометр до модуля imu — датчик IMU. Спілкуйтесь із ним безпосередньо через внутрішню шину I²C — чіп знаходиться за адресою 0x15 і містить три знакових 12‑розрядних канали прискорення плюс байт температури з 8 розрядів, починаючи з регістру 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

Плати R6 та пізніших версій включають стандартний 4 КБ I²C EEPROM на тій самій внутрішній шині, що й акселерометр. (Більш ранні ревізії не мають його — виклик цих фрагментів коду на R4/R5 завершиться тайм-аутом через відсутність підтвердження I²C.) Використовуйте стандартний API machine.I2C readfrom_mem / writeto_mem із 16‑розрядною адресою пам’яті:

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))

Читання та запис повинні залишатися в межах 32‑байтної сторінки. Розділіть будь-яке більше передавання на один виклик на сторінку та додайте затримку циклу запису ~5 мс між послідовними записами.

Wi‑Fi

Вбудований модуль сімейства CYW43 доступний через 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

Той самий бездротовий модуль також підтримує Bluetooth 5.1. Використовуйте aioble — Async BLE для BLE з підтримкою asyncio — наприклад, оголошуйте як периферійний пристрій та очікуйте підключення центрального:

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

Коли до контактних майданчиків MDI підключено RJ45 (з магнітами), PHY 10/100 з’являється як інтерфейс 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 для читання або керування будь-яким із виводів, позначених на трафареті. Виходи — CMOS 3,3 В і можуть поглинати/видавати до 4 мА на вивід.

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

UART1

P4

P5

from machine import UART

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

I²C

Шина

SCL

SDA

I2C1

P4

P5

from machine import I2C

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

Те саме апаратне забезпечення також може використовуватися в режимі ведомого (slave) через machine.I2CTarget для надання доступу іншому контролеру I²C до області пам’яті:

from machine import I2CTarget

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

SPI

Шина

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

Шина

TX

RX

CAN1

P1

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 користувача — P6, повна шкала приблизно 3,3 В:

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

Вивід

Канал 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

Керуйте будь-яким із них через machine.PWM

from machine import Pin, PWM

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

Програмні шини bit-bang

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 4 — підключіть модуль до 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"))

Значення періоду вказуються в мілісекундах. Викличте 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()

Файлова система та порядок завантаження

Мікропрограма RT1062 монтує до трьох файлових систем при завантаженні:

  • Внутрішня флеш-пам’ять — завжди змонтована в /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-світлодіода користувача як серцебиття (два коротких імпульси, короткий інтервал), щоб ви могли переконатися, що мікропрограма завантажилась успішно без підключеного хосту.

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-світлодіода користувача може коротко засвітитися, поки хост читає з або записує на USB накопичувач — це індикатор активності, керований мікропрограмою, а не несправність.

Розміри сховища

RT1062 постачається з:

  • /flash — FAT файлова система 4 МБ, читання/запис.

  • /rom8 МБ файлова система ROMFS лише для читання з відображенням у пам’яті, що використовується для постачання скриптів та моделей МН, які виграють від доступу mmap без копіювання.

  • /sdcard — повний розмір вставленої карти microSD (при наявності), читання/запис.

Індикатор апаратної помилки

Якщо RGB-світлодіод користувача швидко перебирає всі кольори — достатньо швидко, що це скоріше виглядає як мерехтливий білий світлодіод, а не окремі відтінки — мікропрограма зазнала невідновлюваної апаратної помилки. Перепрошийте мікропрограму для відновлення; якщо перепрошивка не допомагає, плата може бути фізично пошкоджена.

Програмні бібліотеки

Дивіться індекс бібліотек для повного списку модулів — включаючи ті, що є унікальними для збірки RT1062.