Arduino Giga R1 WiFi

Arduino Giga R1 WiFi là bo mạch dạng Mega có kích thước 101 × 53 mm, được xây dựng xung quanh STMicroelectronics STM32H747XI — một SoC lõi kép kết hợp Cortex‑M7 ở 480 MHz với Cortex‑M4 ở 240 MHz. Firmware OpenMV chạy hoàn toàn trên lõi M7. Bo Giga bổ sung thêm đầu nối cáp mềm camera 22 chân Arducam, đầu nối MIPI‑DSI cho Arduino Giga Display Shield, và jack âm thanh stereo 3.5 mm vào bố cục header Arduino Mega tiêu chuẩn.

Arduino Giga R1 WiFi

Để xem datasheet đầy đủ, ảnh chụp và kích thước, hãy truy cập trang sản phẩm Arduino Giga R1 WiFi.

Điểm nổi bật

  • STMicroelectronics STM32H747XI hai lõi Cortex‑M7 (480 MHz) + Cortex‑M4 (240 MHz). Firmware OpenMV chỉ chạy trên lõi M7; lõi M4 được hiển thị qua openamp cho Giao tiếp Liên vi xử lý.

  • 8 MB SDRAM ngoài cùng với 2 MB flash nội16 MB flash QSPI ngoài.

  • Bộ mã hóa/giải mã JPEG phần cứng.

  • Đầu nối cáp mềm camera 22 chân tương thích Arducam (J6) — hỗ trợ driver cho các module cảm biến OV5640 (5MP), OV7670, GC2145, HM01B0, và HM0360.

  • Đầu nối màn hình MIPI‑DSI (J5) cho Arduino Giga Display Shield (màn hình cảm ứng điện dung 480×800) cùng với bộ máy hiển thị RGB LTDC cho các bo carrier nâng cao.

  • Jack âm thanh 3.5 mm với đầu ra line stereo và mic in.

  • Wi‑Fi b/g/n (2.4 GHz) + Bluetooth LE 5.1 thông qua module Murata 1DX (CYW4343W) — kết nối với anten đi kèm qua đầu nối U.FL trên bo mạch.

  • USB‑C (tốc độ đầy đủ) để cấp nguồn / kết nối serial / lập trình.

  • I/O người dùng trên các header kiểu Mega — D0D75 (số), A0A11 (tương tự), DAC0/DAC1 (đầu ra DAC), CAN_RX/CAN_TX (FDCAN2), và cặp I²C SDA1/SCL1 ở hàng trong. Một header SPI1 6 chân riêng ở mặt trước bo mạch đưa ra CIPO/COPI/SCK (D89/D90/D91).

  • JTAG / SWD được đưa ra trên header debug phía trên để debug nâng cao.

Sơ đồ chân

Arduino Giga R1 WiFi Pinout

Tham chiếu chân (pin)

Các header kiểu Arduino Mega hiển thị 76 chân số (D0D75), 12 chân tương tự (A0A11), hai đầu ra DAC (DAC0/DAC1), một cặp I²C phụ (SDA1/SCL1), và một cặp FDCAN2 (CAN_RX/CAN_TX). Một header SPI1 6 chân riêng ở mặt trước bo mạch đưa ra CIPO/COPI/SCK (D89/D90/D91).

Tên chân

Tham chiếu

Chức năng

D0

3.3 V

USART1 RX (Serial1) / TIM4 CH2

D1

3.3 V

USART1 TX (Serial1) / TIM1 CH2

D2

3.3 V

TIM2 CH4 / TIM5 CH4 / USART2 RX

D3

3.3 V

TIM2 CH3 / TIM5 CH3 / USART2 TX

D4

3.3 V

TIM8 CH1 / UART8 TX

D5

3.3 V

TIM3 CH2 / SPI1 MOSI / SPI6 MOSI

D6

3.3 V

TIM4 CH2

D7

3.3 V

TIM3 CH1 / SPI1 MISO / SPI3 MISO / SPI6 MISO

D8

3.3 V

TIM4 CH3 / I2C1 SCL / I2C4 SCL / UART4 RX

D9

3.3 V

TIM4 CH4 / I2C1 SDA / I2C4 SDA / UART4 TX

