OpenMV Cam RT1062¶
A OpenMV Cam RT1062 é uma placa de visão por computador de baixo consumo construída em torno do NXP i.MX RT1062 (Cortex‑M7 @ 600 MHz). A placa combina rede USB‑C de alta velocidade, Wi‑Fi/Bluetooth e Ethernet 10/100 com um sensor OV5640 de 5 MP num módulo amovível. A câmara consome apenas ~30 µA de uma bateria LiPo em modo de sono profundo, o que a torna muito adequada para projetos alimentados por bateria.
Para o datasheet completo, fotografias e dimensões, consulte a página do produto OpenMV Cam RT1062.
Destaques¶
NXP i.MX RT1062 Cortex‑M7 a 600 MHz.
32 MB de SDRAM externa (16 bits @ 160 MHz, 320 MB/s) mais 1 MB de SRAM interna e 16 MB de flash QSPI (133 MHz 4 bits SDR, 66 MB/s de leitura); 4 KB de EEPROM na R6+.
Sensor OV5640 de 5 MP com obturador rolante.
IMU integrado (acelerómetro de 3 eixos de 12 bits, ±2/4/8 g).
USB‑C de alta velocidade (480 Mb/s, limite de 1,5 A), Ethernet 10/100 Mb/s (com suporte a PoE via shield), Wi‑Fi a/b/g/n + Bluetooth 5.1 (antena integrada ou opção U.FL).
Conector microSD — SD até 2 GB, SDHC até 32 GB, SDXC até 2 TB.
Carregador LiPo (500 mA na R6+, 100 mA na R4/R5), RTC com pads de bateria de reserva. O sono profundo consome ~30 µA com bateria.
14 pinos de I/O, todos com saída de 3,3 V / tolerantes a 3,3 V, 4 mA por pino, com suporte a interrupção.
LED RGB de utilizador, botão SW de utilizador, botão de alimentação por hardware (máquina de estados de sono profundo / despertar) e um LED de estado separado para carregamento / USB / alimentação VIN.
Aviso
Os pinos de I/O do RT1062 não são tolerantes a 5 V. Não ligue o dispositivo diretamente a um MCU de 5 V como o Arduino Mega. Alimente a placa exclusivamente através de VIN.
Pinout¶
Referência de pinos¶
Nome do pino |
Função |
|---|---|
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 / sincronização de fotograma I/O |
P11 |
despertar (ativo baixo, ligar ao GND para despertar) |
P12 |
RESET — ligar ao GND para reiniciar a placa (não é um GPIO) |
P13 |
I/O digital |
P14 |
I/O digital |
ON/OFF |
pad de cabeçalho que replica o botão de alimentação por hardware (ativo baixo) |
SW |
botão de utilizador (ativo baixo) |
ST |
baixo com alimentação VIN, alto com alimentação USB |
CHG |
ativo baixo; baixo enquanto uma bateria LiPo ligada está a carregar |
PG |
ativo baixo; baixo quando há alimentação VIN ou USB |
LED_RED |
canal vermelho do LED RGB (ativo baixo) |
LED_GREEN |
canal verde do LED RGB (ativo baixo) |
LED_BLUE |
canal azul do LED RGB (ativo baixo) |
Nota
A linha de sincronização de fotograma P10 é um barramento partilhado. Está ligada ao MCU, ao pino de disparo / exposição do sensor da câmara e ao cabeçalho de utilizador em simultâneo. A direção é definida pela aplicação — o MCU, o sensor ou um sinal externo pode controlá-la consoante a configuração do sensor. Certifique-se de que apenas um controlador está ativo de cada vez.
Nota
ON/OFF e P11 estão referenciados ao rail RAW sempre ativo (não ao rail de 3,3 V comutado), pelo que permanecem funcionais enquanto o resto da placa está em modo de sono profundo / baixo consumo. Ambas as entradas são ativas baixas.
Estes pinos passam por conversores de nível para poderem funcionar no rail RAW. Se precisar absolutamente de comportamento GPIO direto a 3,3 V em ON/OFF ou P11 (por exemplo, para os controlar a partir de um MCU a 3,3 V sem passar pelo conversor), a placa expõe pads de pull‑up e pontes de 0 ohm que permitem contornar o conversor. Trata-se de uma modificação de hardware avançada — a maioria dos utilizadores deve deixá-la como está.
Nota
P13 e P14 são GPIO simples por defeito sem função especial. Os pads podem, opcionalmente, ser redirecionados para outros sinais ao refundir as pontes de resistência de 0 ohm na parte traseira da placa:
P13 ↔ estado CHG / JTAG TRSTB
P14 ↔ estado ST / JTAG TDI
A maioria dos utilizadores não irá tocar nestas pontes — deixe-as no modo GPIO predefinido, a não ser que precise especificamente de leitura de estado de gestão de energia ou de JTAG.
Pinos de alimentação¶
3.3V — rail regulado de 3,3 V. Apenas saída no RT1062 — não ligue alimentação externa neste pino. Disponível até 1 A para shields.
VIN — entrada de 5 V. Alimenta a placa e o carregador LiPo integrado.
RAW — entrada/saída, sempre ativo (3,6 V – 5 V). Transporta a fonte ativa (VIN, USB ou bateria ligada) e pode também ser usado como entrada. Deve colocar um díodo em série com RAW ao injetar alimentação — caso contrário, a corrente fluirá de volta para VIN/USB e poderá danificar a fonte ou a proteção integrada.
GND — terra comum.
Nota
O chip de gestão de energia integrado seleciona automaticamente USB ou VIN, consoante a tensão mais elevada, para alimentar a placa e o carregador de bateria. Se uma LiPo estiver ligada, carrega com a margem disponível, e o controlador recorre à bateria para manter a placa em funcionamento se VIN/USB baixar ou for desligado.
Nota
A parte traseira da placa tem pads de solda para uma bateria de reserva RTC de 3,3 V externa. Ligar uma pilha de botão a estes pads mantém o RTC em funcionamento enquanto o resto da placa está sem alimentação.
Dica
Utilize o estimador de autonomia de bateria para modelar quanto tempo o RT1062 funcionará com uma bateria para um determinado ciclo de trabalho ativo / sono profundo.
Pinos Ethernet¶
O RT1062 expõe os pares MDI do PHY Ethernet 10/100 Mb/s em pads dedicados junto ao cabeçalho GPIO. Os pinos MDI não são seguros para ligar diretamente a um RJ45 — são obrigatórios magnéticos Ethernet (um transformador de isolamento, integrado num magjack ou num shield) entre o PHY e o cabo. O shield PoE da OpenMV já os inclui; se estiver a usar o seu próprio conector, utilize um RJ45 com magnéticos integrados ou um transformador externo.
ETH_LED — LED de ligação/atividade. Ativo baixo quando existe ligação; pisca com tráfego.
ETH_TXP / ETH_TXN — par de transmissão.
ETH_RXP / ETH_RXN — par de receção.
Nota
O cabeçalho também expõe quatro pads com a serigrafia Reserved. Estes são compatíveis com os pares Ethernet gigabit da OpenMV N6 (DC P/N e DD P/N), para que o mesmo shield Ethernet / PoE possa ser ligado a qualquer uma das placas. O PHY do RT1062 só suporta 10/100 Mb/s, pelo que esses quatro pads não têm conectividade elétrica — deixe-os desligados.
Pinos de recuperação e depuração¶
RESET — ligar ao GND para reiniciar a placa. Ao soltar, o MCU arranca normalmente.
SBL — ligar a 3,3 V durante a alimentação da placa para entrar no modo de bootloader ROM (Serial Boot Loader). O OpenMV IDE usa este modo para re-flashar o bootloader integrado.
Está incluído um cabeçalho dedicado ARM 10 pinos SWD/JTAG, compatível com adaptadores ST‑LINK e SEGGER J‑Link.
Nota
O RT1062 expõe apenas depuração SWD através deste conector por defeito. O JTAG completo não está disponível de raiz.
Periféricos integrados¶
LEDs¶
O RT1062 tem dois LEDs RGB:
LED RGB de utilizador — controlável por software, exposto como
LED_RED,LED_GREENeLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
LED de alimentação — controlado diretamente pelo hardware de gestão de energia integrado, sem controlo por software. Use-o para verificar rapidamente o estado da alimentação.
Durante o funcionamento:
Canal
Significado
Azul
VIN está a alimentar a placa (apagado em USB)
Verde
Alimentação USB ou VIN presente
Vermelho
a carregar uma bateria LiPo ligada
Em sono profundo, todos os canais estão apagados exceto o Vermelho, que permanece aceso enquanto uma LiPo está a carregar.
Pinos de estado de alimentação¶
Três entradas de estado ativas baixas do chip de gestão de energia integrado:
PG — baixo quando há alimentação VIN ou USB. Sempre ligado.
ST — baixo quando a placa está a funcionar em VIN, alto quando está em alimentação USB. Não ligado por defeito.
CHG — baixo enquanto uma bateria LiPo ligada está a carregar. Não ligado por defeito.
from machine import Pin
power_ok = not Pin("PG", Pin.IN).value()
Sensor da câmara¶
O OV5640 é controlado através do módulo csi — sensores de câmara
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()
O OV5640 possui um compressor JPEG integrado. Defina csi.CSI.pixformat como csi.JPEG e o sensor entrega fotogramas comprimidos diretamente à câmara através do barramento de câmara, tornando as capturas de alta resolução práticas: csi.HD (1280×720), csi.FHD (1920×1080) e o csi.WQXGA2 completo de 5 MP (2592×1944) são transmitidos como JPEG. Ajuste a compressão com csi.CSI.quality (0-100, maior = fotogramas maiores, mais detalhe):
cam.pixformat(csi.JPEG)
cam.framesize(csi.WQXGA2)
cam.quality(90)
O sensor está num módulo amovível — pode trocá-lo por qualquer um dos outros módulos de câmara OpenMV (obturador global, térmico, maior resolução, etc.) sem alterar o resto da placa.
Machine learning¶
ml — Machine Learning executa modelos TFLite quantizados no Cortex‑M7 com kernels CMSIS‑NN — rápido o suficiente para detetores compactos a alguns fotogramas por segundo. Os modelos no sistema de ficheiros só de leitura /rom carregam diretamente da flash sem copiar para a RAM. Eis um detetor BlazeFace 128×128 que sobrepõe a face detetada e os seus seis pontos de referência em cada fotograma:
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¶
O firmware do RT1062 não liga o acelerómetro integrado ao módulo imu — sensor imu. Em vez disso, comunique com ele diretamente através do barramento I²C interno — o chip está no endereço 0x15 e disponibiliza três canais de aceleração assinados de 12 bits mais um byte de temperatura de 8 bits a partir do registo 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¶
As placas R6 e posteriores incluem uma EEPROM I²C genérica de 4 KB no mesmo barramento interno que o acelerómetro. (As revisões anteriores não têm — chamar estes excertos em R4/R5 resultará em timeout por falta de ack I²C.) Utilize a API machine.I2C padrão com readfrom_mem / writeto_mem e endereço de memória de 16 bits:
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))
Tanto as leituras como as escritas devem permanecer dentro de uma página de 32 bytes. Divida qualquer transferência maior numa chamada por página e adicione o atraso de ~5 ms do ciclo de escrita entre escritas consecutivas.
Wi‑Fi¶
O módulo da família CYW43 integrado é exposto via network — configuração de rede como interface de estação. Após a ligação, ipconfig("addr4") devolve o par (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¶
O mesmo módulo sem fios também expõe Bluetooth 5.1. Utilize aioble — BLE Assíncrono para BLE compatível com asyncio — por exemplo, anunciar como periférico e aguardar a ligação de um central:
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¶
Quando um RJ45 (com magnéticos) está ligado aos pads MDI, o PHY 10/100 aparece como interface LAN. O DHCP é executado automaticamente assim que a ligação é estabelecida:
import network, time
lan = network.LAN()
lan.active(True)
while not lan.isconnected():
time.sleep(1)
print("Ethernet IP:", lan.ipconfig("addr4")[0])
Cartão microSD¶
Quando um cartão é inserido, é montado automaticamente em /sdcard e pode ser utilizado através do sistema de ficheiros normal:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Referência de barramentos¶
GPIO¶
Utilize machine.Pin para ler ou controlar qualquer um dos pinos com serigrafia. As saídas são CMOS a 3,3 V e podem drenar/fornecer até 4 mA por pino.
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())
Qualquer pino de entrada pode também disparar uma interrupção em transições de flanco:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Barramento |
TX |
RX |
|---|---|---|
UART1 |
P4 |
P5 |
from machine import UART
uart = UART(1, baudrate=115200)
uart.write("hello")
uart.read(5)
I²C¶
Barramento |
SCL |
SDA |
|---|---|---|
I2C1 |
P4 |
P5 |
from machine import I2C
i2c = I2C(1, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")
O mesmo hardware pode também ser usado em modo alvo (escravo) através de machine.I2CTarget para expor uma região de memória a outro controlador I²C:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(1, addr=0x42, mem=buf)
SPI¶
Barramento |
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¶
Barramento |
TX |
RX |
|---|---|---|
CAN1 |
P1 |
P3 |
Nota
CAN ainda não é suportado nesta placa no 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¶
O único pino ADC de utilizador é P6, com escala completa a ~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¶
Pino |
Canal 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 |
Controle qualquer um deles via machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P9"), freq=1_000, duty_u16=32768)
Barramentos por software (bit‑banging)¶
machine.SoftI2C e machine.SoftSPI funcionam em qualquer GPIO se precisar de um barramento adicional.
Sensor térmico (externo)¶
O firmware inclui o driver fir — driver de sensor térmico (fir == infravermelho longínquo) para sensores térmicos de imagem ligados externamente:
MLX90621 — matriz IR de 16 × 4
MLX90640 — matriz IR de 32 × 24
MLX90641 — matriz IR de 16 × 12
AMG8833 — matriz IR de 8 × 8
Ligue o módulo ao barramento I²C da placa e leia fotogramas com 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())
O driver fir apenas comunica com o sensor através de I²C 4 — ligue o módulo a P4 (SCL) e P5 (SDA).
Temporização¶
time¶
O módulo time cobre atrasos bloqueantes, tiques monotónicos e medição de tempo decorrido:
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)
Temporizadores virtuais¶
machine.Timer agenda callbacks periódicos ou de disparo único sem consumir uma slot de temporizador de hardware. Passe -1 como id para usar um temporizador virtual (por software):
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"))
Os valores de período estão em milissegundos. Chame deinit() para parar e libertar a slot.
Relógio em tempo real¶
machine.RTC mantém a hora do relógio entre resets e (com a bateria de reserva opcional de 3,3 V ligada aos pads traseiros, consulte Pinos de alimentação) após perda total de energia:
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())
O RTC também funciona durante o sono profundo, pelo que pode ser usado como fonte de despertar para machine.deepsleep().
Watchdog¶
machine.WDT reinicia a placa se a aplicação ficar bloqueada. Uma vez iniciado, não pode ser parado nem reconfigurado — alimente-o periodicamente dentro do seu ciclo principal:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Informação de arranque e tempo de execução¶
Janela de bootloader USB¶
Em cada arranque, a câmara executa um bootloader breve (alguns segundos) que permite ao OpenMV IDE atualizar o firmware sem que o utilizador tenha de entrar em modo DFU. Após a janela expirar, o bootloader passa o controlo para boot.py e depois para main.py.
Um script em execução pode reentrar no bootloader a pedido chamando machine.bootloader()
import machine
machine.bootloader()
Sistema de ficheiros e ordem de arranque¶
O firmware do RT1062 monta até três sistemas de ficheiros no arranque:
Flash interna — sempre montada em
/flash. Contémmain.pyeREADME.txtpor defeito; criada no primeiro arranque.Cartão microSD — se um cartão estiver inserido, é montado em
/sdcard.ROMFS — sistema de ficheiros só de leitura com mapeamento em memória em
/rom, usado para disponibilizar grandes recursos de dados (ex.: modelos de IA) que beneficiam de acesso sem cópia. Montado automaticamente pelo MicroPython no arranque, antes de qualquer código Python do utilizador ser executado.
Após a montagem, o diretório de trabalho é definido como /sdcard quando o cartão está presente, caso contrário /flash. O interpretador executa então os scripts desse diretório:
boot.pyé executado em cada reset suave (arranque a frio,Ctrl‑Dno REPL, ou sempre que o script em execução termina).main.pyé executado apenas no arranque a frio, imediatamente apósboot.py. Resets suaves subsequentes executam novamenteboot.pymas passam diretamente para o REPL — para executar novamentemain.pyé necessário reiniciar completamente a placa.
Colocar um boot.py ou main.py no cartão SD substitui a cópia na flash sem a alterar — ambos os ficheiros são procurados no diretório de arranque (/sdcard quando o cartão está montado, caso contrário /flash).
O main.py predefinido incluído numa placa recentemente flashada faz simplesmente piscar o canal azul do LED RGB de utilizador como batimento cardíaco (dois pulsos curtos, pausa curta), para que possa confirmar que o firmware arrancou corretamente sem qualquer dispositivo anfitrião ligado.
sys.path é estendido para incluir os três sistemas de ficheiros e os seus subdiretórios lib/, pelo que os módulos importáveis podem estar em /flash/lib, /sdcard/lib ou /rom/lib.
Para forçar o sistema a ignorar um cartão SD inserido (por exemplo, para executar o main.py da flash mesmo com um cartão presente), crie um ficheiro vazio com o nome SKIPSD na raiz de /flash.
Quando ligada por USB, o sistema de ficheiros de arranque (/sdcard se houver cartão, caso contrário /flash) também é enumerado como unidade de armazenamento em massa USB no anfitrião, permitindo editar boot.py, main.py e quaisquer outros ficheiros diretamente. Ejete a unidade antes de reiniciar a câmara para que o anfitrião escreva as suas alterações em cache.
Nota
Como o sistema operativo trata a unidade como um dispositivo de blocos passivo, os ficheiros criados ou modificados por código a correr na OpenMV Cam não aparecerão enquanto o anfitrião não remontar a unidade. Se tanto o sistema operativo como a OpenMV Cam escreverem no mesmo sistema de ficheiros ao mesmo tempo, o sistema operativo prevalece e sobrescreve as alterações feitas pela câmara. Use o cartão SD para quaisquer dados que o script escreva, e remonte antes de ler esses ficheiros a partir do anfitrião.
Nota
O canal vermelho do LED RGB de utilizador pode acender brevemente enquanto o anfitrião está a ler ou a escrever na unidade de armazenamento em massa USB — trata-se de um indicador de atividade controlado pelo firmware, não de uma falha.
Tamanhos de armazenamento¶
O RT1062 é fornecido com:
/flash— sistema de ficheiros FAT de 4 MB, leitura/escrita./rom— ROMFS só de leitura com mapeamento em memória de 8 MB, usado para disponibilizar scripts e modelos de ML que beneficiam de acesso mmap sem cópia./sdcard— tamanho total do cartão microSD inserido (quando presente), leitura/escrita.
Indicador de falha grave¶
Se o LED RGB de utilizador estiver a ciclar rapidamente por todas as cores — suficientemente rápido para parecer um LED branco cintilante em vez de matizes distintos — o firmware sofreu uma falha grave irrecuperável. Reflashe o firmware para recuperar; se isso não ajudar, a placa pode estar fisicamente danificada.
Bibliotecas de software¶
Consulte o índice de bibliotecas para a lista completa de módulos — incluindo quais são exclusivos da compilação do RT1062.