OpenMV Cam RT1062¶
OpenMV Cam RT1062 là bo mạch thị giác máy tiết kiệm điện được xây dựng xung quanh NXP i.MX RT1062 (Cortex‑M7 @ 600 MHz). Bo mạch kết hợp mạng USB‑C tốc độ cao, Wi‑Fi/Bluetooth và Ethernet 10/100 với cảm biến 5MP OV5640 trên một module có thể tháo rời. Camera chỉ tiêu thụ ~30 µA từ pin LiPo trong chế độ ngủ sâu, phù hợp với các dự án dùng pin.
Để xem datasheet đầy đủ, ảnh chụp và kích thước, hãy xem trang sản phẩm OpenMV Cam RT1062.
Điểm nổi bật¶
NXP i.MX RT1062 Cortex‑M7 ở 600 MHz.
32 MB SDRAM ngoài (16‑bit @ 160 MHz, 320 MB/s) cùng với 1 MB SRAM trong và 16 MB bộ nhớ flash QSPI (133 MHz 4‑bit SDR, đọc 66 MB/s); 4 KB EEPROM trên R6+.
Cảm biến cuộn OV5640 5MP.
IMU tích hợp (gia tốc kế 3 trục 12‑bit, ±2/4/8 g).
USB‑C tốc độ cao (480 Mb/s, giới hạn dòng 1,5 A), Ethernet 10/100 Mb/s (hỗ trợ PoE qua shield), Wi‑Fi a/b/g/n + Bluetooth 5.1 (ăng-ten chip hoặc tùy chọn U.FL).
Khe microSD — SD tối đa 2 GB, SDHC tối đa 32 GB, SDXC tối đa 2 TB.
Bộ sạc LiPo (500 mA trên R6+, 100 mA trên R4/R5), RTC với các pad pin dự phòng. Chế độ ngủ sâu tiêu thụ ~30 µA khi dùng pin.
14 chân I/O, tất cả đầu ra 3,3 V / chịu được 3,3 V, 4 mA mỗi chân (pin), có thể tạo ngắt.
LED RGB người dùng, nút SW người dùng, nút nguồn phần cứng (máy trạng thái ngủ sâu / thức dậy) và một LED trạng thái riêng cho sạc / USB / nguồn VIN.
Cảnh báo
Các chân (pin) I/O của RT1062 không chịu được điện áp 5 V. Không kết nối trực tiếp thiết bị với MCU 5 V như Arduino Mega. Chỉ cấp nguồn cho bo mạch qua VIN.
Sơ đồ chân¶
Bảng tham chiếu chân¶
Tên chân |
Chức năng |
|---|---|
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 / đồng bộ khung hình I/O |
P11 |
wakeup (tích cực mức thấp, kết nối với GND để đánh thức) |
P12 |
RESET — kéo xuống GND để reset bo mạch (không phải GPIO) |
P13 |
I/O số |
P14 |
I/O số |
ON/OFF |
pad trên header sao chép nút nguồn phần cứng (tích cực mức thấp) |
SW |
nút người dùng (tích cực mức thấp) |
ST |
mức thấp khi nguồn VIN, mức cao khi nguồn USB |
CHG |
tích cực mức thấp; mức thấp khi pin LiPo đang được sạc |
PG |
tích cực mức thấp; mức thấp khi có nguồn VIN hoặc USB |
LED_RED |
Kênh đỏ LED RGB (tích cực mức thấp) |
LED_GREEN |
Kênh xanh lá LED RGB (tích cực mức thấp) |
LED_BLUE |
Kênh xanh dương LED RGB (tích cực mức thấp) |
Ghi chú
Đường đồng bộ khung hình P10 là bus dùng chung. Nó được nối với MCU, chân kích hoạt / thời gian phơi sáng của cảm biến camera và header người dùng cùng một lúc. Chiều điều khiển do ứng dụng xác định — MCU, cảm biến hoặc tín hiệu bên ngoài có thể điều khiển tùy theo cách cấu hình cảm biến. Đảm bảo chỉ có một bộ điều khiển hoạt động tại một thời điểm.
Ghi chú
ON/OFF và P11 tham chiếu đến đường RAW luôn bật (không phải đường 3,3 V được chuyển mạch), do đó chúng vẫn hoạt động trong khi phần còn lại của bo mạch đang ở chế độ ngủ sâu / tiết kiệm điện. Cả hai đầu vào đều tích cực mức thấp.
Các chân này đi qua các bộ dịch mức điện áp để có thể hoạt động trên đường RAW. Nếu bạn thực sự cần hành vi GPIO trực tiếp 3,3 V trên ON/OFF hoặc P11 (ví dụ: để điều khiển chúng từ MCU 3,3 V mà không qua bộ dịch), bo mạch có các pad kéo lên và jumper 0 ohm cho phép bỏ qua bộ dịch. Đây là thay đổi phần cứng nâng cao — hầu hết người dùng không cần làm điều này.
Ghi chú
P13 và P14 là GPIO thông thường theo mặc định không có chức năng đặc biệt. Các pad có thể được tùy chọn định tuyến lại sang các tín hiệu khác bằng cách hàn lại các cầu nhảy điện trở 0 ohm ở mặt sau bo mạch:
P13 ↔ Trạng thái CHG / JTAG TRSTB
P14 ↔ Trạng thái ST / JTAG TDI
Hầu hết người dùng sẽ không chạm vào các jumper này — để ở mặc định GPIO trừ khi bạn cần đọc lại trạng thái quản lý nguồn hoặc JTAG.
Chân nguồn¶
3.3V — đường điện áp điều chỉnh 3,3 V. Chỉ xuất trên RT1062 — không đưa nguồn bên ngoài vào chân này. Có sẵn tối đa 1 A cho các shield.
VIN — đầu vào 5 V. Cấp nguồn cho bo mạch và bộ sạc LiPo tích hợp.
RAW — vào/ra, luôn bật (3,6 V – 5 V). Mang nguồn nào đang hoạt động (VIN, USB hoặc pin được nối), và cũng có thể dùng như đầu vào. Bạn phải nối RAW qua diode nối tiếp khi đưa nguồn vào — nếu không dòng điện sẽ chạy ngược lại vào VIN/USB và làm hỏng nguồn cung cấp hoặc mạch bảo vệ tích hợp.
GND — nối đất chung.
Ghi chú
Chip quản lý nguồn tích hợp tự động chọn USB hoặc VIN có điện áp cao hơn để cấp nguồn cho bo mạch và bộ sạc pin. Nếu có LiPo được nối, nó sẽ sạc trên phần điện áp dư thừa, và bộ điều khiển dự phòng sang pin để giữ cho bo mạch hoạt động nếu VIN/USB giảm hoặc bị ngắt.
Ghi chú
Mặt sau bo mạch có các pad hàn cho pin dự phòng RTC 3,3 V bên ngoài. Gắn pin đồng xu vào các pad này giữ RTC hoạt động khi phần còn lại của bo mạch không có điện.
Mẹo
Sử dụng công cụ ước tính thời lượng pin để mô hình hóa thời gian RT1062 chạy trên pin với chu kỳ hoạt động / ngủ sâu nhất định.
Chân Ethernet¶
RT1062 đưa các cặp MDI của Ethernet PHY 10/100 Mb/s ra các pad riêng bên cạnh header GPIO. Các chân MDI không thể kết nối thẳng vào RJ45 — cần có cuộn cảm Ethernet (biến áp cách ly, hoặc tích hợp trong magjack hoặc trên shield) bắt buộc giữa PHY và cáp. Shield PoE OpenMV đã bao gồm; nếu bạn tự làm jack, hãy dùng RJ45 tích hợp magnetics hoặc biến áp ngoài.
ETH_LED — LED kết nối/hoạt động. Tích cực mức thấp khi có kết nối; nhấp nháy khi có lưu lượng.
ETH_TXP / ETH_TXN — cặp truyền.
ETH_RXP / ETH_RXN — cặp nhận.
Ghi chú
Header cũng đưa ra bốn pad được ký hiệu Reserved. Chúng tương thích footprint với các cặp Ethernet gigabit trên OpenMV N6 (DC P/N và DD P/N) để cùng một shield Ethernet / PoE có thể cắm vào cả hai bo mạch. PHY của RT1062 chỉ hỗ trợ 10/100 Mb/s, nên bốn pad đó không có kết nối điện — để trống.
Chân khôi phục và gỡ lỗi¶
RESET — kéo xuống GND để reset bo mạch. Nhả ra thì MCU khởi động bình thường.
SBL — kéo lên 3,3 V trong khi cấp nguồn cho bo mạch để vào chế độ ROM bootloader (Serial Boot Loader). OpenMV IDE sử dụng chế độ này để cập nhật lại bootloader tích hợp.
Một header ARM 10‑pin SWD/JTAG riêng được trang bị, tương thích với các bộ chuyển đổi ST‑LINK và SEGGER J‑Link.
Ghi chú
RT1062 chỉ đưa ra gỡ lỗi SWD qua connector này theo mặc định. JTAG đầy đủ không có sẵn ngay từ đầu.
Ngoại vi tích hợp¶
LED¶
RT1062 có hai LED RGB:
LED RGB người dùng — điều khiển bằng phần mềm, được hiển thị là
LED_RED,LED_GREENvàLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
LED nguồn — được điều khiển trực tiếp bởi phần cứng quản lý nguồn tích hợp, không có điều khiển phần mềm. Dùng để xem trạng thái nguồn cung cấp nhanh chóng.
Khi đang chạy:
Kênh
Ý nghĩa
Xanh dương
VIN đang cấp nguồn cho bo mạch (tắt khi dùng USB)
Xanh lá
USB hoặc VIN đang có nguồn
Đỏ
đang sạc pin LiPo được nối
Trong chế độ ngủ sâu tất cả các kênh đều tắt ngoại trừ Đỏ, vẫn sáng khi LiPo đang được sạc.
Chân trạng thái nguồn¶
Ba đầu vào trạng thái tích cực mức thấp từ chip quản lý nguồn tích hợp:
PG — mức thấp khi có nguồn VIN hoặc USB. Luôn được kết nối.
ST — mức thấp khi bo mạch đang chạy bằng VIN, mức cao khi chạy bằng nguồn USB. Không được kết nối theo mặc định.
CHG — mức thấp khi pin LiPo được nối đang sạc. Không được kết nối theo mặc định.
from machine import Pin
power_ok = not Pin("PG", Pin.IN).value()
Cảm biến camera¶
OV5640 được điều khiển qua module csi --- cảm biến camera
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 có bộ nén JPEG tích hợp. Đặt csi.CSI.pixformat thành csi.JPEG và cảm biến gửi các khung hình nén thẳng đến camera qua bus camera, giúp chụp ảnh độ phân giải cao trở nên khả thi: csi.HD (1280×720), csi.FHD (1920×1080), và 5MP đầy đủ csi.WQXGA2 (2592×1944) đều stream dạng JPEG. Tinh chỉnh nén bằng csi.CSI.quality (0-100, cao hơn = khung hình lớn hơn, nhiều chi tiết hơn):
cam.pixformat(csi.JPEG)
cam.framesize(csi.WQXGA2)
cam.quality(90)
Cảm biến nằm trên module có thể tháo rời — hoán đổi cho bất kỳ module camera OpenMV nào khác (màn trập toàn cầu, nhiệt, độ phân giải cao hơn, v.v.) mà không thay đổi phần còn lại của bo mạch.
Học máy¶
ml --- Machine Learning chạy các mô hình (ML) TFLite đã lượng tử hóa trên Cortex‑M7 với các kernel CMSIS‑NN — đủ nhanh cho các bộ phát hiện nhỏ gọn ở vài khung hình mỗi giây. Các mô hình (ML) trên hệ thống tệp chỉ đọc /rom tải trực tiếp từ bộ nhớ flash mà không cần sao chép vào RAM. Đây là bộ phát hiện BlazeFace 128×128 phủ mặt được phát hiện và sáu điểm đặc trưng của nó lên mỗi khung hình:
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 không kết nối gia tốc kế tích hợp với module imu --- cảm biến IMU. Thay vào đó hãy giao tiếp trực tiếp qua bus I²C nội bộ — chip nằm ở địa chỉ 0x15 và đóng gói ba kênh gia tốc 12‑bit có dấu cộng một byte nhiệt độ 8‑bit bắt đầu từ thanh ghi 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¶
Bo mạch R6 trở lên bao gồm 4 KB I²C EEPROM chung trên cùng bus nội bộ với gia tốc kế. (Các phiên bản trước không có — gọi các đoạn code này trên R4/R5 sẽ hết thời gian chờ do không có I²C ack.) Sử dụng API machine.I2C readfrom_mem / writeto_mem tiêu chuẩn với địa chỉ bộ nhớ 16‑bit:
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))
Cả đọc và ghi phải ở trong phạm vi trang 32 byte. Chia bất kỳ lần truyền lớn hơn thành một lần gọi mỗi trang, và thêm độ trễ chu kỳ ghi ~5 ms giữa các lần ghi liên tiếp.
Wi‑Fi¶
Module CYW43 tích hợp được hiển thị qua network --- cấu hình mạng như một giao diện trạm. Sau khi kết nối, ipconfig("addr4") trả về cặp (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¶
Cùng module không dây cũng hỗ trợ Bluetooth 5.1. Sử dụng aioble --- Async BLE để BLE thân thiện với asyncio — ví dụ: quảng bá như một thiết bị ngoại vi và chờ thiết bị trung tâm kết nối:
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¶
Khi RJ45 (có magnetics) được kết nối với các pad MDI, 10/100 PHY xuất hiện như giao diện LAN. DHCP chạy tự động khi kết nối được thiết lập:
import network, time
lan = network.LAN()
lan.active(True)
while not lan.isconnected():
time.sleep(1)
print("Ethernet IP:", lan.ipconfig("addr4")[0])
Thẻ microSD¶
Khi thẻ được lắp, nó được gắn kết tự động tại /sdcard và có thể sử dụng qua hệ thống tệp thông thường:
import os
for entry in os.listdir("/sdcard"):
print(entry)
Tham chiếu bus¶
GPIO¶
Sử dụng machine.Pin để đọc hoặc điều khiển bất kỳ chân (pin) nào được ký hiệu. Đầu ra là CMOS 3,3 V và có thể nhận/cấp tối đa 4 mA mỗi chân (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())
Bất kỳ chân (pin) đầu vào nào cũng có thể kích hoạt ngắt trên các chuyển tiếp cạnh:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
Bus |
TX |
RX |
|---|---|---|
UART1 |
P4 |
P5 |
from machine import UART
uart = UART(1, baudrate=115200)
uart.write("hello")
uart.read(5)
I²C¶
Bus |
SCL |
SDA |
|---|---|---|
I2C1 |
P4 |
P5 |
from machine import I2C
i2c = I2C(1, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")
Phần cứng tương tự cũng có thể được sử dụng ở chế độ đích (slave) qua machine.I2CTarget để hiển thị vùng bộ nhớ cho bộ điều khiển I²C khác:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(1, addr=0x42, mem=buf)
SPI¶
Bus |
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¶
Bus |
TX |
RX |
|---|---|---|
CAN1 |
P1 |
P3 |
Ghi chú
CAN chưa được hỗ trợ trên bo mạch này trong 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¶
Chân ADC người dùng duy nhất là P6, toàn dả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¶
Chân |
Kênh 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ều khiển bất kỳ chân nào trong số chúng qua machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P9"), freq=1_000, duty_u16=32768)
Bus bit-bang bằng phần mềm¶
machine.SoftI2C và machine.SoftSPI hoạt động trên bất kỳ GPIO nào nếu bạn cần bus bổ sung.
Cảm biến nhiệt (ngoài bo mạch)¶
Firmware bao gồm driver fir --- trình điều khiển cảm biến nhiệt (fir == hồng ngoại xa) cho các thiết bị chụp ảnh nhiệt được kết nối bên ngoài:
MLX90621 — mảng IR 16 × 4
MLX90640 — mảng IR 32 × 24
MLX90641 — mảng IR 16 × 12
AMG8833 — mảng IR 8 × 8
Kết nối module với bus I²C của bo mạch và đọc các khung hình bằng 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())
Driver fir chỉ giao tiếp với cảm biến qua I²C 4 — kết nối module với P4 (SCL) và P5 (SDA).
Định thời¶
time¶
Module time bao gồm các độ trễ chặn, ticks đơn điệu và đo thời gian đã trôi qua:
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)
Bộ định thời ảo¶
machine.Timer lên lịch các hàm gọi lại theo chu kỳ hoặc một lần mà không chiếm dụng khe bộ định thời phần cứng. Truyền -1 làm id để sử dụng bộ định thời ảo (phần mềm):
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"))
Giá trị chu kỳ tính bằng mili giây. Gọi deinit() để dừng và giải phóng khe.
Đồng hồ thời gian thực¶
machine.RTC giữ thời gian đồng hồ treo tường qua các lần reset và (với pin dự phòng 3,3 V tùy chọn được nối với các pad phía sau, xem Chân nguồn) qua mất điện hoàn toàn:
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 cũng hoạt động qua chế độ ngủ sâu, vì vậy bạn có thể sử dụng nó như nguồn đánh thức cho machine.deepsleep().
Watchdog¶
machine.WDT reset bo mạch nếu ứng dụng bị treo. Một khi đã khởi động không thể dừng hoặc cấu hình lại — feed nó định kỳ trong vòng lặp chính của bạn:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
Thông tin khởi động và runtime¶
Cửa sổ bootloader USB¶
Mỗi lần khởi động, camera chạy một bootloader ngắn (vài giây) cho phép OpenMV IDE cập nhật firmware mà không cần người dùng vào chế độ DFU. Sau khi cửa sổ hết hạn, bootloader chuyển giao cho boot.py rồi đến main.py.
Một tập lệnh đang chạy có thể vào lại bootloader theo yêu cầu bằng cách gọi machine.bootloader()
import machine
machine.bootloader()
Hệ thống tệp và thứ tự khởi động¶
Firmware RT1062 gắn kết tối đa ba hệ thống tệp khi khởi động:
Bộ nhớ flash trong — luôn được gắn kết tại
/flash. Mặc định chứamain.pyvàREADME.txt; được tạo vào lần khởi động đầu tiên.Thẻ microSD — nếu thẻ được lắp, nó được gắn kết tại
/sdcard.ROMFS — hệ thống tệp chỉ đọc, ánh xạ bộ nhớ tại
/romdùng để cung cấp các tài sản dữ liệu lớn (ví dụ: mô hình AI) hưởng lợi từ truy cập zero‑copy. Được gắn kết tự động bởi MicroPython khi khởi động, trước khi chạy Python người dùng.
Sau khi gắn kết, thư mục làm việc được đặt thành /sdcard khi thẻ có mặt, nếu không thì /flash. Trình thông dịch sau đó chạy các tập lệnh từ thư mục đó:
boot.pyđược thực thi trên mỗi lần soft reset (khởi động lạnh,Ctrl‑Dtừ REPL, hoặc bất cứ khi nào tập lệnh đang chạy kết thúc).main.pyđược thực thi chỉ khi khởi động lạnh, ngay sauboot.py. Các lần soft reset tiếp theo chạy lạiboot.pynhưng đi thẳng đến REPL — để chạy lạimain.pybạn phải reset đầy đủ bo mạch.
Đặt boot.py hoặc main.py lên thẻ SD sẽ ghi đè bản sao trong flash mà không ảnh hưởng đến nó — cả hai tệp đều được tìm kiếm trong thư mục khởi động (/sdcard khi thẻ được gắn kết, ngược lại thì /flash).
main.py mặc định được cung cấp trên bo mạch mới flash chỉ nhấp nháy kênh xanh dương của LED RGB người dùng như nhịp tim (hai xung ngắn, khoảng trống ngắn), để bạn biết firmware đã khởi động sạch mà không có host nào được kết nối.
sys.path được mở rộng để bao gồm cả ba hệ thống tệp và các thư mục con lib/ của chúng, vì vậy các module có thể nhập được có thể nằm ở /flash/lib, /sdcard/lib hoặc /rom/lib.
Để buộc hệ thống bỏ qua thẻ SD được lắp (ví dụ: để chạy main.py của flash ngay cả khi có thẻ), hãy tạo một tệp trống tên SKIPSD ở thư mục gốc của /flash.
Khi kết nối qua USB, hệ thống tệp khởi động (/sdcard nếu có thẻ, nếu không thì /flash) cũng liệt kê như ổ đĩa lưu trữ khối USB trên host, cho phép bạn chỉnh sửa boot.py, main.py và bất kỳ tệp nào khác trực tiếp. Eject ổ đĩa trước khi reset camera để host flush các ghi đã lưu trong bộ đệm.
Ghi chú
Vì hệ điều hành xử lý ổ đĩa như thiết bị khối thụ động, các tệp được tạo hoặc sửa đổi bởi code chạy trên OpenMV Cam sẽ không xuất hiện cho đến khi host gắn lại ổ đĩa. Nếu cả hệ điều hành và OpenMV Cam ghi vào cùng hệ thống tệp cùng một lúc, hệ điều hành sẽ thắng và ghi đè các thay đổi của camera. Sử dụng thẻ SD cho bất kỳ dữ liệu nào mà tập lệnh ghi lại, và gắn lại trước khi đọc các tệp đó từ host.
Ghi chú
Kênh đỏ của LED RGB người dùng có thể sáng ngắn trong khi host đang đọc từ hoặc ghi vào ổ đĩa lưu trữ khối USB — đây là chỉ báo hoạt động do firmware điều khiển, không phải lỗi.
Kích thước lưu trữ¶
RT1062 được cung cấp với:
/flash— hệ thống tệp FAT 4 MB, đọc/ghi./rom— ROMFS ánh xạ bộ nhớ chỉ đọc 8 MB, dùng để cung cấp các tập lệnh và mô hình ML hưởng lợi từ truy cập mmap zero-copy./sdcard— kích thước đầy đủ của thẻ microSD được lắp (khi có), đọc/ghi.
Chỉ báo hard-fault¶
Nếu LED RGB người dùng đang chạy nhanh qua tất cả các màu sắc — đủ nhanh để trông giống LED trắng nhấp nháy hơn là các màu riêng biệt — firmware đã gặp hard fault không thể khôi phục. Nạp lại firmware để phục hồi; nếu nạp lại không giúp được, bo mạch có thể bị hỏng vật lý.
Thư viện phần mềm¶
Xem chỉ mục thư viện để biết danh sách đầy đủ các module — bao gồm những module dành riêng cho bản build RT1062.