D10

3.3 V

TIM1 CH1 / TIM8 CH3N

D11

3.3 V

TIM8 CH2 / SPI5 MOSI

D12

3.3 V

TIM8 CH2N / SPI5 MISO

D13

3.3 V

TIM12 CH1 / SPI5 SCK

D14

3.3 V

USART6 TX (Serial2) / SPI6 MOSI

D15

3.3 V

USART6 RX (Serial2) / TIM3 CH2 / TIM8 CH2

D16

3.3 V

UART4 TX (Serial3) / TIM8 CH1N

D17

3.3 V

UART4 RX (Serial3)

D18

3.3 V

USART2 TX (Serial4)

D19

3.3 V

USART2 RX (Serial4) / SPI3 MOSI

D20

3.3 V

I2C2 SDA / TIM2 CH4 / USART3 RX

D21

3.3 V

I2C2 SCL

D22

3.3 V

GPIO

D23

3.3 V

GPIO / SPI6 SCK

D24

3.3 V

GPIO / SPI6 MISO

D25

3.3 V

GPIO

D26

3.3 V

GPIO

D27

3.3 V

GPIO

D28

3.3 V

GPIO

D29

3.3 V

GPIO

D30

3.3 V

GPIO

D31

3.3 V

GPIO

D32

3.3 V

GPIO

D33

3.3 V

GPIO

D34

3.3 V

GPIO

D35

3.3 V

GPIO

D36

3.3 V

GPIO

D37

3.3 V

TIM8 CH2

D38

3.3 V

TIM8 CH2N

D39

3.3 V

GPIO

D40

3.3 V

TIM15 CH2 / SPI4 MOSI

D41

3.3 V

GPIO

D42

3.3 V

GPIO

D43

3.3 V

GPIO

D44

3.3 V

GPIO

D45

3.3 V

GPIO

D46

3.3 V

TIM8 CH3N

D47

3.3 V

SPI3 MOSI

D48

3.3 V

TIM8 CH3 / SPI5 SCK

D49

3.3 V

GPIO

D50

3.3 V

GPIO

D51

3.3 V

TIM15 CH1 / SPI4 MISO

D52

3.3 V

GPIO

D53

3.3 V

GPIO

D54

3.3 V

TIM8 CH1 (camera DCMI VSYNC)

D55

3.3 V

I2C3 SDA (camera DCMI HSYNC)

D56

3.3 V

TIM3 CH1 / TIM13 CH1 (camera DCMI PXCLK)

D57

3.3 V

TIM8 CH1N / UART8 RX (camera master clock — TIM1 CH3)

D58

3.3 V

TIM8 CH3 (camera DCMI D7)

D59

3.3 V

TIM8 CH2 (camera DCMI D6)

D60

3.3 V

GPIO (camera DCMI D5)

D61

3.3 V

TIM8 CH2N / UART4 RX (camera DCMI D4)

D62

3.3 V

SPI1 SCK (camera DCMI D3)

D63

3.3 V

TIM5 CH2 / I2C4 SCL (display I²C)

D64

3.3 V

TIM5 CH1 (camera DCMI D1)

D65

3.3 V

TIM12 CH2 (camera DCMI D0)

D66

3.3 V

GPIO (camera reset — claimed when camera is active)

D67

3.3 V

GPIO (camera power‑down — claimed when camera is active)

D68

3.3 V

TIM3 CH1 / TIM8 CH1 / USART6 TX (Display Shield DSI RESET)

D69

3.3 V

TIM5 CH4 (Display Shield DSI TE)

D70

3.3 V

SPI2 SCK

D71

3.3 V

TIM8 CH4 / SPI2 MISO

D72

3.3 V

SPI2 MOSI

D73

3.3 V

ADC123 IN11 (Display Shield DFSDM mic data)

D74

3.3 V

GPIO (display backlight — claimed by the Giga Display Shield)

D75

3.3 V

SPI2 SCK (Display Shield DFSDM mic clock)

A0 / D76

3.3 V

ADC12 IN4

A1 / D77

3.3 V

ADC12 IN8

A2 / D78

3.3 V

ADC12 IN9 / TIM3 CH3 / TIM8 CH2N

