基于zedboard(zynq7020)使用命令行(sysfs )读取、控制AXI_GPIO开关、led和PS MIO

linux gpio 从内核空间导出到用户空间
  petalinux 在制作Linux 系统时,会自动的将gpio 从内核空间导出到用户空间,在用户空间下可以通过sysfs 方式控制gpio;用户空间位置在 /sys/class/gpio,在该文件夹下能看到gpiochipX,X 代表gpio的base从那里开始。比如vivado 设计用的axi-gpio 地址时412000,经过空间导出到用户空间之后,gpiochipX 的属性就表示了axi-gpio属性,其中label 为物理地址,base 为基地址,且X=BASE,比如BASE = 1000, 则生成gpiochip1000,还有一个参数ngpio 表示生成了几个gpio口。
  即在vidado 做工程时体现的是物理地址,经过petalinux 制作linux 系统后,自动的将内核空间的gpio导出到用户空间/sys/class/gpio下,然后在xsdk 下写linux 的gpio 驱动时,用的是base,gpio数目不同,base是不同的,在sdk中写程序时注意先看一下gpiochip 从几开始,但是gpiochip 的label 对应的是内核空间的物理地址。由于gpio 最大1024,从0到1023,因此比如axi-gpio 有30个io口,则生成gpiochip994,从994到1023共30个io;如果axi-gpio为24个,则生成gpiochip1000,从1000到1023共24个gpio口;这一过程为petalinux 自动生成的过程,且在设备树文档里面也有体现。
  以上文字引自:

https://blog.csdn.net/gardenyou/article/details/103032322?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-103032322-blog-124431929.235%5Ev35%5Epc_relevant_increate_t0_download_v2_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-103032322-blog-124431929.235%5Ev35%5Epc_relevant_increate_t0_download_v2_base

命令使用

EMIO控制


root@zeddemo_v1:~# cd /sys/class/gpio/		// 进入 /sys/class/gpio目录
root@zeddemo_v1:/sys/class/gpio# ls			//展示
export        gpiochip1003  gpiochip1008  gpiochip1016  gpiochip885   unexport

FPGA配置了两个AXI_GPIO模块,一个是五个按键;另一个打开两个channel,一个是8个开关,另一个是8个LED灯,分别为gpiochip1003 gpiochip1008 gpiochip1016

首先控制LED灯:

root@zeddemo_v1:/sys/class/gpio# echo 1016 > export        //暴露接口 
root@zeddemo_v1:/sys/class/gpio# ls 
export        gpio1016      gpiochip1003  gpiochip1008  gpiochip1016  gpiochip885   unexport
root@zeddemo_v1:/sys/class/gpio# cd gpio1016
root@zeddemo_v1:/sys/class/gpio/gpio1016# echo out > direction 	//设置方向
root@zeddemo_v1:/sys/class/gpio/gpio1016# echo 1 > value  //打开led
root@zeddemo_v1:/sys/class/gpio/gpio1016# echo 0 > value  //关闭led

以上代码只能控制一个led,想控制下一个,需要偏移一位地址,即:gpiochip1017

root@zeddemo_v1:/sys/class/gpio# echo 1017 > export        //暴露接口 
root@zeddemo_v1:/sys/class/gpio# ls 
export        gpio1017      gpiochip1003  gpiochip1008  gpiochip1016  gpiochip885   unexport
root@zeddemo_v1:/sys/class/gpio# cd gpio1017
root@zeddemo_v1:/sys/class/gpio/gpio1016# echo out > direction 	//设置方向
root@zeddemo_v1:/sys/class/gpio/gpio1016# echo 1 > value  //打开led
root@zeddemo_v1:/sys/class/gpio/gpio1016# echo 0 > value  //关闭led

同理需要读取开关或按键状态,代码如下:

root@zeddemo_v1:/sys/class/gpio# echo 1008 > export 
root@zeddemo_v1:/sys/class/gpio# ls
export        gpio1008      gpio1016      gpiochip1003  gpiochip1008  gpiochip1016  gpiochip885   unexport
root@zeddemo_v1:/sys/class/gpio# cd gpio1008
root@zeddemo_v1:/sys/class/gpio/gpio1008# echo in > direction   //设置方向为输入
root@zeddemo_v1:/sys/class/gpio/gpio1008# cat value 	//读取开关状态
0
root@zeddemo_v1:/sys/class/gpio/gpio1008# cat value 
1

MIO控制

root@zeddemo_v1:~# cd /sys/class/gpio/
root@zeddemo_v1:/sys/class/gpio# ls
export        gpiochip1003  gpiochip1008  gpiochip1016  gpiochip885   unexport

由上可以得到,zynq7020第一个GPIO口编号为906,即MIO0,zedboard开发板PS端LED灯使用的是MIO7,所以需要控制的gpio号为:
885+7=892
控制方式如下:

root@zeddemo_v1:~# cd /sys/class/gpio/
root@zeddemo_v1:/sys/class/gpio# ls
export        gpiochip1003  gpiochip1008  gpiochip1016  gpiochip885   unexport
root@zeddemo_v1:/sys/class/gpio# echo 892 > export 
root@zeddemo_v1:/sys/class/gpio# cd gpio892
root@zeddemo_v1:/sys/class/gpio/gpio892# echo out > direction 
root@zeddemo_v1:/sys/class/gpio/gpio892# cat active_low 
0														//高电平有效
root@zeddemo_v1:/sys/class/gpio/gpio892# echo 0 >value 	//关闭led
root@zeddemo_v1:/sys/class/gpio/gpio892# echo 1 >value 	//打开led

root@zeddemo_v1:/sys/class/gpio/gpio892# echo 1 > active_low 
root@zeddemo_v1:/sys/class/gpio/gpio892# cat active_low 
1														//低电平有效
root@zeddemo_v1:/sys/class/gpio/gpio892# echo 0 >value  //打开led     
root@zeddemo_v1:/sys/class/gpio/gpio892# echo 1 >value  //关闭led 


你可能感兴趣的:(ZYNQ,LINUX,linux)