用户空间通过sysfs操作GPIO & GPIO引脚编号计算

 

 

 

 

GPIO信息

 

 

RK3399 有 5 组 GPIO bank

  GPIO0 ~ GPIO4

 

每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分

  不是所有 bank 都有全部编号,例如 GPIO4 就只有 C0~C7, D0~D2

 

所有的 GPIO 在上电后的初始状态都是输入模式,可以通过软件设为上拉或下拉,也可以设置为中断脚,驱动强度都是可编程的

 

 

 

 

GPIO引脚编号计算

  GPIO2_D3:64 + 24 + 3 = 91

  GPIO1_A3:30 + 0 + 3 = 35

 

  GPIO2_A2:64 + 0 + 2 = 66

  GPIO2_A3:64 + 0 + 3 = 67

  GPIO2_A5:64 + 0 + 5 = 69

 

  https://cdn.modb.pro/db/88436

 

 

编程示例

1.导出控制的GPIO引脚编号
    echo 22 > /sys/class/gpio/export
    
/*
 *    in           输入
 *    out          输出
 *    high, low    high/low同时设置方向为输出
 */ 
2.设置GPIO方向(out表示输出,in表示输入)
    echo out > /sys/class/gpio/gpio22/direction
        
/*
 * none            引脚为输入,不是中断引脚
 * rising          引脚为中断输入,上升沿触发
 * falling         引脚为中断输入,下降沿触发
 * both            引脚为中断输入,边沿触发
 */
3.设置GPIO中断触发方式
    echo none > /sys/class/gpio/gpio22/edge

4.设置GPIO输出电平(1表示高电平,0表示低电平)
    echo 1 > /sys/class/gpio/gpio22/value

5.取消导出        
    echo 22 > sys/class/gpio/unexport    
    
    
示例
    用户空间通过sysfs控制GPIO
        # echo 9 > /sys/class/gpio/export        // 执行此命令会在gpio/下生成gpio9目录
        # echo out > gpio9/direction              // 设置GPIO9方向为输出
        # echo 1 > gpio9/value                     // 设置GPIO9为高电平
        # echo 0 > gpio9/value                     // 设置GPIO9为低电平
        # echo 9 > /sys/class/gpio/unexport       // 关闭对GPIO9的控制

    
https:
//www.cnblogs.com/hellokitty2/p/10535903.html https://www.cnblogs.com/dakewei/p/12810536.html

 

 1 /*
 2  * GPIO初始化(GPIO描述符,GPIO引脚编号, GPIO方向) 
 3  */
 4 #define init_gpio(fd, a, direction) \
 5 {    \
 6     if(-1 == (fd = open("/sys/class/gpio/unexport", 1))) dbge();    \
 7     if(2 != write(fd, #a, 2)) dbge();     \
 8     close(fd); \
 9      \
10     if(-1 == (fd = open("/sys/class/gpio/export", 1))) dbge();        \
11     if(2 != write(fd, #a, 2)) dbge();     \
12     close(fd);     \
13     \
14     if(-1 == (fd = open("/sys/class/gpio/gpio"#a"/direction", 1))) dbge();      \
15     if(sizeof(#direction) != write(fd, #direction, sizeof(#direction))) dbge();     \
16     close(fd);      \
17     \
18     if(-1 == (fd = open("/sys/class/gpio/gpio"#a"/edge", 1))) dbge();      \
19     if(4 != write(fd, "none", 4)) dbge();     \
20     close(fd);      \
21     \
22     if(-1 == (fd = open("/sys/class/gpio/gpio"#a"/value", 2))) dbge();      \
23 } 
24 
25 
26 int fd;
27 init_gpio(fd, 66, in); 

 

 

 

 

 

posted @ 2022-01-26 17:44  迷人的危险~  阅读(901)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css