A3 / D79

3.3 V

ADC12 IN5 / TIM3 CH4 / TIM8 CH3N

A4 / D80

3.3 V

ADC12 IN13 / SPI2 MOSI

A5 / D81

3.3 V

ADC123 IN12 / SPI2 MISO

A6 / D82

3.3 V

ADC123 IN10

A7 / D83

3.3 V

ADC1 IN16 / TIM2 CH1 / TIM5 CH1 (audio jack mic input)

A8

3.3 V

ADC3 IN0 (analog only)

A9

3.3 V

ADC3 IN1 (analog only)

A10

3.3 V

ADC12 IN1 (analog only)

A11

3.3 V

ADC12 IN0 (analog only)

DAC0 / A12 / D84

3.3 V

DAC1 OUT1 / ADC12 IN18 (audio jack line‑out L)

DAC1 / A13 / D85

3.3 V

DAC1 OUT2 / TIM2 CH1 / SPI1 SCK / ADC12 IN19 (audio jack line‑out R)

D89

3.3 V

SPI1 MISO (CIPO trên header SPI mặt trước)

D90

3.3 V

SPI1 MOSI (COPI trên header SPI mặt trước)

D91

3.3 V

SPI1 SCK (SCK trên header SPI mặt trước)

CAN_RX / D93

3.3 V

FDCAN2 RX / TIM3 CH2 / UART5 RX

CAN_TX / D94

3.3 V

FDCAN2 TX / SPI2 SCK / UART5 TX

SDA1 / D102

3.3 V

I2C4 SDA (bus điều khiển cảm biến / màn hình cảm ứng)

SCL1 / D101

3.3 V

I2C4 SCL (bus điều khiển cảm biến / màn hình cảm ứng)

RESET

3.3 V

nhấn nút RESET trên bo mạch hoặc kéo xuống GND để đặt lại

LED_RED

3.3 V

Kênh đỏ của LED RGB (mức thấp kích hoạt)

LED_GREEN

3.3 V

Kênh xanh lá của LED RGB (mức thấp kích hoạt)

LED_BLUE

3.3 V

Kênh xanh lam của LED RGB (mức thấp kích hoạt)

Ghi chú

A8A11 là các pad chỉ tương tự trên các chân _C của STM32H747 — chúng không có chức năng GPIO và chỉ có thể đọc qua ADC.

Chân nguồn

Chân trên header Mega:

  • VIN — đầu vào 6–32 V. Cấp nguồn cho bo mạch qua bộ điều chỉnh buck trên bo.

  • +5V — nguồn 5 V lấy từ USB qua diode hoặc bộ điều chỉnh buck trên bo.

  • +3V3 — nguồn 3.3 V chính.

  • IOREF — phản ánh điện áp I/O của bo mạch (3.3 V).

  • AREF — điện áp tham chiếu tương tự cho các chân ADC. Mặc định là 3.3 V; cung cấp từ bên ngoài để sử dụng tham chiếu khác.

  • OFF — kéo xuống GND để tắt nguồn +3.3 V và tắt hệ thống.

  • VRTC — đầu vào pin đồng xu 3.0 V (tối đa 3.3 V) giúp RTC trên chip tiếp tục hoạt động khi phần còn lại của bo đã tắt nguồn.

  • GND — đất chung.

Giga R1 có thể được cấp nguồn qua bất kỳ đường nào sau đây:

  • USB‑C — cung cấp 5 V cho bộ điều chỉnh buck trên bo.

  • Chân VIN — cấp nguồn điều chỉnh 6–32 V trực tiếp.

Mẹo

Sử dụng công cụ ước tính thời lượng pin để mô phỏng thời gian hoạt động của Giga R1 trên pin cho một chu kỳ hoạt động / ngủ sâu nhất định.

Chân khôi phục và debug

  • RESET — cả chân được đưa ra trên header nguồn lẫn công tắc tức thời ở mặt trên bo, được kết nối với đường NRST của SoC. Kéo xuống GND hoặc nhấn nút để đặt lại.

Giga R1 sử dụng double‑tap reset tiêu chuẩn của Arduino để vào bootloader của Arduino. Nhấn nút RESET nhanh hai lần — bo mạch sẽ liệt kê lại qua USB như một thiết bị DFU và OpenMV IDE có thể nạp firmware mới.

