LOFT-Q GPIO 使用¶
组织: | Mixtile Team |
---|---|
版本: | 0.1 |
日期: | 2015.07.07 |
内容
LOFT-Q 提供了众多的 GPIO 口用于开发者根据自己的需要进行扩展。不过这些 GPIO 的使用需要配合具体的扩展板才能使用。
对于 GPIO 的使用需要在内核中启用相关的配置,然后就可以在应用程序中使用相关的 GPIO 进行操作。
介绍¶
LOFT-Q 提供了 3 个 FPC 座子,分别为 J4, J5, J6,其中每个提供 60 针的 GPIO 支持,所有合计有 180 针的 GPIO 可供使用。具体的每个针脚的说明可以参考 GPIO 引脚说明 。如下图为 LOFT-Q 各个部分的简略图,其中有关 GPIO 的对照如下:
- 2 Expansion CSI/MIPI-DSI 为摄像头所用 IO 口,也可以作为通用 GPIO 使用。
- 3 Expansion LVDS 为显示屏,触摸屏所用 IO 口,也可以作为通用 GPIO 使用。
- 5 Expansion CSPIO 包含一些可用作 SPI,UART,I2C 等接口的 GPIO, 以及通用的 GPIO。
GPIO 引脚说明¶
EXPANSION CSI/MIPI‐DSI — J4¶
引脚号 | 功能 | 引脚号 | 功能 |
---|---|---|---|
1 | CSI-D0 | 2 | CSI-D1 |
3 | CSI-D2 | 4 | CSI-D3 |
5 | CSI-D4 | 6 | CSI-D5 |
7 | CSI-D6 | 8 | CSI-D7 |
9 | CSI-D8 | 10 | CSI-D9 |
11 | CSI-D10 | 12 | CSI-D11 |
13 | GND | 14 | CSI-HSYNC |
15 | CSI-VSYNC | 16 | TWI0-SCK |
17 | TWI0-SDA | 18 | GND |
19 | CSI-MCLK | 20 | CSI-PCLK |
21 | GND | 22 | VDD1V8-CSI |
23 | VDD1V8-CSI | 24 | GND |
25 | VCC-5V | 26 | VCC-5V |
27 | GND | 28 | VCC-3V3 |
29 | VCC-3V3 | 30 | GND |
31 | MCSI-MCLK | 32 | NC |
33 | NC | 34 | GND |
35 | DSI-D0N | 36 | DSI-D0P |
37 | GND | 38 | DSI-D1N |
39 | DSI-D1P | 40 | GND |
41 | DSI-D2N | 42 | DSI-D2P |
43 | GND | 44 | DSI-D3N |
45 | DSI-D3P | 46 | GND |
47 | DSI-CKN | 48 | DSI-CKP |
49 | GND | 50 | SPDIF-IN |
51 | SPDIF-OUT | 52 | GND |
53 | I2S1-DIN | 54 | I2S1-BCLK |
55 | I2S1-LRCK | 56 | I2S1-MCLK |
57 | EARGND2 | 58 | LRADC0 |
59 | EARGND2 | 60 | LRADC1 |
EXPANSION GPIO — J5¶
引脚号 | 功能 | 引脚号 | 功能 |
---|---|---|---|
1 | VCC-5V | 2 | VCC-5V |
3 | GND | 4 | VCC-LCD |
5 | VCC-LCD | 6 | GND |
7 | UART4-TX | 8 | UART4-RX |
9 | GND | 10 | VCC-JTAG |
11 | VCC-JTAG | 12 | AP-RESET# |
13 | TMS0 | 14 | TCK0 |
15 | TDO0 | 16 | TDI0 |
17 | JTAG-SEL0 | 18 | GND |
19 | SPI0-MOSI | 20 | SPI0-MISO |
21 | SPI0-CLK | 22 | SPI0-CS0 |
23 | GND | 24 | CSI2-D0N |
25 | CSI2-D0P | 26 | GND |
27 | CSI2-D1N | 28 | CSI2-D1P |
29 | GND | 30 | CSI2-D2N |
31 | CSI2-D2P | 32 | GND |
33 | CSI2-D3N | 34 | CSI2-D3P |
35 | GND | 36 | DSI-D0P |
37 | CSI2-CKP | 38 | GND |
39 | TWI3-SCK | 40 | TWI3-SDA |
41 | GND | 42 | MCS-MCLK1 |
43 | GND | 44 | CAM-R-STBY-EN |
45 | CAM-R-RESET# | 46 | GND |
47 | PH0 | 48 | PH1 |
49 | PH2 | 50 | PH3 |
51 | PH4 | 52 | PH5 |
53 | PH6 | 54 | PH7 |
55 | PH8 | 56 | PH29 |
57 | PH30 | 58 | GND |
59 | USB-DP0 | 60 | USB-DM0 |
EXPANSION LVDS — J6¶
引脚号 | 第一功能 | 第二功能 | 引脚号 | 第一功能 | 第二功能 |
---|---|---|---|---|---|
1 | LVDS0-D0P | LCD0-D0 | 2 | LVDS0-D0N | LCD0-D1 |
3 | GND | 4 | LVDS0-D1P | LCD0-D2 | |
5 | LVDS0-D1N | LCD0-D3 | 6 | GND | |
7 | LVDS0-D2P | LCD0-D4 | 8 | LVDS0-D2N | LCD0-D5 |
9 | GND | 10 | LVDS0-CLKP | LCD0-D6 | |
11 | LVDS0-CLKN | LCD0-D7 | 12 | GND | |
13 | LVDS0-D3P | LCD0-D8 | 14 | LVDS0-D3N | LCD0-D9 |
15 | GND | 16 | LVDS1-D0P | LCD0-D10 | |
17 | LVDS1-D0N | LCD0-D11 | 18 | GND | |
19 | LVDS1-D1P | LCD0-D12 | 20 | LVDS1-D1N | LCD0-D13 |
21 | GND | 22 | LVDS1-D2P | LCD0-D14 | |
23 | LVDS1-D2N | LCD0-D15 | 24 | GND | |
25 | LVDS1-CLKP | LCD0-D16 | 26 | LVDS1-CLKN | LCD0-D17 |
27 | GND | 28 | LVDS1-D3P | LCD0-D18 | |
29 | LVDS1-D3N | LCD0-D19 | 30 | GND | |
31 | LCD0-D20 | 32 | LCD0-D21 | ||
33 | LCD0-D22 | 34 | LCD0-D23 | ||
35 | LCD0-CLK | 36 | LCD0-HSYNC | ||
37 | LCD0-DE | 38 | LCD0-VSYNC | ||
39 | LCD-PWM | 40 | LCD-BL-EN | ||
41 | GND | 42 | CTP-WAKE | ||
43 | CTP-INT | 44 | TWI1-SCK | ||
45 | TWI1-SDA | 46 | GND | ||
47 | RTP-X1 | 48 | RTP-X2 | ||
49 | RTP-Y1 | 50 | RTP-Y2 | ||
51 | GND | 52 | VCC2V8-LCD | ||
53 | VCC2V8-LCD | 54 | VCC2V8-LCD | ||
55 | GND | 56 | VCC1V8-LCD | ||
57 | VCC1V8-LCD | 58 | GND | ||
59 | VCC-5V | 60 | VCC-5V |
GPIO 内核配置¶
Note
本节中所说的内核配置针对全志提供的旧版内核,而非主流内核。不过方法相同。
在用户应用使用 GPIO 之前,需要在内核中配置 GPIO 的 sysfs 支持。具体的配置方式如下:
Device Drivers --->
GPIO Support --->
/sys/class/gpio/... (sysfs interface)
在内核中,启用上述配置即可,默认在 arch/arm/configs/loftq_linux_defconfig 中已经启用了该配置。
GPIO 使用示例¶
使用上述配置生成的内核,然后可以在应用中通过下面的示例进行测试。下面分别是通过命令行和C语言进行访问和测试的方法,基本的过程如下:
根据 GPIO 名称计算实际对应的 gpio 编号
全志方案的 gpio 编号计算方式: (第二个字母在字母序列中的位置 - 1) x 32 + 针口编号 。例如 PC13 或者 pc13 ,那么它的计算方式分别如下:
pc13 的编号计算: (‘c’-‘a’)*32 + 13 ,结果为 77
PC13 的编号计算: (‘C’-‘A’)*32 + 13 ,结果为 77
导出 GPIO 访问路径和接口
设置 GPIO 使用方式为输入或者输出
GPIO 读取或者写入访问
取消 GPIO 导出
命令行访问和测试¶
我们以 “PC13” 为例作为测试。首先是确定其实际的 gpio 编号。根据前面介绍中的计算方式,可以知道 “PC13” 的 GPIO 编号为 77 。
导出 GPIO 访问路径命令:
echo 77 > /sys/class/gpio/export
设置 GPIO 访问方式,输入或者输出,前一个为设置为输出模式,后一个设置为输入模式:
echo "out" > /sys/class/gpio/gpio77/direction
echo "in" > /sys/class/gpio/gpio77/direction
如果设置为输出模式,下述分别为将 GPIO 设置为高和低的输出:
echo 1 > /sys/class/gpio/gpio77/value
echo 0 > /sys/class/gpio/gpio77/value
如果设置为输入模式,可以通过下属命令读取当前 GPIO 的状态:
cat /sys/class/gpio/gpio77/value
取消 GPIO 导出:
echo 77 > /sys/class/gpio/unexport
更多参考¶
linux-sunxi 社区 GPIO 使用: http://linux-sunxi.org/GPIO