AE3 OLED 扩展板¶
AE3 OLED 扩展板将 OpenMV AE3 与一块 128 × 128 RGB OLED、一个 5 向摇杆以及一个 10 针 ARM SWD 排针组合在一起,可实现独立预览、简单输入以及 JTAG/SWD 调试。
完整的数据手册、照片和订购信息请参见 AE3 OLED 扩展板产品页 。
亮点¶
128 × 128 RGB OLED,通过 SPI 由 SSD1351 控制器驱动。
AS90R 5 向摇杆,带中央按下按钮,引出到
P4/P5I²C 总线上。用于安全飞地 UART 访问的 复位按钮 和 恢复开关。
OLED 断开开关,可将面板从 SPI 总线上电气断开。
位于同一
P4/P5I²C 总线上的两个 Qwiic 连接器。用于 SWD/JTAG 调试的 ARM 10 针 Cortex Debug 排针。
四个接地钩测试点。
备注
四角的 M1.6 安装孔可让你将扩展板固定到外壳或夹具上。
引脚参考¶
扩展板上的所有 AE3 信号均取自 AE3 底部的 B2B 排针,并引出到两侧的排针上 —— 一侧为 P0–P5,另一侧为 P6–P9 —— 两侧均为 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 控制引脚(P0、P2、P3、P7、P8)连通到 AE3 的 GPIO。开关关闭时只有 P4、P5 和 P9 保持连通。当前开关状态会以位 0x40 的形式显示在摇杆扩展器上 —— 开关启用时该扩展器原始引脚读数为低电平。
Qwiic 排针¶
扩展板上有两个 Qwiic 4 针 JST-SH 1.0 mm 连接器,与板载摇杆扩展器共用同一 P4/P5 I²C 总线,因此额外的 Qwiic 设备必须避开摇杆扩展器的地址(0x63)。
引脚 |
信号 |
|---|---|
1 |
GND |
2 |
+3.3 V |
3 |
SDA( |
4 |
SCL( |
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 中置位的位表示 被按下:
位 |
方向 |
|---|---|
|
摇杆向右 |
|
摇杆向上 |
|
摇杆向左 |
|
摇杆向下 |
|
摇杆中央按下 |
|
OLED 使能开关(OLED 启用时在 |
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())