Nếu bootloader bị mất hoàn toàn, giữ nút BOOT0 trong khi nhấn RESET để buộc SoC vào chế độ bootloader ROM.

Các tín hiệu SWD của STM32 được đưa ra trên header Cortex Debug 10 chân bước 1.27 mm ở mặt trước bo mạch. Kết nối chúng qua SEGGER J‑Link, ST‑Link, hoặc bất kỳ đầu dò JTAG/SWD ARM tiêu chuẩn nào. Tất cả tín hiệu debug đều tham chiếu 3.3 V.

Ngoại vi trên bo

LED

Giga R1 có một LED RGB người dùng duy nhất, có thể điều khiển bằng phần mềm thông qua machine.LED

from machine import LED

LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()

Một LED nguồn riêng biệt trên bo sáng lên bất cứ khi nào nguồn +3.3 V hoạt động và không thể điều khiển bằng người dùng.

Đầu nối camera (J6)

J6 là đầu nối cáp mềm camera 22 chân tương thích Arducam. Cắm bất kỳ module cảm biến được hỗ trợ nào và firmware sẽ tự động dò tìm chúng thông 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()

Các cảm biến được hỗ trợ:

  • OV5640 — 5 MP màu, tối đa QSXGA (2592 × 1944).

  • OV7670 — 0.3 MP màu, tối đa VGA (640 × 480).

  • GC2145 — 2 MP màu, tối đa UXGA (1600 × 1200).

  • HM01B0 — 320 × 320 đơn sắc.

  • HM0360 — VGA (640 × 480) đơn sắc.

Cảnh báo

Trong khi camera đang được khởi tạo, các chân header Mega sau đây được firmware chiếm dụng và không thể sử dụng:

Chân

Lý do

D54D65

Tín hiệu dữ liệu + đồng bộ DCMI trên đầu nối cáp mềm camera

D57

TIM1 CH3 — xung nhịp chính của camera

D66

GPIO reset camera

D67

GPIO tắt nguồn camera

SDA1 / SCL1

I²C 4 — dùng chung với camera; bus có thể sử dụng nhưng tránh địa chỉ I²C của cảm biến

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 nhân 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ừ flash mà không cần sao chép vào RAM. Đây là bộ phát hiện BlazeFace 128×128 phủ khuôn mặt được phát hiện và sáu điểm đặc trưng của nó trê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()

    for r, score, keypoints in model.predict([img]):
        ml.utils.draw_predictions(img, [r], ("face",), ((0, 0, 255),), format=None)
        ml.utils.draw_keypoints(img, keypoints, color=(255, 0, 0))

    print(clock.fps(), "fps")

Lõi M4

Lõi Cortex‑M4 được hiển thị thông qua openamp cho giao tiếp liên vi xử lý. Firmware OpenMV chạy chỉ trên M7; lõi M4 không có runtime MicroPython riêng, vì vậy sử dụng nó có nghĩa là xây dựng firmware C riêng biệt và tải nó từ hệ thống tệp qua openamp.RemoteProc. Firmware ví dụ được dựng sẵn triển khai điểm cuối UART ảo có sẵn trong kho lưu trữ openamp_vuart — làm theo README để xây dựng vuart.elf

import openamp
import time

def ept_recv_callback(src_addr, data):
    print("Received:", data.decode())

ept = openamp.Endpoint("vuart-channel", callback=ept_recv_callback)

rproc = openamp.RemoteProc("vuart.elf")
rproc.start()

count = 0
while True:
    if ept.is_ready():
        ept.send("Hello World %d!" % count, timeout=1000)
        count += 1
    time.sleep_ms(1000)

Trên thực tế, hỗ trợ này nên được xem là minh chứng của giao diện openamp hơn là nền tảng lõi kép hoạt động được — lõi M4 không thể được đặt lại độc lập với M7, vì vậy dừng M4 buộc phải khởi động lại toàn bộ hệ thống.

Màn hình (J5)

