RDK X5 40-PIN 引脚定义及 GPIO 应用
RDK X5 开发板提供了一个 40-pin 引脚排针,可用于连接传感器、执行器及外设总线。本指南将介绍引脚定义、多路复用规则,并通过实际 GPIO 示例帮助您快速从用户空间驱动硬件。
40-PIN 引脚排针概述
RDK X5 40-pin 引脚排针采用与树莓派兼容的布局。设计电路时请注意以下电气限制:
| 参数 | 数值 |
|---|---|
| 逻辑电压 | 3.3 V |
| 任意引脚最大电压 | 3.46 V |
| 3.3 V 电源电流预算 | 800 mA |
| 5 V 电源电流预算 | 500 mA |
⚠️ 注意: 请勿在任何 GPIO 引脚上施加高于 3.46 V 的电压。该排针仅支持 3.3 V 逻辑,不支持 5 V 电平。
引脚定义
下表列出了 40-pin 排针上每个引脚的默认功能及其复用备选功能。
| 引脚 | 默认功能 | 备选功能 | 备注 |
|---|---|---|---|
| 1 | 3.3V 电源 | — | 最大 800 mA |
| 2 | 5V 电源 | — | 最大 500 mA |
| 3 | I2C0 SDA | PWM2 | 复用 |
| 5 | I2C0 SCL | PWM2 | 复用 |
| 6 | GND | — | |
| 8 | UART3 TX | — | |
| 10 | UART3 RX | — | |
| 12 | I2C1 SDA | PWM3 | 复用 |
| 14 | GND | — | |
| 16 | GPIO | — | |
| 18 | GPIO | — | |
| 19 | SPI2 MOSI | PWM0 | 复用 |
| 20 | GND | — | |
| 21 | SPI2 MISO | PWM1 | 复用 |
| 22 | GPIO | — | |
| 23 | SPI2 SCLK | PWM0/PWM1 | 复用 |
| 24 | SPI2 CS0 | — | |
| 25 | GND | — | |
| 26 | SPI2 CS1 | — | |
| 27 | I2C5 SDA | UART3 | 复用 |
| 28 | I2C5 SCL | UART3 | 复用 |
| 29 | GPIO | — | |
| 30 | GND | — | |
| 31 | GPIO | — | 演示中用作输出 |
| 32 | GPIO | — | |
| 33 | GPIO | — | |
| 34 | GND | — | |
| 35 | GPIO | — | |
| 36 | GPIO | — | |
| 37 | GPIO | — | 演示中用作输入 |
| 38 | GPIO | — | |
| 39 | GND | — | |
| 40 | GPIO | — |
引脚复用规则
排针上的若干引脚可在专用外设功能(I2C、UART、SPI、PWM)与普通 GPIO 之间切换。复用分组如下:
- UART3 / I2C5 — 引脚 8/10(UART3)与引脚 27/28(I2C5)共享同一控制器配置。
- I2C0 / PWM2 — 引脚 3/5 可作为 I2C0 或 PWM 通道。
- SPI2 / PWM0 — 引脚 19/23 可传输 SPI2 信号或 PWM0。
- SPI2 / PWM1 — 引脚 21/23 可传输 SPI2 信号或 PWM1。
- I2C1 / PWM3 — 引脚 12 可作为 I2C1 或 PWM3。
配置后复用状态的含义:
| 配置状态 | 含义 |
|---|---|
okay |
引脚专用于外设功能(如 I2C、UART)。 |
disabled |
引脚可用作通用 GPIO。 |
📌 注意: 更改引脚复用模式后必须重启才能生效。请在接线前规划好配置。
使用 srpi-config 配置引脚功能
RDK X5 预装 srpi-config 菜单驱动工具(类似 raspi-config),用于启用或禁用板载外设。
步骤 1:打开配置工具
sudo srpi-config
进入全屏模式 退出全屏模式
步骤 2:进入外设菜单
- 选择 3 Interface Options。
- 选择 I3 Peripheral bus config。
步骤 3:启用或禁用外设
您将看到外设总线(UART、I2C、SPI、PWM)列表,根据需求切换:
- 选择总线并按 Enter 启用。
- 选择已启用的总线并按 Enter 禁用。
步骤 4:重启
sudo reboot
进入全屏模式 退出全屏模式
重启后,已启用的引脚将专用于外设功能(状态 okay),禁用的引脚将恢复为 GPIO(状态 disabled)。
GPIO 应用:按钮 + LED 示例
本示例读取连接到引脚 37(输入)的按钮,并驱动引脚 31(输出)的 LED。按下按钮时 LED 点亮。
硬件连接
| 元件 | 排针引脚 |
|---|---|
| LED 阳极(经 ~220Ω 电阻) | 引脚 31(GPIO 输出) |
| LED 阴极 | 引脚 39(GND) |
| 按钮 — 一端 | 引脚 37(GPIO 输入) |
| 按钮 — 另一端 | 引脚 39(GND) |
软件先决条件
请确保所用引脚已在 srpi-config 中配置为 GPIO(其外设功能应为 disabled)。若尚未安装 GPIO 库,请执行:
pip3 install gpio
进入全屏模式 退出全屏模式
运行示例
示例脚本随板载镜像一起提供,位于 /app/40pin_samples/。进入该目录并运行:
cd /app/40pin_samples
sudo python3 button_led.py
进入全屏模式 退出全屏模式
预期输出
脚本启动后,您将看到:
Starting demo now!
进入全屏模式 退出全屏模式
运行期间,每次按下或释放按钮,脚本都会打印当前驱动到引脚 31 的输出状态:
Outputting 0 to Pin 31
Outputting 1 to Pin 31
进入全屏模式 退出全屏模式
0 表示 LED 熄灭,1 表示 LED 点亮。
源代码:button_led.py
#!/usr/bin/env python3
# button_led.py
# Pin 37: input (button)
# Pin 31: output (LED)
import time
import gpio
# Configure pins
gpio.pin_mode(37, gpio.INPUT) # Button as input
gpio.pin_mode(31, gpio.OUTPUT) # LED as output
print("Starting demo now!")
last_state = None
try:
while True:
# Read the button state
button_state = gpio.digital_read(37)
if button_state == 0:
# Button pressed (pulled low)
gpio.digital_write(31, 1)
new_state = 1
else:
# Button released
gpio.digital_write(31, 0)
new_state = 0
if new_state != last_state:
print("Outputting {} to Pin 31".format(new_state))
last_state = new_state
time.sleep(0.05) # Simple debounce
except KeyboardInterrupt:
print("\nExiting demo...")
finally:
gpio.digital_write(31, 0)
gpio.cleanup()
进入全屏模式 退出全屏模式
💡 提示: 若 LED 行为与预期相反,您的按钮模块可能内置上拉电阻。请在
if button_state == 0:块中交换0和1的逻辑以匹配硬件。
故障排除
-
权限被拒绝: GPIO 访问需要 root 权限。请始终使用
sudo运行脚本。 -
引脚无响应: 确认引脚已在
srpi-config中设置为disabled(GPIO 模式),并在更改后重启。 -
示例文件缺失: 示例位于
/app/40pin_samples/。若目录不存在,请更新板载镜像或从 RDK X5 官方文档复制示例。
总结
您现在已掌握:
- 阅读 RDK X5 40-pin 排针引脚定义及其电气限制。
- 理解引脚复用及
okay/disabled状态含义。 - 使用
srpi-config启用或禁用外设总线。 - 从用户空间 Python 驱动按钮 + LED 电路。
接下来,您可以扩展到 I2C 传感器、UART 通信、SPI 显示屏以及 PWM 电机控制——全部通过同一 40-pin 排针实现。
*本文改编自 D-Robotics 官方文档。原始来源:https://d-robotics.github.io/rdk_x_doc/en/Basic_Application/01_40pin_user_sample/40pin_define?v=3.5.0&p=RDK+X5
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.