Arduino Giga R1 WiFi

Arduino Giga R1 WiFi je ploča Mega oblika dimenzija 101 × 53 mm izgrađena oko STMicroelectronics STM32H747XI — dvojezgrenog SoC-a koji kombinira Cortex‑M7 na 480 MHz s Cortex‑M4 na 240 MHz. OpenMV firmware se izvodi u cijelosti na M7 jezgri. Giga uz standardni raspored Arduino Mega zaglavlja dodaje 22‑pinski Arducam fleksibilni priključak za kameru, MIPI‑DSI priključak za Arduino Giga Display Shield te 3,5 mm stereo audio priključak.

Arduino Giga R1 WiFi

Za potpunu tehničku dokumentaciju, fotografije i dimenzije pogledajte stranicu proizvoda Arduino Giga R1 WiFi.

Istaknute značajke

  • STMicroelectronics STM32H747XI dvostruki Cortex‑M7 (480 MHz) + Cortex‑M4 (240 MHz). OpenMV firmware se izvodi samo na M7 jezgri; M4 jezgra je izložena kroz openamp za međuprocesorsku komunikaciju.

  • 8 MB vanjskog SDRAM-a uz 2 MB interne flash memorije i 16 MB vanjske QSPI flash memorije.

  • Hardverski JPEG koder/dekoder.

  • 22‑pinski Arducam‑kompatibilni fleksibilni priključak za kameru (J6) — podrška upravljačkog programa za senzorske module OV5640 (5 MP), OV7670, GC2145, HM01B0 i HM0360.

  • MIPI‑DSI priključak za zaslon (J5) za Arduino Giga Display Shield (480×800 kapacitivni dodirni panel) uz LTDC RGB zaslonski mehanizam za napredne nosače.

  • 3,5 mm audio priključak sa stereo line‑out izlazom i mikrofonskim ulazom.

  • Wi‑Fi b/g/n (2,4 GHz) + Bluetooth LE 5.1 putem modula Murata 1DX (CYW4343W) — povezuje se na priloženu antenu preko ugrađenog U.FL priključka.

  • USB‑C (full‑speed) za napajanje / serijsku vezu / programiranje.

  • Korisnički I/O na Mega zaglavljima — D0D75 (digitalni), A0A11 (analogni), DAC0/DAC1 (DAC izlazi), CAN_RX/CAN_TX (FDCAN2) te SDA1/SCL1 I²C par u unutarnjem redu. Zasebno 6‑pinsko SPI1 zaglavlje na prednjoj strani ploče izvodi CIPO/COPI/SCK (D89/D90/D91).

  • JTAG / SWD izveden na gornjem debug zaglavlju za napredno otklanjanje pogrešaka.

Raspored pinova

Raspored pinova Arduino Giga R1 WiFi

Referenca pinova

Arduino Mega zaglavlja izlažu 76 digitalnih pinova (D0D75), 12 analognih pinova (A0A11), dva DAC izlaza (DAC0/DAC1), sekundarni I²C par (SDA1/SCL1) te FDCAN2 par (CAN_RX/CAN_TX). Zasebno 6‑pinsko SPI1 zaglavlje na prednjoj strani ploče izvodi CIPO/COPI/SCK (D89/D90/D91).

Naziv pina

Referenca

Funkcija

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 (DCMI VSYNC kamere)

D55

3,3 V

I2C3 SDA (DCMI HSYNC kamere)

D56

3,3 V

TIM3 CH1 / TIM13 CH1 (DCMI PXCLK kamere)

D57

3,3 V

TIM8 CH1N / UART8 RX (glavni takt kamere — TIM1 CH3)

D58

3,3 V

TIM8 CH3 (DCMI D7 kamere)

D59

3,3 V

TIM8 CH2 (DCMI D6 kamere)

D60

3,3 V

GPIO (DCMI D5 kamere)

D61

3,3 V

TIM8 CH2N / UART4 RX (DCMI D4 kamere)

D62

3,3 V