J5 là đầu nối MIPI‑DSI cho Arduino Giga Display Shield — một màn hình cảm ứng điện dung 480 × 800 được xây dựng xung quanh driver panel ST7701 và bộ điều khiển cảm ứng GT911. Cả hai driver đều được đóng băng cùng với firmware. Sử dụng display --- trình điều khiển màn hình để đẩy bộ đệm khung hình và gt911.GT911 cho đầu vào cảm ứng.

Ví dụ dưới đây phản chiếu camera vào cửa sổ hiển thị 800 × 480 dạng dọc và phủ mỗi điểm chạm dưới dạng hình tròn có màu:

import csi
import time
import image
import display
from gt911 import GT911
from machine import I2C

IMG_OFFSET = 80
touch_detected = False
points_colors = ((255, 0, 0), (0, 255, 0), (0, 0, 255),
                 (0, 255, 255), (255, 255, 0))

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)

lcd = display.DSIDisplay(
    framesize=display.FWVGA,
    portrait=True,
    refresh=60,
    controller=display.ST7701(),
)

# Pass pin names (not Pin objects) so the driver can flip
# the reset pin's direction during start-up.
touch = GT911(
    I2C(4, freq=400_000),
    reset_pin="D71",
    irq_pin="D70",
    touch_points=5,
    refresh_rate=240,
    reverse_x=True,
    touch_callback=lambda pin: globals().update(touch_detected=True),
)

clock = time.clock()
while True:
    clock.tick()
    img = csi0.snapshot()

    if touch_detected:
        n, points = touch.read_points()
        for i in range(n):
            img.draw_circle(
                (points[i][0] - IMG_OFFSET,
                 points[i][1],
                 points[i][2] * 3),
                color=points_colors[points[i][3]],
                thickness=2,
            )
        touch_detected = False

    lcd.write(img, y=IMG_OFFSET, hint=image.TRANSPOSE | image.VFLIP)
    print(clock.fps())

Cảnh báo

Giga Display Shield sử dụng cùng bus I²C 4 (SDA1/SCL1) như camera, D74 cho bật đèn nền LCD, D70/D71 cho IRQ và reset cảm ứng GT911, và D68/D69 cho tín hiệu TE và RESET của panel DSI.

Microphone (Display Shield)

Arduino Giga Display Shield mang một microphone số được kết nối với ngoại vi DFSDM của STM32H747 (xung nhịp mic trên D75, dữ liệu mic trên D73). Microphone được thu âm thông qua audio --- Mô-đun Âm thanh. Mỗi bộ đệm đến dưới dạng bytearray PCM 16‑bit có dấu, sẵn sàng đưa vào ulab/numpy để xử lý tín hiệu số:

import audio
from ulab import numpy as np

def loudness(pcmbuf):
    samples = np.array(np.frombuffer(pcmbuf, dtype=np.int16), dtype=np.float)
    rms = np.sqrt(np.mean(samples ** 2))
    if rms > 10000:
        print("Loud!", int(rms))

audio.init(channels=1, frequency=16000, gain_db=24)
audio.start_streaming(loudness)

while True:
    pass

IMU (Display Shield)

Arduino Giga Display Shield mang một IMU 6 trục Bosch BMI270 (gia tốc kế 3D + con quay hồi chuyển 3D) trên cùng bus I²C 4 tại địa chỉ 0x68. Sử dụng driver cộng đồng micropython_bmi270 để đọc nó:

import time
from machine import I2C
from micropython_bmi270 import bmi270

sensor = bmi270.BMI270(I2C(4, freq=400_000))
sensor.load_config_file()

while True:
    ax, ay, az = sensor.acceleration   # m/s²
    gx, gy, gz = sensor.gyro
    print(ax, ay, az, gx, gy, gz)
    time.sleep_ms(100)

Bản đồ thanh ghi đầy đủ có trong datasheet BMI270.

LED RGB (Display Shield)

Arduino Giga Display Shield mang một LED RGB trên bo được điều khiển bởi driver LED 3 kênh ISSI IS31FL3197 trên cùng bus I²C 4. Chân AD của driver được nối xuống GND, nên nó ở địa chỉ I²C 0x50. Sử dụng driver cộng đồng IS31FL3197 để điều khiển LED:

from machine import I2C
from is31fl3197 import IS31FL3197

