跳到主要内容

40 Pin GPIO 接口

瑞莎 Cubie A5E 板载 40 Pin GPIO(通用输入输出)接口,为硬件扩展提供了高度灵活的接口支持。

用户可以通过 40 Pin GPIO 接口连接各类传感器、执行器、通信模块、显示屏以及其他嵌入式外设,从而快速实现物联网(IoT)、机器人控制、工业自动化等领域的原型开发与功能验证。

危险

使用 40 Pin GPIO 接口时,请注意引脚和外设的接线,请确保引脚连接正确,不当操作可能导致设备硬件损坏。

GPIO 功能

Cubie A5E 支持给板载的 GPIO 引脚外接外部设备,支持 UART、SPI、I2C、ADC 等。

Function7Function6Function5Function4Function3Function2Function1Pin#Pin#Function1Function2Function3Function4Function5Function6Function7
+3.3V
1
2
+5.0V
PB-EINT5HDMI-SDAPWM0-9TRACE-CLKI2S0-BCLKTWI1-SDAPB5
3
4
+5.0V
PB-EINT4HDMI-SCLPWM0-8TRACE-DATA2I2S0-MCLKTWI1-SCKPB4
5
6
GND
PI-EINT7SPI2-CLKPWM0-8UART4-CTSUART6-RXPI7
7
8
PB9UARTO-TXTWIO-SCKTRACE-DATA1I2S0-DIN2I2S0-DOUBT2PB-EINT9
GND
9
10
PB10UARTO-RXTWIO-SDAPWM0-1I2S0-DIN3I2S0-DOUBT3PB-EINT10
PI-EINT9PWM0-10DMIC-DATA2TWI5-SDAPI9
11
12
PI2UART5-TXSPI1-CSOPWM0-3I2S2-BCLKI2S2-BCLKPI-EINT2
PI-EINT10I2S2-MCLKPWM0-11DMIC-DATA1OWA-OUTPI10
13
14
GND
S-PL-EINT12S-SPI0-MOSIDMIC-DATA2S-UART0-TXMCU-PWM0-6S-TWI2-SCKPL12
15
16
PI11UART3-TXDMIC-DATA0PWM0-12PI-EINT11
+3.3V
17
18
PI14UART6-RTSDMIC-CLKPWM0-15PI-EINT14
SPI1-MOSIPI-EINT13PWM0-4UART7-TXTWI4-SCKPB13
19
20
GND
PB-EINT14PWM0-5SPI1-MISOUART7-RXTWI4-SDAPB14
21
22
PL13S-TWI2-SDAMCU-PWM0-7S-UARTO-RXDMIC-DATA3S-SPI-MISOS-PL-EINT13
PB-EINT12PWM0-3SPI1-CLKUART7-CTSTWI5-SDAPB12
23
24
PB11TWI5-SCKUART7-RTSPWM0-2SPI1-CSOPB-EINT11
GND
25
26
PI0TWI4-SCKUART4-TXPWM0-1I2S2-DIN3I2S2-DOUBT3PI-EINTO
(USB2-DM)PI-EINT16PWM1-1TWI2-SDAUART3-CTSPI16
27
28
PI15TWI2-SCKUART3-RTSPWM1-0PI-EINT15(USB2-DM)
PI-EINT8SPI2-MOSIPWM0-9IR-RXTWI5-SCKPI8
29
30
GND
PI-EINT12SPI2-MISOPWM0-13UART3-RXPI12
31
32
PI1TWI4-SDAUART4-RXPWM0-2I2S2-DIN2I2S2-DOUBT2PI-EINT1
PI-EINT6SPI2-CSOPWM0-7UART6-TXUART4-RTSPI6
33
34
GND
PI-EINT13I2S2-MCLKPWM0-14DMIC-DATA3UART6-CTSPI13
35
36
PI3UART5-RXPWM0-4I2S2-LRCKSPI1-CLKPI-EINT3
GPADC2
37
38
PI5UART5-CTSSPI1-MISOPWM0-6I2S2-DINOI2S2-DOUBT1PI-EINT5
GND
39
40
PI4UART5-RTSSPI1-MOSIPWM0-5I2S2-DOUBT0I2S2-DIN1PI-EINT4

GPIO 引脚号

控制指定引脚,你想需要根据以下公式来计算引脚号:

GPIO 芯片引脚号计算公式
GPIOCHIP1A ~ KNUM + 32 * (A ~ K)
GPIOCHIP0L ~NUM + 32 * (L ~ )

计算示例:

  • PI4

GPIOCHIP1 -> 4 + 32 * (A ~ K) -> 4 + 32 * 8 -> 260