SPI1 SCK (DCMI D3 kamere)

D63

3,3 V

TIM5 CH2 / I2C4 SCL (I²C zaslona)

D64

3,3 V

TIM5 CH1 (DCMI D1 kamere)

D65

3,3 V

TIM12 CH2 (DCMI D0 kamere)

D66

3,3 V

GPIO (resetiranje kamere — zauzeto kada je kamera aktivna)

D67

3,3 V

GPIO (isključivanje kamere — zauzeto kada je kamera aktivna)

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

D74

3,3 V

GPIO (pozadinsko osvjetljenje zaslona — zauzeto od strane Giga Display Shield)

D75

3,3 V

SPI2 SCK (Display Shield DFSDM takt mikrofona)

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 (mikrofonski ulaz audio priključka)

A8

3,3 V

ADC3 IN0 (samo analogno)

A9

3,3 V

ADC3 IN1 (samo analogno)

A10

3,3 V

ADC12 IN1 (samo analogno)

A11

3,3 V

ADC12 IN0 (samo analogno)

DAC0 / A12 / D84

3,3 V

DAC1 OUT1 / ADC12 IN18 (line‑out L audio priključka)

DAC1 / A13 / D85

3,3 V

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

D89

3,3 V

SPI1 MISO (CIPO na prednjem SPI zaglavlju)

D90

3,3 V

SPI1 MOSI (COPI na prednjem SPI zaglavlju)

D91

3,3 V

SPI1 SCK (SCK na prednjem SPI zaglavlju)

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 (sabirnica dodira zaslona / upravljanja kamerom)

SCL1 / D101

3,3 V

I2C4 SCL (sabirnica dodira zaslona / upravljanja kamerom)

RESET

3,3 V

pritisnite ugrađeni RESET gumb ili povucite na GND za resetiranje

LED_RED

3,3 V

crveni kanal RGB LED-a (aktivan na niskoj razini)

LED_GREEN

3,3 V

zeleni kanal RGB LED-a (aktivan na niskoj razini)

LED_BLUE

3,3 V

plavi kanal RGB LED-a (aktivan na niskoj razini)

Napomena

A8A11 su isključivo analogni padovi na _C pinovima STM32H747 — nemaju GPIO funkciju i mogu se očitati samo putem ADC-a.

Pinovi napajanja

Pinovi Mega zaglavlja:

  • VIN — ulaz 6–32 V. Napaja ploču kroz ugrađeni buck regulator.

  • +5V — 5 V napojna linija dovedena iz USB-a preko diode ili ugrađenog buck regulatora.

  • +3V3 — glavna 3,3 V napojna linija.

  • IOREF — odražava I/O napon ploče (3,3 V).

  • AREF — referentni analogni napon za ADC pinove. Zadano je 3,3 V; dovedite vanjski napon za korištenje druge reference.

  • OFF — povucite na GND za isključivanje +3,3 V napojne linije i gašenje sustava.

  • VRTC — ulaz za 3,0 V dugmastu bateriju (najviše 3,3 V) koja održava rad ugrađenog RTC-a dok je ostatak ploče isključen.

  • GND — zajednička masa.

Giga R1 se može napajati putem bilo kojeg od ovih načina:

  • USB‑C — dovodi 5 V na ugrađeni buck regulator.

  • VIN pin — dovedite regulirani izvor od 6–32 V izravno.

Savjet

Koristite procjenitelj trajanja baterije za modeliranje koliko dugo će Giga R1 raditi na bateriji za zadani omjer aktivnog rada i dubokog mirovanja.

Pinovi za oporavak i otklanjanje pogrešaka

  • RESET — izloženi pin na zaglavlju napajanja i trenutačni prekidač na vrhu ploče, spojeni na NRST liniju SoC-a. Povucite na GND ili pritisnite gumb za resetiranje.

Giga R1 koristi Arduinov standardni dvostruki pritisak resetiranja za ulazak u Arduinov bootloader. Brzo pritisnite RESET gumb dvaput — ploča se ponovno prijavljuje preko USB-a kao DFU uređaj i OpenMV IDE može flashati novu sliku firmwarea.

