资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

预留GPIO输出

预留GPIO口输出

说明
FZ3A/B_GPIO
FZ5C/D_GPIO
FZ9D_GPIO
命令行操作步骤
DEMO

说明

EdgeBoard已经预留多个GPIO接口,不同型号预留的数量略有不同,更详细的gpio输出控制请参见https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842398/Linux+GPIO+Driver#LinuxGPIODriver-UsingGPIOwithSysFs

FZ3A/B_GPIO

FZ3预留的GPIO接口在44针扩展口上,共设置了6个GPIO,电平标准为3.3V,连接器标号为J12,原理图如下,

连接器对应的pin1如下图:

J12管脚 信号名称 gpio number J12管脚 信号名称 gpio number
9 IO_B14_1P 338+78+4=420 10 IO_A14_1N 421
11 IO_B15_2P 422 12 IO_A15_2N 423
13 IO_C14_3P 424 14 IO_C13_3N 425

注意:设备系统中gpio number中的gpiochip不一定为338,可以通过ls /sys/class/gpio查看gpiochip的编号,然后再加78+4。

FZ5C/D_GPIO

连接器原理图

FZ5C/D目前有GPIO输出功能的为J15连接器对应的PS_MIO,其他PL端管脚没有配置GPIO功能

FZ5C/FZ5D预留的GPIO管脚见下表

J15 pin GPIO接口 gpio number 备注
pin53 PS_MIO6 338+6=344 系统内base_gpio为338+6(ps中mio gpio的端口号)=344
pin55 PS_MIO7 345
pin54 PS_MIO10 348
pin56 PS_MIO11 349
pin60 PS_MIO44 382

注意:设备系统中gpio number中的gpiochip不一定为338,可以通过ls /sys/class/gpio查看gpiochip的编号,然后再加6。

FZ9D_GPIO

连接器原理图

FZ9D预留的GPIO管脚见下表

J72 pin J72对应信号 对应PL端pin 191 1.5.2系统对应的gpio number 备注
pin5 EX_IO_1P B50_L12_P 332+78+6=416 PL端的GPIO是:系统内base_gpio为332+78(pl映射emio的IO号)+6(ip的pin的端口号)=416
pin6 EX_IO_1N B50_L12_N 417
pin7 EX_IO_2P B50_L10_N 418
pin8 EX_IO_2N B50_L10_P 419
pin9 EX_IO_3P B44_L8_P 420
pin10 EX_IO_3N B44_L8_N 421
pin11 EX_IO_4P B44_L6_P 422
pin12 EX_IO_4N B44_L6_N 423
pin13 EX_IO_5P B44_L9_N 424
pin14 EX_IO_5N B44_L9_P 425
pin15 EX_IO_6P B50_L6_P 426
pin16 EX_IO_6N B50_L6_N 427
pin17 EX_IO_7P B50_L5_P 428
pin18 EX_IO_7N B50_L5_N 429
pin19 EX_IO_8P B50_L1_P 430
pin20 EX_IO_8N B50_L1_N 431
pin21 EX_IO_9P B50_L2_P 432
pin22 EX_IO_9N B50_L2_N 433
pin23 EX_IO_10P B50_L3_P 434 系统内部已使用
pin24 EX_IO_10N B50_L3_N 435 系统内部已使用
pin25 EX_PS_MIO26 PS_MIO26 332+26=358 PS端的GPIO是:系统内base_gpio为332+26(ps中mio gpio的端口号)=358
pin26 EX_PS_MIO33 PS_MIO33 332+33=365

注意:设备系统中gpio number中的gpiochip不一定为332,可以通过ls /sys/class/gpio查看gpiochip的编号,然后再加78+6。

命令行操作步骤

1、确定GPIO输出引脚

以FZ3A/B为例,查看gpiochip,依据官方文档gpio number为base_gpio + other_gpio,所以IO_B14_1P2对应的gpio number为338+78+4=420

其他gpio number计算方法相同,请参考上面的预留gpio列表,在最新系统中gpionumber已给出。

2、操作GPIO管脚

具体步骤为:

  • 输出一个GPIO
  • 读取GPIO的direction和value
  • 控制GPIO的direction和value

具体操作如下:

//在EdgeBoard系统中操作如下命令
//建立PS_MIO12为GPIO
echo 349 > /sys/class/gpio/export

//查看PS_MIO12预置的direction和value
cat /sys/class/gpio/gpio349/direction
cat /sys/class/gpio/gpio349/value

//控制PS_MIO12方向为out,并输出低电平
echo out > /sys/class/gpio/gpio349/direction
echo 0 > /sys/class/gpio/gpio349/value

见下图:

DEMO

参见gpio.py

说明:初始化 gpio为 out 功能并间隔 1s循环切换 高低电平

"""
    Set GPIO output mode, and cycle switching level at interval of 1 s
"""
import os
import sys
import time
import argparse
from pathlib import Path
# args parse
parser = argparse.ArgumentParser(description='manual to gpio param')
parser.add_argument("--port", type=int, default=456, help='')
args = parser.parse_args()
# param init
port = args.port
port_path = "/sys/class/gpio/gpio{0}".format(port)
port_direction_path = "{0}/direction".format(port_path)
port_value_path = "{0}/value".format(port_path)
# enable gpio port
if Path(port_path).is_dir() is False:
    os.system("echo {0} > /sys/class/gpio/export".format(port))
# check enable success
if Path(port_path).is_dir() is False:
    print("Error: Enable Port {0} Faield.".format(port))
    sys.exit()
# gpio set out mode
os.system("echo out > {0}".format(port_direction_path))
while 1:
    print("Port is High ...")
    os.system("echo 0 > {0}".format(port_value_path))  # set low
    time.sleep(1)
    print("Port is Low ...")
    os.system("echo 1 > {0}".format(port_value_path))  # set high
    time.sleep(1)

附:

GPIO操作详情请参考https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842398/Linux+GPIO+Driver#LinuxGPIODriver-UsingGPIOwithSysFs

上一篇
预留串口输出
下一篇
适配4G上网卡