AE3 OLED 扩展板

AE3 OLED 扩展板将 OpenMV AE3 与一块 128 × 128 RGB OLED、一个 5 向摇杆以及一个 10 针 ARM SWD 排针组合在一起,可实现独立预览、简单输入以及 JTAG/SWD 调试。

AE3 OLED 扩展板

完整的数据手册、照片和订购信息请参见 AE3 OLED 扩展板产品页

亮点

  • 128 × 128 RGB OLED,通过 SPI 由 SSD1351 控制器驱动。

  • AS90R 5 向摇杆,带中央按下按钮,引出到 P4/P5 I²C 总线上。

  • 用于安全飞地 UART 访问的 复位按钮恢复开关

  • OLED 断开开关,可将面板从 SPI 总线上电气断开。

  • 位于同一 P4/P5 I²C 总线上的两个 Qwiic 连接器。

  • 用于 SWD/JTAG 调试的 ARM 10 针 Cortex Debug 排针。

  • 四个接地钩测试点。

备注

四角的 M1.6 安装孔可让你将扩展板固定到外壳或夹具上。

引脚参考

扩展板上的所有 AE3 信号均取自 AE3 底部的 B2B 排针,并引出到两侧的排针上 —— 一侧为 P0P5,另一侧为 P6P9 —— 两侧均为 3.3 V 参考电平。每个引脚的完整复用功能列表见 OpenMV AE3 页面;扩展板按如下方式使用这些引脚:

引脚

参考

AE3 功能

扩展板用途

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

空闲

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

摇杆 / Qwiic I²C SCL

P5

3.3 V

I2C1 SDA / UART1 RX / TIM2 T0 / PDM D0 / CAN RX

摇杆 / Qwiic I²C SDA

RESET

3.3 V

NRST

按下板载 RESET 按钮或将其拉至 GND 即可复位 AE3

P6

3.3 V

I2C1 SDA / UART3 CTS / TIM9 T0

空闲

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(寄存器选择)

P9

3.3 V

I3C SCL / UART3 TX / TIM5 T1 / ADC ch S11

摇杆 IRQ(状态变化时低电平有效)

3.3V 电源轨

为 OLED、摇杆扩展器和 Qwiic 设备供电

GND 电源轨

公共地

备注

恢复开关 会切换 AE3 上的一个内部 USB 多路复用器:AE3 自身的 USB 引脚会与 USB-C 端口断开,取而代之的是连接到安全飞地 UART 上的一个 USB 转串口转换器接入该端口。开关启用后,主机端的 Alif 工具便可与安全飞地通信,从而重新烧写 AE3 的引导加载程序。正常使用时请将开关保持 禁用,以便 USB-C 端口充当 AE3 的 USB。

备注

OLED 使能开关 必须打开 OLED 才能工作 —— 它控制面板的供电,并将 OLED 控制引脚(P0P2P3P7P8)连通到 AE3 的 GPIO。开关关闭时只有 P4P5P9 保持连通。当前开关状态会以位 0x40 的形式显示在摇杆扩展器上 —— 开关启用时该扩展器原始引脚读数为低电平

Qwiic 排针

扩展板上有两个 Qwiic 4 针 JST-SH 1.0 mm 连接器,与板载摇杆扩展器共用同一 P4/P5 I²C 总线,因此额外的 Qwiic 设备必须避开摇杆扩展器的地址(0x63)。

引脚

信号

1

GND

2

+3.3 V

3

SDA(P5

4

SCL(P4

JTAG 排针

扩展板上的 10 针 1.27 mm ARM Cortex Debug 排针直接连接到 AE3 的 SWD/JTAG 信号线。所有信号均为 1.8 V 参考电平 —— 请使用带电平转换的探针,或目标电压跟随 VCC_REF(引脚 1)的探针。

引脚

信号

1

VCC_REF (+1.8 V)

2

TMS (SWDIO)

3

+1.8 V

4

TCK (SWCLK)

5

GND

6

TDO (SWO)

7

防呆位(无引脚)

8

TDI

9

GND

10

DEBUG_RST_N(JTAG/调试复位 —— 与系统 NRST 相互独立)

用法

通过 display.SPIDisplay 配合一个 SSD1351 控制器实例来驱动 OLED。将摄像头帧推送到 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())

通过冻结的 pca9674a.PCA9674A 驱动读取 5 向摇杆。状态变化时扩展器会拉动 P9,因此请连接一个 IRQ 回调来锁存新的按键状态。这些按键在扩展器上为低电平有效;下面的代码将读取值与 0xFF 进行异或,因此 state 中置位的位表示 被按下

方向

0x01

摇杆向右

0x02

摇杆向上

0x04

摇杆向左

0x08

摇杆向下

0x10

摇杆中央按下

0x40

OLED 使能开关(OLED 启用时在 state 中置位)

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