Nov 10, 2022, 6:53 AM

40PIN连接器除了debug串口和I2C6,其它都可以用作通用IO。所有的GPIO都支持中断、上下拉和驱动强度配置。

GPIO列表

PIN序号 GPIO编号 节点编号 默认状态 IO电平
3 GPIO0_D5 29 UP TTL 3.3V
5 GPIO0_D4 28 UP TTL 3.3V
7 GPIO1_B7 47 UP TTL 3.3V
11 GPIO4_A0 128 DOWN TTL 3.3V
13 GPIO4_A1 129 DOWN TTL 3.3V
15 GPIO4_A2 130 DOWN TTL 3.3V
19 GPIO1_B2 42 DOWN TTL 3.3V
21 GPIO1_B1 41 DOWN TTL 3.3V
23 GPIO1_B3 43 DOWN TTL 3.3V
29 GPIO4_A3 131 DOWN TTL 3.3V
31 GPIO4_A4 132 DOWN TTL 3.3V
33 GPIO4_A5 133 DOWN TTL 3.3V
35 GPIO4_A6 134 DOWN TTL 3.3V
37 GPIO4_A7 135 DOWN TTL 3.3V
12 GPIO1_A7 39 UP TTL 3.3V
16 GPIO1_A1 33 DOWN TTL 3.3V
18 GPIO1_A0 30 DOWN TTL 3.3V
22 GPIO1_B0 40 UP TTL 3.3V
24 GPIO1_B4 44 UP TTL 3.3V
26 GPIO1_B5 45 UP TTL 3.3V
32 GPIO3_B1 105 UP TTL 3.3V
36 GPIO4_B2 106 UP TTL 3.3V
38 GPIO4_B3 107 UP TTL 3.3V
40 GPIO3_C3 115 UP TTL 3.3V

测试命令

向内核申请GPIO,写入对应的GPIO值直接申请,比如申请控制GPIO4A0,则使用命令:

echo 128 > /sys/class/gpio/export

写入后,可以看到已经生成节点:

/sys/class/gpio/gpio128/

相应gpio节点下面的接口,比如GPIO4A0:

root@ubuntu:~# ll /sys/class/gpio/gpio128/
total 0
drwxr-xr-x 3 root root    0 Nov 21 15:23 ./
drwxr-xr-x 3 root root    0 Nov 21 15:23 ../
-rw-r--r-- 1 root root 4096 Nov 21 15:24 active_low
lrwxrwxrwx 1 root root    0 Nov 21 15:24 device -> ../../../gpiochip4/
-rw-r--r-- 1 root root 4096 Nov 21 15:24 direction
-rw-r--r-- 1 root root 4096 Nov 21 15:24 edge
drwxr-xr-x 2 root root    0 Nov 21 15:24 power/
lrwxrwxrwx 1 root root    0 Nov 21 15:24 subsystem -> ../../../../../../class/gpio/
-rw-r--r-- 1 root root 4096 Nov 21 15:23 uevent
-rw-r--r-- 1 root root 4096 Nov 21 15:24 value

设置GPIO4A0为输出口

root@ubuntu:/sys/class/gpio/gpio128# echo out >direction 
root@ubuntu:/sys/class/gpio/gpio128# cat direction 
out

设置输出高电平

root@ubuntu:/sys/class/gpio/gpio128# cat value 
0
root@ubuntu:/sys/class/gpio/gpio128# echo 1 >value 
root@ubuntu:/sys/class/gpio/gpio128# cat value 
1
实际万用表测试PIN 11输出的电压为3.3V

备注:

  • direction: 参数为“out”(输出)和“in”(输入),可读可写;

  • value: 参数为“0”(低电平)和“1”(高电平),可读可写;

  • edge:可以监听对应引脚的事件,需要把direction设置为输入
    参数为”none”(无中断触发), “rising”(上升沿触发), “falling”(下降沿触发), “both”(上升、下降都沿触发),用户层可以使用poll,设置events为POLLPRI | POLLERR等待事件触发,当对应的模式触发后,会返回事件的消息,此时需要读取value值,以表示改触发已经处理,否则会一直poll到原事件;

  • active_low:此值可以反转value中的值;