如何通过shell操作ZYNQ的GPIO?-Xilinx-AMD论坛-FPGA CPLD-ChipDebug

如何通过shell操作ZYNQ的GPIO?

GPIO 与 ZYNQ 和 PetaLinux

使用 PetaLinux 访问 GPIO 控制器非常简单,但您需要了解一些技巧。

定位 GPIO 控制器

在我使用的示例 FPGA 中,可编程逻辑中有两个 GPIO 控制器。它们位于地址 0x4120_0000 和 0x4121_0000。如果您查看pl.dtsiPetaLinux 项目中的文件,在目录中subsystems/linux/configs/device-tree,您将看到 GPIO 设备的条目。无需修改整个设备树。

如果您构建 PetaLinux 并启动它,您可以查看该/sys/class/gpio目录。

root@pz-7015-2016-2:~# ls /sys/class/gpio/                       
导出 gpiochip901 gpiochip902 gpiochip906 unexport

您可以看到gpiochip每个 GPIO 控制器都有一个目录。和目录对应于我在设计中添加的 PL 控制器gpiochip901gpiochip902gpiochip906目录用于 PS 中的 GPIO 控制器。

但是,您怎么知道哪个是哪个?每个目录都包含一个标签文件,告诉您控制器的设备树标签。你可以继续看内容:

root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip901/label
/amba_pl/gpio@41210000
root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip902/label
/amba_pl/gpio@41200000
root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip906/label
zynq_gpio
root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip901/ngpio
1
root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip902/ngpio
4
root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip906/ngpio
118

在我看来,编号从 901 开始。由于该控制器只有一个 GPIO 位,下一个控制器是 902。那个控制器有四个位,所以 ZYNQ PS 控制器从 906 开始,它有 118 位。

启用 GPIO 位

要访问 GPIO 位,您需要启用正确的 GPIO 引脚。您可以通过写入目录export中的文件来实现/sys/class/gpio。这是启用我的第二个控制器的 LSB 的示例:

root@pz-7015-2016-2:~# echo -n 902 > /sys/class/gpio/export 

现在,如果您查看该/sys/class/gpio目录,您将看到一个新创建的目录,它允许您控制各个 GPIO 引脚。

root@pz-7015-2016-2:~# ls /sys/class/gpio
导出 gpio902 gpiochip901 gpiochip902 gpiochip906 unexport

如果您查看该目录,您会看到许多控件:

root@pz-7015-2016-2:~# ls /sys/class/gpio/gpio902
active_low device direction edge power subsystem uevent value

访问 GPIO 位

您可以通过查看direction文件来确定 GPIO 方向。由于我的 GPIO 引脚是输出,因此它给出了值out

root@pz-7015-2016-2:~# cat /sys/class/gpio/gpio902/direction
out

您可以通过写入值文件将值更改为 1。

root@pz-7015-2016-2:~# echo 1 > /sys/class/gpio/gpio902/value           

结论

所以你有它。在 PetaLinux 上访问 GPIO 的“官方”方式。

请登录后发表评论