GPIO 使用

通过板载的 40-Pin GPIO 接口,演示常见的 GPIO 使用方法。

安装 python-periphery

使用 python-periphery 库来控制 GPIO 引脚。

radxa@cubie-a5e$
sudo pip3 install python-periphery

GPIO 读取

硬件准备

  • 主板
  • 杜邦线

软件准备

测试代码

以下代码是使用 python-periphery 库来读取 PI4 引脚的高低电平。

gpio_input.py
from periphery import GPIO
import time

def read_gpio_input():
# Configure GPIO input (modify pin number according to actual hardware)
# Using pin 260 of /dev/gpiochip1 here (corresponds to PI4)
try:
# Initialize GPIO in input mode
gpio_in = GPIO("/dev/gpiochip1", 260, "in")

print("Starting GPIO input reading (press Ctrl+C to exit)")
while True:
# Read pin value
value = gpio_in.read()
print(f"GPIO input value: {value} (True=High, False=Low)")
time.sleep(1) # Read once per second

except KeyboardInterrupt:
print("\nProgram exited")
except Exception as e:
print(f"Error occurred: {e}")
finally:
# Ensure resources are released
try:
gpio_in.close()
except:
pass

if __name__ == "__main__":
read_gpio_input()

测试步骤

  1. 将 PI4 引脚接 GND 或 3.3V 引脚

  2. 将代码保存为 gpio_input.py

  3. 使用 sudo python3 gpio_input.py 命令运行测试代码

实验现象

终端会输出 False 或 True 信息。

False 代表低电平,True 代表高电平。

GPIO 输出

硬件准备

  • 主板
  • 杜邦线

软件准备

测试代码

以下代码是使用 python-periphery 库来控制 PI4 引脚输出高低电平,然后通过 PI5 引脚读取 PI4 引脚的高低电平。

gpio_output.py
from periphery import GPIO
import time

def gpio_output_with_feedback():
# GPIO Configuration (modify pin numbers based on your hardware)
# PI4 (output) → maps to pin 260 of /dev/gpiochip1
# PI5 (input) → maps to pin 261 of /dev/gpiochip1
OUTPUT_PIN_CHIP = "/dev/gpiochip1"
OUTPUT_PIN_NUMBER = 260 # PI4 (output pin, controlled by the script)
INPUT_PIN_NUMBER = 261 # PI5 (input pin, reads PI4's output state)

# Initialize GPIO objects as None first (for safe release later)
gpio_out = None
gpio_in = None

try:
# Initialize PI4 as OUTPUT mode
gpio_out = GPIO(OUTPUT_PIN_CHIP, OUTPUT_PIN_NUMBER, "out")
# Initialize PI5 as INPUT mode
gpio_in = GPIO(OUTPUT_PIN_CHIP, INPUT_PIN_NUMBER, "in")

# Print test initialization info
print("=== GPIO Output-Input Feedback Test Started ===")
print(f"Controlled Pin (PI4): {OUTPUT_PIN_CHIP} - Pin {OUTPUT_PIN_NUMBER} (OUTPUT)")
print(f"Monitoring Pin (PI5): {OUTPUT_PIN_CHIP} - Pin {INPUT_PIN_NUMBER} (INPUT)")
print("Test Behavior: PI4 toggles HIGH/LOW every 1s; PI5 verifies PI4's state")
print("Press Ctrl+C to stop the test\n")

# Main loop: Toggle PI4 and read PI5 feedback
while True:
# 1. Set PI4 to HIGH level
gpio_out.write(True)
time.sleep(0.1) # Short delay for signal stabilization (avoid read lag)
pi5_reading = gpio_in.read()
print(f"PI4 Output: HIGH (True) | PI5 Reading: {pi5_reading}")

# Keep PI4 HIGH for 1 second
time.sleep(1)

# 2. Set PI4 to LOW level
gpio_out.write(False)
time.sleep(0.1) # Short delay for signal stabilization
pi5_reading = gpio_in.read()
print(f"PI4 Output: LOW (False) | PI5 Reading: {pi5_reading}")

# Keep PI4 LOW for 1 second
time.sleep(1)

# Handle user-initiated exit (Ctrl+C)
except KeyboardInterrupt:
print("\n\nTest stopped by user (Ctrl+C)")
# Handle other unexpected errors (e.g., GPIO access failure)
except Exception as e:
print(f"\nError during test: {str(e)}")
# Ensure GPIO resources are released even if an error occurs
finally:
print("\nReleasing GPIO resources...")
# Safely close PI4 (set to LOW first to avoid residual high level)
if gpio_out:
try:
gpio_out.write(False)
gpio_out.close()
print(f"Successfully closed PI4 (Pin {OUTPUT_PIN_NUMBER})")
except Exception as close_err:
print(f"Failed to close PI4 (Pin {OUTPUT_PIN_NUMBER}): {str(close_err)}")
# Safely close PI5
if gpio_in:
try:
gpio_in.close()
print(f"Successfully closed PI5 (Pin {INPUT_PIN_NUMBER})")
except Exception as close_err:
print(f"Failed to close PI5 (Pin {INPUT_PIN_NUMBER}): {str(close_err)}")
print("Resource release complete.")

# Run the test when the script is executed directly
if __name__ == "__main__":
gpio_output_with_feedback()

测试步骤

  1. 将 PI4 引脚和 PI5 引脚进行短接

  2. 将代码保存为 gpio_output.py

  3. 使用 sudo python3 gpio_output.py 命令运行测试代码

实验现象

终端会输出 False 或 True 信息。

False 代表低电平,True 代表高电平。

PWM 输出

硬件准备

  • 主板
  • LED
  • 杜邦线

软件准备

测试代码

以下代码是使用 python-periphery 库来测试 PWM 输出。

pwm_output.py
from periphery import PWM
import time

def pwm_test():
try:
# Configure PWM parameters - modify according to your hardware
# Common PWM paths: /sys/class/pwm/pwmchip0/pwm0, etc.
PWM_CHIP = 0 # PWM chip number
PWM_CHANNEL = 7 # PWM channel number

# Initialize PWM
pwm = PWM(PWM_CHIP, PWM_CHANNEL)

print(f"PWM Test: Using PWM{PWM_CHIP}.{PWM_CHANNEL} (Pin: PI6)")

# Set PWM frequency to 1kHz
frequency = 1000 # 1000 Hz
pwm.frequency = frequency
print(f" Set frequency: {frequency} Hz")

# Enable PWM output
pwm.enable()
print(" PWM enabled")

# Test different duty cycles (0% to 100%)
duty_cycles = [0.0, 0.25, 0.5, 0.75, 1.0]

for duty in duty_cycles:
pwm.duty_cycle = duty
print(f" Set duty cycle: {duty*100:.1f}%")
time.sleep(1) # Maintain current duty cycle for 1 second

# Cleanup
pwm.disable()
pwm.close()
print(" PWM disabled and closed")
print("PWM Test completed successfully")

except Exception as e:
print(f"PWM Test failed: {e}")

if __name__ == "__main__":
print("Starting PWM Signal Test...\n")
pwm_test()

测试步骤

  1. 进入 rsetupOverlay -> Manage overlays 勾选 Enable PWM0-7 选项,勾选后重启系统

  2. 将 LED 的正极连接到 PI6 引脚

  3. 将 LED 的负极连接到 GND 引脚

  4. 将代码保存为 pwm_output.py

  5. 使用 sudo python3 pwm_output.py 命令运行测试代码

实验现象

外接的 LED 会以不同的亮度闪烁,从亮到暗变化。

UART 使用

UART(通用异步收发传输器) 是一种广泛使用的串行通信协议,用于在嵌入式系统、计算机和外设之间进行异步串行数据传输。

硬件准备

  • 主板
  • 杜邦线

软件准备

测试代码

以下代码是使用 python-periphery 库来测试 UART4 回环通信。

uart_example.py
from periphery import Serial
import time

def uart_test():
try:
# Modify the serial device path according to your hardware, common paths include /dev/ttyS0, /dev/ttyS1, /dev/ttyUSB0, etc.
# PI11(TX) PI31(RX)
UART_DEVICE = "/dev/ttyAS3"
BAUDRATE = 115200

# Initialize serial port
serial = Serial(UART_DEVICE, BAUDRATE)

print(f"UART Test: Opening serial port {UART_DEVICE}, baud rate {BAUDRATE}")

# Send test data
test_message = "Hello, UART Test!\n"
serial.write(test_message.encode())
print(f" Sent data: {test_message.strip()}")

# Wait for data transmission
time.sleep(0.1)

# Try to read data (if loopback or other device responds)
if serial.input_waiting() > 0:
received_data = serial.read(serial.input_waiting())
print(f" Received data: {received_data.decode().strip()}")
else:
print(" No data received (normal unless loopback is connected)")

serial.close()
print("UART test completed")

except Exception as e:
print(f"UART test failed: {e}")

if __name__ == "__main__":
uart_test()

测试步骤

  1. 进入 rsetupOverlay -> Manage overlays 勾选 Enable UART3 选项,勾选后重启系统

  2. 将 PI11 引脚和 PI31 引脚短接

  3. 将代码保存为 uart_example.py

  4. 使用 sudo python3 uart_example.py 命令运行测试代码

实验现象

终端会输出发送和接收的信息,可以根据终端输出的信息判断 UART 回环测试是否成功。

I2C 使用

I2C 是一种广泛使用的同步串行通信协议,由飞利浦(现恩智浦)开发,主要用于短距离芯片间通信。

硬件准备

  • 主板
  • I2C 设备(如 OLED 显示屏,其对应的 I2C 地址为 0x3C)
  • 杜邦线

软件准备

测试代码

以下代码是使用 python-periphery 库来测试 I2C 通信。

i2c_example.py
from periphery import I2C

def i2c_device_detection():
"""I2C Test - Check if device exists
Pin reference: PB5 (SDA), PB4 (SCL)
"""
# Modify according to your hardware connection
# Common I2C bus devices: /dev/i2c-0, etc.
I2C_BUS = "/dev/i2c-1"
TARGET_ADDR = 0x3C # Target address to check

i2c = None # Initialize I2C object reference
try:
# Initialize I2C object
i2c = I2C(I2C_BUS)

# Attempt a simple read/write operation to detect device
# Sending a single 0x00 byte as test communication
msgs = [I2C.Message([0x00])]
i2c.transfer(TARGET_ADDR, msgs)

print(f"I2C Test: Device found at address 0x{TARGET_ADDR:02X}")
return True

except Exception as e:
# Exception (e.g., IOError) usually indicates no device or no response
print(f"I2C Test: No device or no response at address 0x{TARGET_ADDR:02X}: {e}")
return False
finally:
# Ensure I2C resources are released
if i2c is not None:
try:
i2c.close()
except:
pass

if __name__ == "__main__":
print("Starting I2C Device Detection...")
i2c_device_detection()
print("I2C Test completed")

测试步骤

  1. 进入 rsetupOverlay -> Manage overlays 勾选 Enable TWI1 选项,勾选后重启系统

  2. 将 OLED 显示屏的 SCL 引脚连接到 PB4 引脚,SDA 引脚连接到 PB5 引脚,VCC 连接到 5V,GND 连接到 GND

  3. 将代码保存为 i2c_example.py

  4. 使用 sudo python3 i2c_example.py 命令运行测试代码

实验现象

脚本功能是检查指定 I2C 总线上的特定地址是否存在可响应的 I2C 设备,可以判断 I2C 设备是否正常工作。

SPI 使用

SPI(串行外设接口)是一种高速、全双工、同步串行通信协议,由 Motorola(现为 NXP )开发,主要用于短距离芯片间通信,常见于传感器、存储器(如 Flash )、显示屏等设备与微控制器之间的数据传输。

硬件准备

  • 主板
  • 杜邦线

软件准备

测试代码

以下代码是使用 python-periphery 库来测试 SPI 回环通信。

spi_example.py
from periphery import SPI

def spi_communication_test():
# Data to be transmitted (4 bytes)
transmit_data = [0xAA, 0xBB, 0xCC, 0xDD]

try:
# Initialize SPI resource
# Parameters: SPI device path, mode 0, 1MHz clock frequency
spi = SPI("/dev/spidev1.0", 0, 1000000)

# Transmit data and receive response simultaneously
# SPI is full-duplex, so data is sent and received at the same time
received_data = spi.transfer(transmit_data)

# Print test results
print("SPI Test:")
print(" Transmitted data: [0x{:02x}, 0x{:02x}, 0x{:02x}, 0x{:02x}]".format(*transmit_data))
print(" Received data: [0x{:02x}, 0x{:02x}, 0x{:02x}, 0x{:02x}]".format(*received_data))

except Exception as e:
print(f"SPI Test failed: {e}")
finally:
# Ensure SPI resource is released
try:
spi.close()
except:
pass

if __name__ == "__main__":
print("Starting SPI Communication Test...\n")
spi_communication_test()
print("\nSPI Test completed")

测试步骤

  1. 进入 rsetupOverlay -> Manage overlays 勾选 Enable spidev on SPI1 选项,勾选后重启系统

  2. 将 PI4 引脚和 PI5 引脚连接

  3. 将代码保存为 spi_example.py

  4. 使用 sudo python3 spi_example.py 命令运行测试代码

实验现象

终端会输出发送和接收的信息,可以根据发送和接收的数据是否一致判断 SPI 回环测试是否成功。

    您需要登录 GitHub 才能发表评论。如果您已登录,请忽略此消息。

    Radxa-docs © 2026 by Radxa Computer (Shenzhen) Co.,Ltd. is licensed under CC BY 4.0