AE3 OLED Breakout¶
L’AE3 OLED Breakout abbina la OpenMV AE3 a un OLED RGB da 128 × 128, un joystick a 5 direzioni e un connettore ARM SWD a 10 pin per anteprima autonoma, input semplice e debug JTAG/SWD.
Per il datasheet completo, le foto e le informazioni d’ordine consulta la pagina prodotto AE3 OLED Breakout.
Punti salienti¶
OLED RGB da 128 × 128 pilotato da un controller SSD1351 tramite SPI.
Joystick a 5 direzioni AS90R con pulsante centrale, esposto sul bus I²C
P4/P5.Pulsante di reset e switch di recovery per l’accesso UART al secure-enclave.
Switch di disconnessione dell’OLED per rimuovere elettricamente il pannello dal bus SPI.
Due connettori Qwiic sullo stesso bus I²C
P4/P5.Connettore ARM Cortex Debug a 10 pin per il debug SWD/JTAG.
Quattro punti di test di aggancio a massa.
Nota
Quattro fori di montaggio M1.6 agli angoli permettono di fissare il breakout a un involucro o a un supporto.
Riferimento dei pin¶
Tutti i segnali AE3 sul breakout provengono dal connettore B2B sul fondo dell’AE3 e sono portati su due file di pin laterali — P0–P5 su un lato, P6–P9 sull’altro — entrambe riferite a 3.3 V. L’elenco completo delle funzioni alternative di ogni pin si trova nella pagina OpenMV AE3; il breakout usa i pin come segue:
Pin |
Riferimento |
Funzioni AE3 |
Uso sul breakout |
|---|---|---|---|
P0 |
3.3 V |
SPI0 MOSI / I2C2 SCL / UART4 TX / TIM0 T1 / PDM D3 |
OLED SPI MOSI |
P1 |
3.3 V |
SPI0 MISO / I2C2 SDA / UART4 RX / TIM0 T0 |
libero |
P2 |
3.3 V |
SPI0 SCLK / LPI2C SDA / UART5 TX / TIM1 T1 |
OLED SPI SCLK |
P3 |
3.3 V |
SPI0 SS / LPI2C SCL / UART5 RX / TIM1 T0 / PDM C3 |
OLED SPI CS |
P4 |
3.3 V |
I2C1 SCL / UART1 TX / TIM2 T1 / PDM C0 / CAN TX |
Joystick / Qwiic I²C SCL |
P5 |
3.3 V |
I2C1 SDA / UART1 RX / TIM2 T0 / PDM D0 / CAN RX |
Joystick / Qwiic I²C SDA |
RESET |
3.3 V |
NRST |
Premi il pulsante RESET sulla scheda o porta a GND per resettare l’AE3 |
P6 |
3.3 V |
I2C1 SDA / UART3 CTS / TIM9 T0 |
libero |
P7 |
3.3 V |
I2C1 SCL / UART3 RTS / TIM9 T1 |
OLED RESET |
P8 |
3.3 V |
I3C SDA / UART3 RX / TIM5 T0 / ADC ch S10 |
OLED DC (selezione registro) |
P9 |
3.3 V |
I3C SCL / UART3 TX / TIM5 T1 / ADC ch S11 |
Joystick IRQ (attivo basso al cambio di stato) |
linea 3.3V |
— |
— |
Alimenta l’OLED, l’expander del joystick e i dispositivi Qwiic |
linea GND |
— |
— |
Massa comune |
Nota
Lo switch di recovery commuta un mux USB interno all’AE3: i pin USB propri dell’AE3 vengono scollegati dalla porta USB-C e, al loro posto, alla porta viene collegato un convertitore USB-seriale sull’UART del secure-enclave. Con lo switch attivato, gli strumenti Alif lato host possono comunicare con il secure enclave per riprogrammare il bootloader dell’AE3. Lascia lo switch disattivato per il funzionamento normale, in modo che la porta USB-C funzioni come USB dell’AE3.
Nota
Lo switch di abilitazione dell’OLED deve essere attivo perché l’OLED funzioni — controlla l’alimentazione del pannello e collega i pin di controllo dell’OLED (P0, P2, P3, P7, P8) alle GPIO dell’AE3. Con lo switch disattivato restano collegati solo P4, P5 e P9. Lo stato attuale dello switch è visibile sull’expander del joystick come bit 0x40 — il pin grezzo dell’expander legge basso quando lo switch è abilitato.
Connettori Qwiic¶
Sul breakout sono presenti due connettori Qwiic JST-SH a 4 pin da 1.0 mm che condividono lo stesso bus I²C P4/P5 dell’expander del joystick a bordo, quindi eventuali altri dispositivi Qwiic devono evitare l’indirizzo dell’expander del joystick (0x63).
Pin |
Segnale |
|---|---|
1 |
GND |
2 |
+3.3 V |
3 |
SDA ( |
4 |
SCL ( |
Connettore JTAG¶
Il connettore ARM Cortex Debug a 10 pin da 1.27 mm sul breakout è collegato direttamente alle linee SWD/JTAG dell’AE3. Tutti i segnali sono riferiti a 1.8 V — usa una sonda con level-shifting o una la cui tensione target segua VCC_REF (pin 1).
Pin |
Segnale |
|---|---|
1 |
VCC_REF (+1.8 V) |
2 |
TMS (SWDIO) |
3 |
+1.8 V |
4 |
TCK (SWCLK) |
5 |
GND |
6 |
TDO (SWO) |
7 |
chiave (nessun pin) |
8 |
TDI |
9 |
GND |
10 |
DEBUG_RST_N (reset JTAG/debug — separato dal NRST di sistema) |
Utilizzo¶
Pilota l’OLED tramite display.SPIDisplay con un’istanza di controller SSD1351. Invia i frame della camera in streaming al pannello 128 × 128:
import csi
import time
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))
lcd = display.SPIDisplay(width=128, height=128,
controller=display.SSD1351())
clock = time.clock()
while True:
clock.tick()
lcd.write(csi0.snapshot(),
hint=image.CENTER | image.SCALE_ASPECT_KEEP)
print(clock.fps())
Leggi il joystick a 5 direzioni tramite il driver frozen pca9674a.PCA9674A. L’expander attiva P9 ai cambi di stato, quindi collega una callback IRQ che memorizzi il nuovo stato dei pulsanti. I pulsanti sono attivi-bassi sull’expander; il codice qui sotto applica lo XOR della lettura con 0xFF in modo che un bit impostato in state significhi premuto:
Bit |
Direzione |
|---|---|
|
Joystick a destra |
|
Joystick in alto |
|
Joystick a sinistra |
|
Joystick in basso |
|
Pressione centrale del joystick |
|
Switch di abilitazione dell’OLED (impostato in |
import csi
import time
import display
from pca9674a import PCA9674A
from machine import I2C
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))
lcd = display.SPIDisplay(width=128, height=128,
controller=display.SSD1351())
clock = time.clock()
state = 0
cursor_x = 0
cursor_y = 0
def read_expander(pin):
global exp, state
# Buttons are active‑low on the expander; XOR for active‑high bits.
state = exp.read() ^ 0xFF
exp = PCA9674A(I2C(1), irq_pin="P9", callback=read_expander)
def update_cursor():
global cursor_x, cursor_y
if state & 0x01: cursor_x += 2 # Right
if state & 0x02: cursor_y -= 2 # Up
if state & 0x04: cursor_x -= 2 # Left
if state & 0x08: cursor_y += 2 # Down
if state & 0x10: # Centre
cursor_x = 0
cursor_y = 0
while True:
clock.tick()
update_cursor()
lcd.write(csi0.snapshot(), x=cursor_x, y=cursor_y,
x_scale=128 / 400, y_scale=128 / 400)
print(clock.fps())