犀牛派X1的GPIO调用实操演示

21 阅读5分钟

犀牛派X1封面.png

更多详情查看:item.taobao.com/item.htm?ft…

设备介绍

犀牛派X1是阿加犀的一款基于高通跃龙QCS8550平台研发的智能边缘计算开发板,采用6核高性能处理器,大核主频高达3.2GHz。集成高性能图形引擎 和综合算力达48TOPS的AI引擎,支持Wi-Fi 7 (2.4G/5G/6GHz),BT5.3/BLE,GNSS等无线通信技术。犀牛派X1开发板拥有丰富的工业接口, 包括USB3.0/USB2.0/USB-C/HDMI/Audio/RJ45等,可广泛应用于工业控制,智能制造,安防监控,智能机器人,数字多媒体等领域,其详细硬件参数信息如下:

项目参数
平台Qualcomm® QCS8550
AI性能~48 TOPS INT8
OSAidLux(Android13 + Ubuntu22.04) / Ubuntu22.04
CPU1x Kryo Prime 3.2 GHz + 2x Kryo Gold 2.8 GHz + 3x Kryo Silver 2.0 GHz
GPUAdreno 740
运行内存16GB LPDDR5X
存储128GB
视频编解码Decode: 4K@240fps or 8K@60fps H.264/H.265
/Encode: 4K@120fps or 8K@30fps H.264/H.265
Camerax8, CSI interface reserved
HDMIHDMI OUT X1, HDMI IN x1, 支持HDMI1.4,支持1080P@60Hz, 支持4K@30Hz
无线连接Wi-Fi7:802.11be, 2.4G/5G/6G HZ DBS, 2*2 MIMO
BT:5.3
USBUSB-A 3.0:x4, USB3.0 Type-C:x1, 支持DP1.4
音频Line in, 3.5mm Interface; Line out, 3.5mm Interface
网络接口LAN * 3,WAN * 1
RTCx1, CR2032(225mAh)
电源DC12V 5A
工作温度-20℃ ~ +60℃
外形尺寸125x110x35.5mm
其他接口RS232: x2,RS485: x2,40PIN连接器,MIPI—DSI

0(1).png

犀牛派 X1 (Rhino Pi-X1) 板载两种 40 PIN GPIO 接口:

  • 40-Pin 3.3V GPIO 扩展接口 (树莓派适配)
  • 40-Pin 1.8V GPIO 扩展接口

并且Rhino Pi-X1 配备了一个板载 40-PIN 简牛 2.5 间距连接器,用于扩展 3.3V GPIO 扩展,为硬件扩展提供了高度灵活的接口支持。用户可以通过此接口连接各种传感器、通信模块、显示器和其他嵌入式外设,在物联网 (IoT) 、机器人控制和工业自动化等领域实现快速原型设计和功能验证。

40-Pin 3.3V GPIO扩展接口功能如下表:

FunctionPIN#PIN#Function
3.3V OUT125V OUT
I2C1_SDA345V OUT
I2C1_SCL56GND
GPIO_0078GPIO_12
GND910GPIO_01
GPIO_051112LPI_I2S2_CLK
I2C4_SDA1314GND
I2C4_SCL1516UART_RX
3.3V OUT1718GPIO_61
SPI3_MOSI1920GND
SPI3_MISO2122GPIO_118
SPI3_CLK2324SPI3_CS0
GND2526GPIO_22
GPIO_322728GPIO_33
UART_TX2930GND
GPIO_623132GPIO_91
GPIO_1243334GND
LPI_I2S2_WS3536GPIO_63
GPIO_603738LPI_I2S2_DATA0
GND3940LPI_I2S2_DATA1

40-Pin 1.8V (通用)GPIO扩展接口功能如下表:

FunctionPIN#PIN#Function
NC121.8V OUT
NC34GND
GPIO_7056I2S1_CLK
NC78I2S1_WS
GND910I2S1_DATA0
GPIO_361112I2S1_DATA1
GPIO_371314GND
Uart TX15161.8V/100mA
Uart RX1718SENSOR_I3C_SCL
MAG_ALPS_I2C_SCL1920SENSOR_I3C_SDA
MAG_ALPS_I2C_SDA2122SENSOR_I2C_SCL
GPIO_062324SENSOR_I2C_SDA
ADC IN02526I2S3_DATA1
Debug_UART_TX27285V OUT/300mA
Debug_UART_RX2930I2S3_DATA0
I2S3_CLK3132ADC IN1
I2S3_WS3334GND
GND3536ADC IN2
CAN_L3738GND
CAN_H3940PWM

实操演示

1、AidLux中调用GPIO安装必要的工具

sudo apt update
sudo apt install gpiod libgpiod2 libgpiod-dev

2、犀牛派X1中按硬件接口定义,GPIO分为多组(00、01、05、12...)以00组为例,调用命令

sudo gpioset /dev/gpiochip0 0=1   #打开
sudo gpioset /dev/gpiochip0 0=0   #关闭

3.png

采用一个单模块LED灯将其VCC、GND、IN分别接入对应接口位置,接口详情信息可查技术文档APLUX Doc Center

4.png

硬件物理接入后,可将调用方法用一个python脚本来进行控制,例如:

import subprocess
import time
import signal
import sys

# 配置 GPIO 参数(可根据实际硬件修改)
GPIO_CHIP = "/dev/gpiochip0"  # GPIO 芯片设备路径
GPIO_LINE = 0  # 控制 LED 的 GPIO 引脚号
INTERVAL = 2   # 闪烁间隔(秒)

# 初始化:确保程序退出时关闭 LED
def cleanup():
    """清理函数:关闭 LED,释放 GPIO 资源"""
    try:
        # 设置 GPIO 为低电平,关闭 LED
        subprocess.run(
            ["sudo", "gpioset", GPIO_CHIP, f"{GPIO_LINE}=0"],
            check=True,
            stdout=subprocess.DEVNULL,  # 屏蔽命令输出
            stderr=subprocess.DEVNULL
        )
        print("\nLED 已关闭,资源已清理")
    except subprocess.CalledProcessError as e:
        print(f"\n清理 GPIO 时出错:{e}")
    sys.exit(0)

# 注册信号处理(Ctrl+C 退出时执行清理)
def signal_handler(signal_num, frame):
    """捕获 Ctrl+C 信号,执行清理"""
    print("\n接收到退出信号,正在关闭 LED...")
    cleanup()

# 注册信号(SIGINT 对应 Ctrl+C)
signal.signal(signal.SIGINT, signal_handler)

def set_gpio_level(level):
    """设置 GPIO 电平(0:低电平,1:高电平)"""
    try:
        # 调用 gpioset 命令设置电平
        result = subprocess.run(
            ["sudo", "gpioset", GPIO_CHIP, f"{GPIO_LINE}={level}"],
            check=True,
            stdout=subprocess.DEVNULL,
            stderr=subprocess.PIPE  # 捕获错误输出
        )
        return True
    except subprocess.CalledProcessError as e:
        print(f"设置 GPIO 电平失败({level}):{e.stderr.decode('utf-8').strip()}")
        return False
    except FileNotFoundError:
        print("错误:未找到 gpioset 命令,请确保安装了 libgpiod 工具")
        cleanup()
    except Exception as e:
        print(f"未知错误:{e}")
        cleanup()

def main():
    """主函数:实现 LED 闪烁"""
    print(f"开始 LED 闪烁(间隔 {INTERVAL} 秒),按 Ctrl+C 退出...")
    try:
        while True:
            # 打开 LED(高电平)
            if set_gpio_level(1):
                print("LED 亮")
            time.sleep(INTERVAL)
            
            # 关闭 LED(低电平)
            if set_gpio_level(0):
                print("LED 灭")
            time.sleep(INTERVAL)
    except Exception as e:
        print(f"程序异常:{e}")
        cleanup()

if __name__ == "__main__":
    main()

该脚本将执行两秒时间间隔控制GPIO信号使得LED灯亮灯与灭灯交替进行。

结果演示:

gpio.gif