led = IS31FL3197(I2C(4, freq=400_000))
led.set_color(255, 0, 0)   # full red

Bản đồ thanh ghi đầy đủ có trong datasheet IS31FL3197.

Wi‑Fi

Murata 1DX (CYW4343W) trên bo được hiển thị qua network --- cấu hình mạng như một giao diện trạm. Kết nối anten đi kèm vào đầu nối U.FL trên bo trước khi bật radio:

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

Murata 1DX này cũng hiển thị Bluetooth LE 5.1. Sử dụng aioble --- Async BLE cho BLE thân thiện với asyncio — ví dụ, quảng bá như một ngoại vi và chờ một 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="Giga-R1")
        print("Connected:", conn.device)
        await conn.disconnected()

asyncio.run(run())

Tham chiếu bus

GPIO

Sử dụng machine.Pin để đọc hoặc điều khiển bất kỳ chân nào được in ký hiệu. Đầu ra là 3.3 V CMOS và có thể thu/cấp nguồn tới 20 mA mỗi chân (140 mA tổng cộng trên toàn bộ header).

from machine import Pin

out = Pin("D2", Pin.OUT)
out.on()
out.off()
out.value(1)

inp = Pin("D3", Pin.IN, Pin.PULL_UP)
print(inp.value())

Bất kỳ chân đầu vào nào cũng có thể kích hoạt ngắt khi có chuyển tiếp cạnh:

def handler(pin):
    print("triggered:", pin)

Pin("D3", Pin.IN, Pin.PULL_UP).irq(
    handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)

UART

Bus

TX

RX

Tên Arduino

UART1

D1

D0

Serial1

UART6

D14

D15

Serial2

UART4

D16

D17

Serial3

UART2

D18

D19

Serial4

from machine import UART

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

I²C

Bus

SCL

SDA

I2C2

D21

D20

I2C1

D8

D9

I2C4

SCL1

SDA1

from machine import I2C

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

Bus 2 (D20/D21, tức SCL/SDA được in ký hiệu) là bus Arduino Wire mặc định. Bus 4 (SCL1/SDA1) dùng chung với camera và bộ điều khiển cảm ứng GT911 của Giga Display Shield — các thiết bị người dùng trên bus này phải tránh các địa chỉ sau (7‑bit):

  • 0x3C — OV5640 / GC2145

  • 0x24 — HM01B0 / HM0360

  • 0x21 — OV7670

  • 0x5D — Bộ điều khiển cảm ứng GT911 (Giga Display Shield)

Phần cứng tương tự cũng có thể sử dụng ở chế độ target (slave) thông qua machine.I2CTarget để hiển thị một vùng bộ nhớ cho bộ điều khiển I²C khác:

from machine import I2CTarget

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

SPI

Bus

MOSI

MISO

SCK

SPI1

D90

D89

D91

SPI5

D11

D12

D13

SPI1 được đưa ra trên header 6 chân riêng ở mặt trước bo mạch. SPI5 được đưa ra trên các nhãn COPI/CIPO/SCK in ký hiệu ở D11/D12/D13.

Ghi chú

Sơ đồ chân của header SPI1 6 chân mặt trước (J7):

Chân

Tín hiệu

1

D89 (CIPO)

2

+5V

3

D91 (SCK)

4

D90 (COPI)

5

NRST

6

GND

from machine import SPI
from machine import Pin

spi = SPI(5, baudrate=10_000_000)
cs = Pin("D10", Pin.OUT, value=1)   # CS is not driven by the SPI peripheral

cs.value(0)
spi.write(b"hello")
cs.value(1)

CAN (FDCAN)

Bus

TX

RX

FDCAN2

D94

D93

from machine import CAN

can = CAN(2, 500_000)
can.set_filters(None)
can.send(0x123, b"\xDE\xAD\xBE\xEF")
print(can.recv())

ADC

Giga R1 hiển thị mười hai kênh ADC 12‑bit trên A0–A11, tất cả tham chiếu 3.3 Vread_u16 trả về 0–65535 trên khoảng 0–3.3 V tại chân. A8A11 là các pad _C chỉ tương tự không có ngoại vi GPIO:

from machine import ADC
import time

