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);