zynq和petalinux环境下控制gpio的两种方法

1,用Sysfs这个对MIO可用。

查看,如果没用/sys目录可  # mkdir /sys # mount -t sysfs sysfs /sys

/sys/class/gpio/gpiochipN/
得到 N=512,

实际LED GPIO 是 38
拉低这个GPIO点亮LED N + 38 = 512+38 = 550

echo 550 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio550/direction
echo 0 > /sys/class/gpio/gpio550/value

可以用C写读写文件的程序去控制。官方示例:GPIO User Space App - Xilinx Wiki - Confluence

2,devmem 实现。

Fpga硬件设计两个灯的值直接取自内存0x41200000。主要是用IPcore去实现,用到AXI GPIO, AXI interconnect和Processor System Reset三个IP。三个的时钟全用zynq输出的FCLK_clk0这样做全同步设计。Processor System Reset的ext_reset_in输入用zynq输出的FCLK_RESET0_N .其它两个模块的全部reset输入就用Processor System Reset的periperal_aresetn输入。具体的可参考:Using the GP Port in Zynq Devices — Embedded Design Tutorials 2021.2 documentation

petalinux实现后,可能过命令控制如下。

# devmem 0x41200000 32 0x00000000  #设置0
# devmem 0x41200000 32 0xffffffff        #设置
# devmem 0x41200004 32 0x00000000         #取消三态
# devmem 0x41200004 32 0xffffffff        #设置三态

# devmem 0x41200000         #读取

可以参考AXI gpio这年IP的手册,其实中寄存器的更细节的说明 AMD Technical Information Portal

进一步的可以通过C程序的内存映射去直接访问。python也可以。

从安全性上讲,要用第三种方法。写驱动,通过驱动访问硬件。

你可能感兴趣的:(petalinux,gpio)