Ako bootloader potpuno nedostaje, držite BOOT0 gumb dok pritišćete RESET kako biste prisilili SoC u ROM bootloader način rada.

STM32 SWD signali izloženi su na 10‑pinskom 1,27 mm Cortex Debug zaglavlju na prednjoj strani ploče. Spojite ih putem SEGGER J‑Link, ST‑Link ili bilo koje standardne ARM JTAG/SWD sonde. Svi debug signali su referencirani na 3,3 V.

Ugrađene periferije

LED-ovi

Giga R1 ima jedan korisnički RGB LED, programski upravljiv putem machine.LED

from machine import LED

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

Zasebni power LED na ploči svijetli kad god je +3,3 V napojna linija aktivna i nije korisnički upravljiv.

Priključak za kameru (J6)

J6 je 22‑pinski Arducam‑kompatibilni fleksibilni priključak za kameru. Priključite bilo koji od podržanih senzorskih modula i firmware ih automatski detektira putem modula csi — senzori kamere

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

Podržani senzori:

  • OV5640 — 5 MP u boji, do QSXGA (2592 × 1944).

  • OV7670 — 0,3 MP u boji, do VGA (640 × 480).

  • GC2145 — 2 MP u boji, do UXGA (1600 × 1200).

  • HM01B0 — 320 × 320 monokromatski.

  • HM0360 — VGA (640 × 480) monokromatski.

Upozorenje

Dok je kamera inicijalizirana, firmware zauzima sljedeće pinove Mega zaglavlja koji se ne mogu koristiti:

Pin

Razlog

D54D65

DCMI podatkovni + sinkronizacijski signali na fleksibilnom priključku kamere

D57

TIM1 CH3 — glavni takt kamere

D66

GPIO za resetiranje kamere

D67

GPIO za isključivanje kamere

SDA1 / SCL1

I²C 4 — dijeljen s kamerom; sabirnica je iskoristiva, ali izbjegavajte I²C adresu senzora

Strojno učenje

ml — Strojno učenje izvodi kvantizirane TFLite modele na Cortex‑M7 s CMSIS‑NN jezgrama — dovoljno brzo za kompaktne detektore pri nekoliko sličica u sekundi. Modeli na datotečnom sustavu samo za čitanje /rom učitavaju se izravno iz flash memorije bez kopiranja u RAM. Evo 128×128 BlazeFace detektora koji preklapa detektirano lice i njegovih šest orijentira na svakoj sličici:

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

M4 jezgra

Cortex‑M4 jezgra izložena je kroz openamp za međuprocesorsku komunikaciju. OpenMV firmware se izvodi samo na M7; M4 nema vlastiti MicroPython runtime, pa njegovo korištenje znači izgradnju zasebne C slike firmwarea i njezino učitavanje iz datotečnog sustava putem openamp.RemoteProc. Unaprijed izgrađeni primjer firmwarea koji implementira virtualnu UART krajnju točku dostupan je u repozitoriju openamp_vuart — slijedite njegov README za izgradnju 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)

U praksi je ovu podršku najbolje shvatiti kao demonstraciju openamp sučelja, a ne kao funkcionalnu dvojezgrenu platformu — M4 se ne može resetirati neovisno o M7, pa zaustavljanje M4 prisiljava potpuno ponovno pokretanje sustava.

Zaslon (J5)

J5 je MIPI‑DSI priključak za Arduino Giga Display Shield — 480 × 800 kapacitivni dodirni panel izgrađen oko upravljačkog programa panela ST7701 i kontrolera dodira GT911. Oba upravljačka programa isporučuju se zamrznuta s firmwareom. Koristite display — upravljački program zaslona za slanje međuspremnika slike i gt911.GT911 za unos dodirom.

Primjer u nastavku zrcali kameru u portretni 800 × 480 prozor zaslona i preklapa svaki dodirni kontakt kao obojeni krug:

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

