在zynq上通过petalinux终端操作GPIO

使用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/                       
export       gpiochip901  gpiochip902  gpiochip906  unexport

您会看到gpiochip每个GPIO控制器都有一个目录。在gpiochip901与gpiochip902目录对应PL控制器,我在我的设计中加入的。该gpiochip906目录用于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

查看它,您会看到gpiochip901对应于我的控制器,位于0x4120_0000,而gpiochip902对应于我的控制器,位于0x4121_0000。Gpiochip906是不同的,并且对应于ZYNQ上的内置控制器。为什么是这些数字?在我的FPGA中,第一个GPIO控制器仅控制一个GPIO位,而第二个GPIO控制器控制四个位。我们可以通过在ngpio控制器文件中查找来确定每个控制器控制多少位。

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。该控制器具有4位,因此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
export       gpio902      gpiochip901  gpiochip902  gpiochip906  unexport
`

如果您查看该目录,则会看到许多可设置项:

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

访问GPIO位

您可以通过查看direction文件来确定GPIO方向。由于我的GPIO引脚是输出,所以它显示值为out。

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

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

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

结论

现在你有了在PetaLinux上访问GPIO的“标准”方式。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除
匿名用户

匿名