预留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)
附: