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.
Особливості¶
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.
Розпіновка¶
Довідник виводів¶
Назва виводу |
Функція |
|---|---|
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_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
Світлодіод живлення — керується безпосередньо апаратним забезпеченням управління живленням на платі, без програмного керування. Використовуйте його для швидкої перевірки стану джерела живлення.
Під час роботи:
Канал
Значення
Синій
VIN живить плату (вимкнений при USB)
Зелений
Присутнє живлення від USB або VIN
Червоний
заряджається підключений акумулятор LiPo
У режимі глибокого сну всі канали вимкнені крім Червоного, який продовжує світитися під час заряджання LiPo.
Виводи стану живлення¶
Три активних низьких входи стану від вбудованого чіпа управління живленням:
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 МБ, читання/запис./rom— 8 МБ файлова система ROMFS лише для читання з відображенням у пам’яті, що використовується для постачання скриптів та моделей МН, які виграють від доступу mmap без копіювання./sdcard— повний розмір вставленої карти microSD (при наявності), читання/запис.
Індикатор апаратної помилки¶
Якщо RGB-світлодіод користувача швидко перебирає всі кольори — достатньо швидко, що це скоріше виглядає як мерехтливий білий світлодіод, а не окремі відтінки — мікропрограма зазнала невідновлюваної апаратної помилки. Перепрошийте мікропрограму для відновлення; якщо перепрошивка не допомагає, плата може бути фізично пошкоджена.
Програмні бібліотеки¶
Дивіться індекс бібліотек для повного списку модулів — включаючи ті, що є унікальними для збірки RT1062.