目录
GPIO接口
简介
GPIO(General-Purpose Input/Output) 指通用输入输出口。在软件运行期间能够动态配置和控制的通用引脚,实现某时刻电平状态的输出与输入,即可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。除了通用输入输出功能外,还可能有上拉、下拉、中断或其它复用功能。
合宙Cat.1模块具有多种不同的GPIO接口,部分GPIO口同时可复用为其他功能,并且模块的GPIO管脚输入输出电压能力按照不同的电压域区分,特珠管脚的使用需要打开对应的电压域方能使用。
GPIO接口控制
GPIO的库由底层core实现,相关API接口如下:
API接口 | 描述 |
---|---|
pins.setup() | GPIO接口配置,配置使用管脚,模式 |
详细的API介绍见pins API章节
相关硬件接口
Air724UG模块引脚共支持28个GPIO,部分引脚上电前后状态不同,如使用这些管脚,需根据实际情况使用。
管脚定义:
VLCD、VMMC、VSIM1相关引脚电压域会根据外部硬件,其内部自动调整其输出电压,为1.8V/3V/3.3V
At reset, after reset 都默认指的就是function 0功能的状态(即GPIO 配置还没生效前的状态)
GPIO0~5 电源域默认关闭,所以at reset, after reset状态都是L
GPIO29~31电源域默认关闭,所以at reset, after reset状态都是L
Pin State | Function 0 | Function 1 | Function 2 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Air724UG PIN NO. | GPIO number | Name | At Reset(H/L/Hiz) | After Reset(H/L/Hiz) | Power Domain | Pull-up | Pull-Down | Function 0 | Type | Function 1 | Type | Function 2 | Type | ||
41 | GPIO_0 | LCD_DATA/GPIO_0 | INPUT | L | INPUT | L | VLCD(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_0 | I/O | LCD_DATA | O | ||
58 | GPIO_1 | LCD_DC/NET_STATUS/GPIO_1 | INPUT | L | INPUT | L | VLCD(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_1 | I/O | LCD_DC | O | NET_STATUS | O |
40 | GPIO_2 | LCD_CLK/AP_WAKEUP_MODULE/GPIO_2 | INPUT | L | INPUT | L | VLCD(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_2 | I/O | LCD_CLK | O | AP_WAKEUP_MODULE | I |
39 | GPIO_3 | LCD_CS/WAKEUP_OUT/GPIO_3 | INPUT | L | INPUT | L | VLCD(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_3 | I/O | LCD_CS | O | WAKEUP_OUT | O |
57 | GPIO_4 | LCD_SEL/NET_MODE/GPIO_4 | INPUT | L | INPUT | L | VLCD(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_4 | I/O | LCD_SEL | O | NET_MODE | O |
49 | GPIO_5 | MODULE_STATUS/GPIO_5 | INPUT | L | INPUT | L400ms后,由底层软件控制为OUTPUT变H(3029版本默认输出低电平) | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_5 | I/O | MODULE_STATUS | O | ||
52 | GPIO_9 | SPI1_CLK/GPIO_9 | INPUT | L | INPUT | L | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_9 | I/O | SPI1_CLK | I/O | ||
54 | GPIO_10 | SPI1_CS/GPIO_10 | INPUT | L | INPUT | L | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_10 | I/O | SPI1_CS | I/O | ||
55 | GPIO_11 | SPI1_DOUT/GPIO_11 | INPUT | L | INPUT | L | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_11 | I/O | SPI1_DOUT | I/O | ||
53 | GPIO_12 | SPI1_DIN/GPIO_12 | INPUT | L | INPUT | L | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_12 | I/O | SPI1_DIN | I/O | ||
43 | GPIO_13 | GPIO_13 | INPUT | L | INPUT | L | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_13 | I/O | ||||
32 | GPIO_14 | I2C2_SCL/GPIO_14 | INPUT | L | INPUT | L | VDDIO(1.8V) | 20K/1.8K | 40K | GPIO_14 | I/O | I2C2_SCL | O | ||
31 | GPIO_15 | I2C2_SDA/GPIO_15 | INPUT | L | INPUT | L | VDDIO(1.8V) | 20K/1.8K | 40K | GPIO_15 | I/O | I2C2_SDA | I/O | ||
50 | GPIO_17 | CAMI2C_SDA1/GPIO_17 | INPUT | H | INPUT | H | VDDIO(1.8V) | 20K/1.8K | 40K | GPIO_17 | I/O | CAMI2C_SDA1 | I/O | ||
38 | GPIO_18 | UART1_CTS/GPIO_18 | INPUT | L | INPUT | L | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_18 | I/O | UART1_CTS | I | ||
37 | GPIO_19 | UART1_RTS/GPIO_19 | INPUT | L | INPUT | L | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_19 | I/O | UART1_RTS | O | ||
3 | GPIO_20 | UART2_RXD/GPIO_20 | INPUT | L | OUTPUT | L 5ms后变为H | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_20 | I/O | UART2_RXD | I | ||
4 | GPIO_21 | UART2_TXD/GPIO_21 | INPUT | L | OUTPUT | 输出log, 不建议使用 | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_21 | I/O | UART2_TXD | O | ||
7 | GPIO_22 | ZSP_UART_TXD/GPIO_22 | INPUT | L | OUTPUT | L 5ms后变为H | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_22 | I/O | ZSP_UART_TXD | O | ||
8 | GPIO_23 | USIM_CD/GPIO_23 | INPUT | L | OUTPUT | 输出log, 不建议使用 | VDDIO(1.8V) | 20K/4.7K | 40K | GPIO_23 | I/O | USIM_CD | I | ||
27 | GPIO_24 | MMC1_CMD/GPIO_24 | INPUT | H | INPUT | H | VMMC(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_24 | I/O | MMC1_CMD | I/O | ||
29 | GPIO_25 | MMC1_DAT0/GPIO_25 | INPUT | H | INPUT | H | VMMC(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_25 | I/O | MMC1_DAT0 | I/O | ||
30 | GPIO_26 | MMC1_DAT1/GPIO_26 | INPUT | H | INPUT | H | VMMC(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_26 | I/O | MMC1_DAT1 | I/O | ||
25 | GPIO_27 | MMC1_DAT2/GPIO_27 | INPUT | H | INPUT | H | VMMC(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_27 | I/O | MMC1_DAT2 | I/O | ||
26 | GPIO_28 | MMC1_DAT3/GPIO_28 | INPUT | H | INPUT | H | VMMC(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_28 | I/O | MMC1_DAT3 | I/O | ||
69 | GPIO_29 | SIM1_CLK/GPIO_29 | OUTPUT | L | OUTPUT | L | VSIM1(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_29 | I/O | SIM1_CLK | O | ||
70 | GPIO_30 | SIM1_DATA/GPIO_30 | INPUT | L | INPUT | L | VSIM1(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_30 | I/O | SIM1_DATA | I/O | ||
71 | GPIO_31 | SIM1_RST/GPIO_31 | OUTPUT | L | OUTPUT | L | VSIM1(1.8V/3V/3.3V) | 20K/4.7K/1.8K | 50K | GPIO_31 | I/O | SIM1_RST | O |
GPIO使用示例
GPIO 的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下:
- 配置操作的GPIO接口管脚及工作模式。
- 在代码运行中操作GPIO口工作状态。
module(...,package.seeall)
require"pins"
--[[
有些GPIO需要打开对应的ldo电压域才能正常工作,电压域和对应的GPIO关系如下
pmd.ldoset(x,pmd.LDO_VSIM1) -- GPIO 29、30、31
pmd.ldoset(x,pmd.LDO_VLCD) -- GPIO 0、1、2、3、4
--注意:
--Air724 A11以及之前的开发板丝印有误:
--丝印中的IO_0、IO_1、IO_2、IO_3、IO_4并不对应GPIO0、1、2、3、4
--丝印中的LCD_DIO、LCD_RS、LCD_CLK、LCD_CS对应GPIO0、1、2、3;模块的LCD_SEL引脚对应GPIO4
pmd.ldoset(x,pmd.LDO_VMMC) -- GPIO 24、25、26、27、28
x=0时:关闭LDO
x=1时:LDO输出1.716V
x=2时:LDO输出1.828V
x=3时:LDO输出1.939V
x=4时:LDO输出2.051V
x=5时:LDO输出2.162V
x=6时:LDO输出2.271V
x=7时:LDO输出2.375V
x=8时:LDO输出2.493V
x=9时:LDO输出2.607V
x=10时:LDO输出2.719V
x=11时:LDO输出2.831V
x=12时:LDO输出2.942V
x=13时:LDO输出3.054V
x=14时:LDO输出3.165V
x=15时:LDO输出3.177V
]]
local level = 0
--GPIO18配置为输出,默认输出低电平,可通过setGpio18Fnc(0或者1)设置输出电平
local setGpio18Fnc = pins.setup(pio.P0_18,0)
sys.timerLoopStart(function()
level = level==0 and 1 or 0
setGpio18Fnc(level)
log.info("testGpioSingle.setGpio18Fnc",level)
end,1000)
--GPIO19配置为输入,可通过getGpio19Fnc()获取输入电平
local getGpio19Fnc = pins.setup(pio.P0_19)
sys.timerLoopStart(function()
log.info("testGpioSingle.getGpio19Fnc",getGpio19Fnc())
end,1000)
--pio.pin.setpull(pio.PULLUP,pio.P0_19) --配置为上拉
--pio.pin.setpull(pio.PULLDOWN,pio.P0_19) --配置为下拉
--pio.pin.setpull(pio.NOPULL,pio.P0_19) --不配置上下拉
function gpio13IntFnc(msg)
log.info("testGpioSingle.gpio13IntFnc",msg,getGpio13Fnc())
--上升沿中断
if msg==cpu.INT_GPIO_POSEDGE then
--下降沿中断
else
end
end
--GPIO13配置为中断,可通过getGpio13Fnc()获取输入电平,产生中断时,自动执行gpio13IntFnc函数
getGpio13Fnc = pins.setup(pio.P0_13,gpio13IntFnc)
常见问题
-
例:为什么GPIO4管脚操作没反应?
答:GPIO4管脚为VCC_LCD电压域,需要先配置pmd.ldoset(2,pmd.LDO_VLCD)打开,才能正常操作该管脚。
相关资料以及购买链接
来自转载:https://doc.openluat.com/wiki/21?wiki_page_id=1945