adc = ADC("A0")
while True:
    voltage = adc.read_u16() * 3.3 / 65535
    print(voltage)
    time.sleep_ms(100)

Ghi chú

A7 cũng được kết nối với đầu vào microphone trên jack âm thanh TRRS 3.5 mm — khi cắm tai nghe vào, ADC("A7") đọc tín hiệu mic tương tự trực tiếp.

DAC

Hai kênh DAC 12‑bit được hiển thị trên DAC0DAC1 thông qua pyb.DAC. Cả hai đều được kết nối với jack âm thanh TRRS 3.5 mm như các kênh line‑out trái và phải:

from pyb import DAC

left  = DAC("DAC0")
right = DAC("DAC1")

left.write(int(0.5 * 255))    # 8‑bit, ~1.65 V
right.write(int(0.5 * 255))

PWM

Chân

Bộ định thời / kênh

D0

TIM4 CH2 / TIM17 CH1N

D1

TIM1 CH2

D2

TIM2 CH4 / TIM5 CH4 / TIM15 CH2

D3

TIM2 CH3 / TIM5 CH3 / TIM15 CH1

D4

TIM1 CH3N / TIM8 CH1

D5

TIM1 CH1N / TIM3 CH2 / TIM8 CH1N / TIM14 CH1

D6

TIM4 CH2

D7

TIM3 CH1

D8

TIM4 CH3 / TIM16 CH1

D9

TIM4 CH4 / TIM17 CH1

D10

TIM1 CH1 / TIM8 CH3N

D11

TIM1 CH2N / TIM8 CH2

D12

TIM1 CH2 / TIM8 CH2N

D13

TIM12 CH1

D15

TIM3 CH2 / TIM8 CH2

D16

TIM8 CH1N

D20

TIM2 CH4

D37

TIM8 CH2

D38

TIM8 CH2N

D40

TIM15 CH2

D46

TIM8 CH3N

D48

TIM1 CH1N / TIM8 CH3

D51

TIM15 CH1

D54

TIM8 CH1

D56

TIM3 CH1 / TIM13 CH1

D57

TIM1 CH3 / TIM8 CH1N

D58

TIM8 CH3

D59

TIM8 CH2

D61

TIM8 CH2N

D63

TIM5 CH2

D64

TIM5 CH1

D65

TIM12 CH2

D68

TIM3 CH1 / TIM8 CH1

D69

TIM5 CH4

D71

TIM8 CH4

D78 / A2

TIM1 CH2N / TIM3 CH3 / TIM8 CH2N

D79 / A3

TIM1 CH3N / TIM3 CH4 / TIM8 CH3N

D83 / A7

TIM2 CH1 / TIM5 CH1

D85 / A13

TIM2 CH1 / TIM8 CH1N

Đ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("D2"), freq=1_000, duty_u16=32768)

Cảnh báo

TIM1 được dành riêng cho xung nhịp chính camera khi camera được khởi tạo thông qua csi --- cảm biến camera. Các chân mà chức năng PWM duy nhất là trên TIM1 — D1, D10, D11, D12 — không thể điều khiển PWM khi camera đang hoạt động. Tất cả các chân khác trong danh sách đều có kênh thay thế không phải TIM1.

Ghi chú

Một số chân dùng chung kênh bộ định thời:

  • TIM2 CH4 nằm trên D2 D20.

  • TIM2 CH1 nằm trên D83/A7 D85/A13.

  • TIM3 CH1 nằm trên D7, D56, D68.

  • TIM3 CH2 nằm trên D5 D15.

  • TIM4 CH2 nằm trên D0 D6.

  • TIM5 CH1 nằm trên D64 D83/A7.

  • TIM5 CH4 nằm trên D2 D69.

  • TIM8 CH1 nằm trên D4, D54, D68.

  • TIM8 CH1N nằm trên D5, D16, D57, D85/A13.

  • TIM8 CH2 nằm trên D11, D15, D37, D59.

  • TIM8 CH2N nằm trên D12, D38, D61, D78/A2.

  • TIM8 CH3 nằm trên D48 D58.

  • TIM8 CH3N nằm trên D10, D46, D79/A3.

  • TIM15 CH1 nằm trên D3 D51.

  • TIM15 CH2 nằm trên D2 D40.