Upozorenje

Giga Display Shield koristi istu I²C 4 sabirnicu (SDA1/SCL1) kao i kamera, D74 za omogućavanje pozadinskog osvjetljenja LCD-a, D70/D71 za GT911 IRQ dodira i resetiranje te D68/D69 za TE i RESET signale DSI panela.

Mikrofon (Display Shield)

Arduino Giga Display Shield nosi digitalni mikrofon spojen na DFSDM periferiju STM32H747 (takt mikrofona na D75, podaci mikrofona na D73). Mikrofon se snima putem audio — Audio modul. Svaki međuspremnik stiže kao predznačeni 16‑bitni PCM bytearray, spreman za dovod u ulab/numpy za DSP:

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 nosi Bosch BMI270 6‑osni IMU (3D akcelerometar + 3D žiroskop) na istoj I²C 4 sabirnici na adresi 0x68. Koristite zajednički upravljački program micropython_bmi270 za njegovo očitavanje:

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)

Potpuna mapa registara nalazi se u tehničkoj dokumentaciji BMI270.

RGB LED (Display Shield)

Arduino Giga Display Shield nosi ugrađeni RGB LED kojim upravlja ISSI IS31FL3197 3‑kanalni LED upravljački program na istoj I²C 4 sabirnici. AD pin upravljačkog programa spojen je na GND, pa se nalazi na I²C adresi 0x50. Koristite zajednički upravljački program IS31FL3197 za upravljanje LED-om:

from machine import I2C
from is31fl3197 import IS31FL3197

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

Potpuna mapa registara nalazi se u tehničkoj dokumentaciji IS31FL3197.

Wi‑Fi

Ugrađeni Murata 1DX (CYW4343W) izložen je putem network — konfiguracija mreže kao stanično (station) sučelje. Spojite priloženu antenu na ugrađeni U.FL priključak prije pokretanja radija:

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

Isti Murata 1DX također izlaže Bluetooth LE 5.1. Koristite aioble — Asinkroni BLE za BLE prilagođen asyncio sučelju — primjerice, oglašavajte se kao periferija i čekajte da se central poveže:

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

Referenca sabirnica

GPIO

Koristite machine.Pin za očitavanje ili upravljanje bilo kojim od pinova označenih na ploči. Izlazi su 3,3 V CMOS i mogu primati/dovoditi do 20 mA po pinu (ukupno 140 mA na cijelom zaglavlju).

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

Bilo koji ulazni pin također može pokrenuti prekid na rubnim prijelazima:

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

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

UART

Sabirnica

TX

RX

Arduino naziv

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

Sabirnica

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

Sabirnica 2 (D20/D21, označeni SCL/SDA) je zadana Arduino Wire sabirnica. Sabirnica 4 (SCL1/SDA1) dijeljena je s kamerom i GT911 kontrolerom dodira Giga Display Shielda — korisnički uređaji na ovoj sabirnici moraju izbjegavati sljedeće adrese (7‑bitne):

  • 0x3C — OV5640 / GC2145

  • 0x24 — HM01B0 / HM0360

  • 0x21 — OV7670

  • 0x5D — GT911 kontroler dodira (Giga Display Shield)

Isti hardver također se može koristiti u ciljnom (slave) načinu rada putem machine.I2CTarget za izlaganje memorijskog područja drugom I²C kontroleru:

from machine import I2CTarget

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

SPI

Sabirnica

MOSI

MISO

SCK

SPI1

D90

D89

D91

SPI5

D11

D12

D13

SPI1 je izložen na namjenskom 6‑pinskom zaglavlju na prednjoj strani ploče. SPI5 je izložen na oznakama COPI/CIPO/SCK označenima na ploči na D11/D12/D13.

Napomena

Raspored pinova prednjeg 6‑pinskog SPI1 zaglavlja (J7):

Pin

Signal

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)

