[Linux驱动炼成记]02-用户空间控制GPIO

来源:互联网 发布:网络维护培训 编辑:程序博客网 时间:2024/05/21 07:51

平时调试GPIO的时候,往往是驱动写好控制接口,应用层操作,驱动配置端口->编译->烧录固件->查看现象,这样操作很繁琐,很浪费时间, 直接通过串口登录开发板,通过命令的方式控制端口,这样的方式既方便又快速.

注意: 前提条件是驱动程序中不能初始化该GPIO,否则操作过程中会提示设备忙的状态。

内核配置:


  1. 登录开发板,确认文件系统中是否有/sys/class/gpio/文件夹,如果没有,重新配置内核:

Device Drivers-> GPIO Support ->/sys/class/gpio/… (sysfs interface)
这里写图片描述

操作步骤

  • 操作目录: sys/class/gpio
    • /sys/class/gpio/export: 用于通知系统需要导出控制的GPIO引脚编号
    • /sys/class/gpio/unexport: 用于通知系统取消导出
    • /sys/class/gpio/gpiochipX: 目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数 导出一个引脚的操作步骤
  • 计算引脚编号

引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数

列举一款芯片计算方式: 

#define GPIO_PA(n)  (0*32 + n)#define GPIO_PB(n)  (1*32 + n)#define GPIO_PC(n)  (2*32 + n)#define GPIO_PD(n)  (3*32 + n)#define GPIO_PE(n)  (4*32 + n)#define GPIO_PF(n)  (5*32 + n)PA0 = 0*32+0 = 0PA1 = 0*32+1 = 1
  • 通过echo 1 > /sys/class/gpio/export,写入引脚编号,成功之后,会生成gpio1目录
    如果没有出现相应的目录,说明此引脚不可导出;
  • 设置端口输入/输出: echo out > /sys/class/gpio/direction, 查看: cat /sys/class/gpio/direction, 支持的参数:

    • in/out
    • high/low 同时设置方向为输出,并将value设置为相应的1/0
  • 高低电平操作: echo 1 > /sys/class/gpio/value 设置为高电平 

学会此方法,平时的工作效率又提升一倍!

参考

  • Linux操作GPIO(文件IO方式)