Chọn một thiết bị sử dụng cho mỗi kênh bộ định thời.

Bus bit‑bang bằng phần mềm

machine.SoftI2Cmachine.SoftSPI hoạt động trên bất kỳ GPIO nào nếu bạn cần thêm bus.

Cảm biến nhiệt (ngoài bo)

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ị ả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 và đọ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 1 — kết nối module với D8 (SCL) và D9 (SDA).

Định thời

time

Module time bao gồm các hàm trì hoãn 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 định kỳ hoặc một lần mà không chiếm 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 thực qua các lần đặt lại — và qua cả lần tắt nguồn hoàn toàn khi có pin đồng xu kết nối với chân VRTC

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

Watchdog

machine.WDT đặt lại bo mạch nếu ứng dụng bị treo. Một khi đã khởi động, nó không thể dừng hay cấu hình lại — hãy nạp lại nó định kỳ bên trong vòng lặp chính:

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ập nhật firmware (DFU)

Giga R1 sử dụng double‑tap reset tiêu chuẩn của Arduino để vào bootloader của Arduino. Nhấn nút RESET nhanh hai lần — bo mạch sẽ liệt kê lại qua USB như một thiết bị DFU và OpenMV IDE có thể nạp firmware mới. Nếu bootloader bị mất hoàn toàn, giữ nút BOOT0 trong khi nhấn RESET để buộc SoC vào chế độ bootloader ROM.

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 Giga R1 gắn kết tối đa hai hệ thống tệp khi khởi động:

  • Flash nội — luôn được gắn kết tại /flash. Chứa main.pyREADME.txt theo mặc định; được tạo trong lần khởi động đầu tiên.

  • ROMFS — hệ thống tệp ánh xạ bộ nhớ chỉ đọc tại /rom, được MicroPython tự động gắn kết khi khởi động.

Sau khi gắn kết, thư mục làm việc được đặt thành /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 mỗi lần mềm đặt lại (khởi động lạnh, Ctrl‑D từ 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 sau boot.py. Các lần đặt lại mềm tiếp theo chạy lại boot.py nhưng chuyển thẳng đến REPL — để chạy lại main.py bạn phải đặt lại hoàn toàn bo mạch.

main.py mặc định được cài đặt trên bo mới nháy kênh xanh lam của LED RGB người dùng như nhịp tim (hai xung ngắn, khoảng nghỉ ngắn), giúp bạn biết firmware khởi động sạch mà không cần kết nối với máy chủ.

sys.path được mở rộng để bao gồm cả hai 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ể import được có thể nằm trong /flash/lib hoặc /rom/lib.

Khi kết nối qua USB, /flash cũng liệt kê như một ổ đĩa lưu trữ đại chúng USB trên máy chủ, 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 đặt lại bo mạch để máy chủ xả các ghi được lưu trong cache.

Ghi chú

Vì HĐH coi ổ đĩa như một thiết bị khối thụ động, các tệp được tạo hoặc sửa đổi bởi mã chạy trên camera sẽ không hiển thị cho đến khi máy chủ gắn lại ổ đĩa. Nếu cả HĐH và camera đều ghi vào cùng một hệ thống tệp đồng thời, HĐH sẽ thắng và ghi đè các thay đổi do camera thực hiện.

Ghi chú

Kênh đỏ của LED RGB người dùng có thể sáng lên thoáng qua khi máy chủ đang đọc từ hoặc ghi vào ổ đĩa lưu trữ đại chúng 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 bộ nhớ

Giga R1 được cài đặt sẵn:

  • /flash — hệ thống tệp FAT 11 MB, đọc/ghi.

  • /rom — ROMFS ánh xạ bộ nhớ chỉ đọc 4 MB, dùng để cài đặt các tập lệnh và mô hình (ML) được hưởng lợi từ truy cập mmap không sao chép.

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 — nhanh đến mức có xu hướng trông như LED trắng nhấp nháy hơn là các màu riêng biệt — firmware đã gặp lỗi cứng không thể khôi phục. Nạp lại firmware để phục hồi; nếu việc nạp lại không giúp ích, bo mạch có thể bị hỏng về mặt 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 dựng Giga R1.