Sabirnica

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 izlaže dvanaest 12‑bitnih ADC kanala na A0–A11, sve referencirane na 3,3 Vread_u16 vraća 0–65535 u rasponu 0–3,3 V na pinu. A8A11 su isključivo analogni _C padovi bez GPIO periferije:

from machine import ADC
import time

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

Napomena

A7 je također spojen na mikrofonski ulaz na 3,5 mm TRRS audio priključku — kada je slušalica priključena, ADC("A7") izravno očitava analogni mikrofonski signal.

DAC

Dva 12‑bitna DAC kanala izložena su na DAC0 i DAC1 putem pyb.DAC. Oba su spojena na 3,5 mm TRRS audio priključak kao lijevi i desni line‑out kanal:

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

Pin

Mjerač vremena / kanal

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

Upravljajte bilo kojim od njih putem machine.PWM

from machine import Pin, PWM

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

Upozorenje

TIM1 je rezerviran za glavni takt kamere kada se kamera inicijalizira putem csi — senzori kamere. Pinovi čija je jedina PWM funkcija na TIM1 — D1, D10, D11, D12 — ne mogu se upravljati PWM-om dok je kamera aktivna. Svi ostali navedeni pinovi imaju alternative koje nisu TIM1.

Napomena

Nekoliko pinova dijeli kanale mjerača vremena:

  • TIM2 CH4 je na D2 i D20.

  • TIM2 CH1 je na D83/A7 i D85/A13.

  • TIM3 CH1 je na D7, D56 i D68.

  • TIM3 CH2 je na D5 i D15.

  • TIM4 CH2 je na D0 i D6.

  • TIM5 CH1 je na D64 i D83/A7.

  • TIM5 CH4 je na D2 i D69.

  • TIM8 CH1 je na D4, D54 i D68.

  • TIM8 CH1N je na D5, D16, D57 i D85/A13.

  • TIM8 CH2 je na D11, D15, D37 i D59.

  • TIM8 CH2N je na D12, D38, D61 i D78/A2.

  • TIM8 CH3 je na D48 i D58.

  • TIM8 CH3N je na D10, D46 i D79/A3.

  • TIM15 CH1 je na D3 i D51.

  • TIM15 CH2 je na D2 i D40.

Odaberite jednog korisnika po kanalu mjerača vremena.

Softverski bit‑banged sabirnice

machine.SoftI2C i machine.SoftSPI rade na bilo kojem GPIO-u ako vam je potrebna dodatna sabirnica.

Toplinski senzor (izvan ploče)

Firmware uključuje upravljački program fir — upravljački program termalnog senzora (fir == daleko infracrveno) za vanjski spojene toplinske kamere:

  • MLX90621 — 16 × 4 IR niz

  • MLX90640 — 32 × 24 IR niz

  • MLX90641 — 16 × 12 IR niz

  • AMG8833 — 8 × 8 IR niz

Spojite modul na I²C sabirnicu ploče i očitavajte sličice s 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())

Upravljački program fir komunicira sa senzorom samo putem I²C 1 — spojite modul na D8 (SCL) i D9 (SDA).

Vremensko usklađivanje

time

Modul time pokriva blokirajuća kašnjenja, monotone otkucaje i mjerenje proteklog vremena:

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)

Virtualni mjerači vremena

machine.Timer raspoređuje periodične ili jednokratne povratne pozive bez zauzimanja hardverskog utora mjerača vremena. Proslijedite -1 kao id za korištenje virtualnog (softverskog) mjerača vremena:

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

Vrijednosti perioda izražene su u milisekundama. Pozovite deinit() za zaustavljanje i oslobađanje utora.

Sat stvarnog vremena

machine.RTC održava stvarno vrijeme kroz resetiranja — i kroz potpuno isključenje napajanja kada je dugmasta baterija spojena na VRTC pin:

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 resetira ploču ako se aplikacija zamrzne. Jednom pokrenut ne može se zaustaviti niti rekonfigurirati — povremeno ga hranite unutar svoje glavne petlje:

from machine import WDT

wdt = WDT(timeout=5_000)   # 5 second window
while True:
    # ...do work...
    wdt.feed()

