外设与接口
1. GPIO
1.1 简介
GPIO全称:通用型输入输出端口(General-purpose input/output)
Core3566 引脚分类:
- 电源引脚:5V,3.3V,GND(Ground)
- 常规GPIO控制引脚:可以通过编写程序控制这些引脚的高低电平
- 特殊GPIO通讯引脚: SPI 通讯,I2C 通讯,TXD/RXD 串口通讯
Core3566 有一个40针的扩展接头。

1.2 GPIO 编号计算
GPIO 有5个 bank,GPIO0 到 GPIO4,每个 bank 有32个 pin,命名如下:
GPIO0_A0 ~ A7
GPIO0_B0 ~ B7
GPIO0_C0 ~ C7
GPIO0_D0 ~ D7
GPIO1_A0 ~ A7
....
GPIO1_D0 ~ D7
....
GPIO4_D0 ~ D7对于 Linux 4.19 内核,GPIO 数量可以计算如下,以 GPIO4_C6(40PIN GPIO 上的 PIN40)为例:
GPIO4_C6 = 4*32 + 2*8 + 6 = 150
(A=0, B=1, C=2, D=3)
1.3 使用 GPIO sysfs 接口控制 I/O
设置 GPIO4_C6输出:
sudo su
cd /sys/class/gpio
echo 150 > export
cd gpio150
echo out > direction
echo 1 > value # 输出高
echo 0 > value # 输出低
1.4 使用 Python 程序控制 I/O
控制一颗 LED 交替闪烁。
from periphery import GPIO
import time
LED_Pin = 150 #Physical Pin-40 is GPIO 150
# Open GPIO /sys/class/gpio/gpio150 with output direction
LED_GPIO = GPIO(LED_Pin, "out")
while True:
try:
LED_GPIO.write(True)
time.sleep(0.5)
LED_GPIO.write(False)
time.sleep(0.5)
except KeyboardInterrupt:
LED_GPIO.write(False)
break
except IOError:
print ("Error")
LED_GPIO.close()运行程序:
linaro@linaro-alip:~$ sudo python3 test.py
1.5 使用 C 程序控制 I/O
下载并解压 C 程序文件,将文件上传到 Core3566 中(可以参考Samba文件共享)。
进入工程文件夹,在工程中有sysfs_gpio.c、sysfs_gpio.h、main.c 和 Makefile 四个文件:
linaro@linaro-alip:~$ cd Luckfox_GPIO_C && ls
main.c Makefile sysfs_gpio.c sysfs_gpio.h
linaro@linaro-alip:~/Luckfox_GPIO_C$在 sysfs_gpio.h 文件中定义了 Core3566 的引脚物理编码,并且在主函数 main.c 中调用,可根据自己需求修改:
#sysfs_gpio.h
....
#define GPIO7 111 // 7,111
#define UART2_TX 25 // 8,25
#define UART2_RX 24 // 10,24
#define GPIO11 104 //11,104
#define GPIO12 150 //12,150
#define GPIO13 116 //13,116
#define GPIO15 117 //15,117
#define GPIO16 97 //16,97
#define GPIO18 98 //18,98
#define SPI1_MOSI 113 // 19,113
#define SPI1_MISO 114 // 21,114
#define GPIO22 99 //22,99
#define SPI1_CLK 115 //23,115
#define SPI1_CS0 100 //24,100
#define SPI1_CS1 101 //26,101
#define GPIO29 112 //29,112
#define GPIO31 148 //31,148
#define GPIO32 106 //32,106
#define GPIO33 105 //33,105
#define GPIO35 149 //35,149
#define GPIO36 102 //36,102
#define GPIO37 103 //37,103
#define GPIO38 147 //38,147
#define GPIO40 146 //40,146
....
#main.c
....
int x[25] = {GPIO7, UART2_TX , UART2_RX , GPIO11, GPIO12, GPIO13, GPIO15, GPIO16, \
GPIO18, SPI1_MOSI, SPI1_MISO, GPIO22, SPI1_CLK , SPI1_CS0, SPI1_CS1, \
GPIO29 ,GPIO31 ,GPIO32 ,GPIO33 ,GPIO35 ,GPIO36 ,GPIO37 ,GPIO38 ,GPIO40};
....编译程序:
linaro@linaro-alip:~$ sudo make
cc -c sysfs_gpio.c -o sysfs_gpio.o
cc -c main.c -o main.o
cc sysfs_gpio.o main.o -o sysfs_gpio运行程序,可以在终端上查看 GPIO信息,并逐个点亮和熄灭LED:
linaro@linaro-alip:~/Luckfox_GPIO_C$ sudo ./sysfs_gpio
Debug: Export: Pin111
Debug: Pin111:Output
Debug: Export: Pin25
Debug: Pin25:Output
Debug: Export: Pin24
Debug: Pin24:Output
Debug: Export: Pin104
Debug: Pin104:Output
....