Informacije o pokretanju i izvođenju

Ažuriranje firmwarea (DFU)

Giga R1 koristi Arduinov standardni dvostruki pritisak resetiranja za ulazak u Arduinov bootloader. Brzo pritisnite RESET gumb dvaput — ploča se ponovno prijavljuje preko USB-a kao DFU uređaj i OpenMV IDE može flashati novu sliku firmwarea. Ako bootloader potpuno nedostaje, držite BOOT0 gumb dok pritišćete RESET kako biste prisilili SoC u ROM bootloader način rada.

Skripta koja se izvodi može na zahtjev ponovno ući u bootloader pozivom machine.bootloader()

import machine

machine.bootloader()

Datotečni sustav i redoslijed pokretanja

Firmware Giga R1 prilikom pokretanja montira do dva datotečna sustava:

  • Interna flash memorija — uvijek montirana na /flash. Po zadanom sadrži main.py i README.txt; stvara se prilikom prvog pokretanja.

  • ROMFS — datotečni sustav samo za čitanje, memorijski mapiran na /rom, koji MicroPython montira automatski prilikom pokretanja.

Nakon montiranja, radni direktorij postavlja se na /flash. Interpreter zatim izvodi skripte iz tog direktorija:

  • boot.py se izvodi pri svakom mekom resetiranju (hladno pokretanje, Ctrl‑D iz REPL-a ili kad god se skripta koja se izvodi vrati).

  • main.py se izvodi samo pri hladnom pokretanju, neposredno nakon boot.py. Naknadna meka resetiranja ponovno izvode boot.py ali prelaze izravno na REPL — za ponovno izvođenje main.py morate potpuno resetirati ploču.

Zadani main.py isporučen na svježe flashanoj ploči samo treperi plavim kanalom korisničkog RGB LED-a kao otkucaj srca (dva kratka impulsa, kratka pauza), tako da možete znati da se firmware uredno pokrenuo bez priključenog domaćina.

sys.path je proširen kako bi uključivao oba datotečna sustava i njihove lib/ poddirektorije, tako da uvozivi moduli mogu boraviti u /flash/lib ili /rom/lib.

Kada je spojena preko USB-a, /flash se na domaćinu prijavljuje i kao USB disk za masovnu pohranu, omogućujući vam izravno uređivanje boot.py, main.py i drugih datoteka. Izbacite disk prije resetiranja ploče kako bi domaćin ispraznio svoje predmemorirane zapise.

Napomena

Budući da OS tretira disk kao pasivni blok uređaj, datoteke koje stvori ili izmijeni kod koji se izvodi na kameri neće se prikazati dok domaćin ponovno ne montira disk. Ako i OS i kamera istovremeno pišu na isti datotečni sustav, OS će prevladati i prepisati izmjene koje je napravila kamera.

Napomena

Crveni kanal korisničkog RGB LED-a može nakratko zasvijetliti dok domaćin čita s USB diska za masovnu pohranu ili na njega piše — ovo je indikator aktivnosti kojim upravlja firmware, a ne kvar.

Veličine pohrane

Giga R1 se isporučuje s:

  • /flash11 MB FAT datotečni sustav, za čitanje/pisanje.

  • /rom4 MB memorijski mapirani ROMFS samo za čitanje, korišten za isporuku skripti i ML modela koji imaju korist od mmap pristupa bez kopiranja.

Indikator ozbiljnog kvara (hard fault)

Ako korisnički RGB LED brzo izmjenjuje sve boje — dovoljno brzo da obično izgleda kao treperavi bijeli LED umjesto zasebnih nijansi — firmware je naišao na neoporavljiv ozbiljan kvar (hard fault). Ponovno flashajte firmware za oporavak; ako ponovno flashanje ne pomogne, ploča je možda fizički oštećena.

Softverske biblioteke

Pogledajte indeks biblioteka za potpuni popis modula — uključujući one koji su jedinstveni za Giga R1 build.