GPIO/AGPIO/AGPIOWU/WAKEUP

1、模组管脚;
-
上图虚线所示的管脚,都可看做传统意义上的GPIO(WAKEUP只能做中断输入,此处也以GPIO名义进行说明),只是管脚名只写了推荐的默认功能,但其实都可以复用为GPIO功能;
-
这些IO管脚,不只是可用作GPIO,也可以用作其它数字信号,比如UART、SPI、I2C、OneWire、PWM、LCD接口、Camera接口、CAN接口、USB_BOOT使能等,详见下图; Air780EPM&EHM&EHV&EGH&EGG&EGP&EHN&EHU_GPIO复用表_20251128.xlsx

-
本章节仅介绍这些IO作为GPIO、AGPIO、WAKEUP、AGPIOWU四类GPIO性质时的功能,其它复用功能将在后续的章节中进行介绍;
-
GPIO,或者叫做普通GPIO,也就是VDD_EXT电压域下的GPIO,也就是在低功耗模式pm.WORK_MODE,1 和 PSM+模式pm.WORK_MODE,3 下无法保持固定电平状态(高电平/低电平)输出的GPIO;
说明!
a. 无法保持固定电平状态(高电平/低电平)输出,原因是其电压域VDD_EXT是间歇性输出,所以该电压域下的GPIO在VDD_EXT没有输出的时间周期下为高阻态,这种情况下如果想要固定在某一个电平状态,可以通过上拉或下拉实现,上拉时可选择Vref电平,详见第十五章节的介绍;
b. PIN82,USB_BOOT,在开机前默认为BOOT使能,Boot from UART or USB or Flash,开机后可以用作GPIO0,但由于USB_BOOT的特殊性,因此复用为GPIO0的功能LuatOS尚未开放,详细介绍请见第六章节;

- AGPIO,或者叫做AONGPIO,也就是Always ON GPIO,也就是LDO_AON电压域下的GPIO,也就是在低功耗模式pm.WORK_MODE,1 和 PSM+模式pm.WORK_MODE,3 下都可以保持固定电平状态(高电平/低电平)输出的GPIO;

- WAKEUP,顾名思义是中断唤醒的"GPIO",之所以加引号,是因为这一类"GPIO"只能用于输入,并不是严格意义上的GPIO,WAKEUP信号工作在LDO_1.8V下(下图所示的PWRKEY除外);
说明!
a. PWRKEY不是工作在LDO_AON下,我们在第三章节已详细介绍,但PWRKEY在开机后的功能和操作与WAKEUP类似,因此在本章节也将其作为WAKEUP功能进行介绍;
b. 合宙的模组,3个WAKEUP一般的处理是:WAKEUP0引出到模组管脚供用户自由使用;WAKEUP2引出的模组管脚但推荐用作USIM_DET,当然也可以自定义使用;WAKEUP1模组内部固定用作USB插入检测使用(模组VBUS管脚,经过电压分压后,接WAKEUP1),不能再自定义为其它中断;

- AGPIOWU,简单说就是AGPIO+WAKEUP,既可以配置为AGPIO,也可以配置为WAKEUP;
当配置为AGPIO功能时,其电压域为LDO_AON,可以通过pm.ioVol()配置电平为1.8V/2.8V/3.3V;
当配置为WAKEUP功能时,其电压域为LDO_1.8V,固定为1.8V;

2、功能说明;
首先,我们再看下各类型GPIO和其所处电压域的对应关系;
合宙4G Cat.1模组电源域与GPIO20251128.xlsx

普通GPIO

- 从GPIO号来看,对应GPIO0-19和GPIO29-38,共30个普通GPIO;
- 从所属电压域来看,普通GPIO由VDD_EXT负责供电;
- VDD_EXT最大电流输出能力是200mA,对应本电压域下的每个GPIO,最大负载电流大约6mA@1.8V,14mA@3.3V,但是所有普通驱动电流总和不能超过200mA;
- 如果VDD_EXT需要给外设供电,需要控制总电流消耗不超过50mA,以免VDD_EXT电压域下的这类普通GPIO性能受到影响甚至无法正常工作,且此时给全部普通GPIO可提供的电流总和将降为150mA;
- 普通GPIO在"低功耗模式pm.WORK_MODE,1"下会处于间歇性掉电和间歇性输出相互切换的状态,掉电频率与通信协议要求的时间间隔相同,通常为0.64S/1.28S/2.56S中的一个;
- 普通GPIO在"低功耗模式pm.WORK_MODE,1"下无法保持固定电平状态(高电平/低电平)输出,原因是其电压域VDD_EXT是间歇性输出,所以该电压域下的GPIO在VDD_EXT没有输出的时间周期下为高阻态,这种情况下如果想要固定在某一个电平状态,可以通过上拉或下拉实现,上拉时可选择Vref电平,详见第十五章节的介绍;
- 普通GPIO在PSM+模式(pm.WORK_MODE,3)下会处于完全掉电状态,这种情况下如果想要固定在某一个电平状态,可以通过上拉或下拉实现,上拉时可选择Vref电平;
- 普通GPIO配置为GPIO中断功能时,跟所有WAKEUP中断一样都支持双边沿中断,也都支持软件配置内部上下拉,也都支持软件取消内部上下拉而使用外部上下拉;
- 休眠状态下,低功耗模式pm.WORK_MODE,1/PSM+模式pm.WORK_MODE,3 ,只能通过WAKEUP0-2,AGPIOWU0-2配置为WAKEUP3/4/5,PWRKEY,CHRG_DET,UART1(LPUART)这几个中断输入源可以将模组唤醒,普通GPIO中断在休眠模式下无法唤醒模组;
- GPIO0默认用作USB_BOOT,LuatOS没有开放其可以配置作为GPIO0使用的功能;
- 普通GPIO在上电或Reset复位时可能会有1ms左右的异常高电平,加下拉电阻(10K)可消除;

AGPIO

a. AGPIO0-8,从GPIO号来看,对应GPIO20-28,共9个AGPIO;
其中,GPIO20/21/22三个为AGPIOWU,相对GPIO23-28有特殊特点,因此AGPIOWU会在下面的小章节里会详细介绍;
本章节AGPIO特指的是GPIO23-28,即GPIO23/24/25/26/27/28这6个AGPIO;
b. 从所属电压域来看,AGPIO由LDO_AON负责供电;
说明!LDO_AON仅供内部使用,并未引出到模组管脚上;
c. LDO_AON的总电流输出能力为10mA,对应AGPIO可以分配到的电流能力上限是5mA;AGPIO3-8驱动能力单管脚<=5mA, 但所有AGPIO驱动电流总和也不能超过5mA;;
d. AGPIO3-8,分别对应GPIO23-28,常规模式(pm.WORK_MODE,0)和休眠状态(pm.WORK_MODE,1 和 pm.WORK_MODE,3)下都可以保持固定电平(固定为高或固定为低)输出;
e. AGPIO3-8,既可以作为AGPIO使用(即GPIO输入输出功能),也可以配置为GPIO中断输入;
f. AGPIO3-8虽然在 低功耗模式pm.WORK_MODE,1/PSM+模式pm.WORK_MODE,3 下可以保持固定电平(固定为高或固定为低)输出,但配置为GPIO中断功能时,是无法在 低功耗模式pm.WORK_MODE,1/PSM+模式pm.WORK_MODE,3 下触发中断的;
g. AGPIO3-8,配置为中断输入功能时,跟所有WAKEUP中断一样都支持双边沿中断,也都支持软件配置内部上下拉,也都支持软件取消内部上下拉而使用外部上下拉;
h. 休眠状态下,低功耗模式pm.WORK_MODE,1/PSM+模式pm.WORK_MODE,3 ,只能通过WAKEUP0-2,AGPIOWU0-2配置为WAKEUP3/4/5,PWRKEY,CHRG_DET,UART1(LPUART)这几个中断输入源可以将模组唤醒,普通GPIO中断在休眠模式下无法唤醒模组;
i. AGPIO3-8 在上电或Reset复位时可能会有1ms左右的异常高电平,可通过加下拉电阻(10K)消除;

j. AGPIO3,即GPIO23,通常会被拿来用作"Vref",其作用将在接下来的第十五章节进行详细描述;
另外,在某些具体的型号中,比如Air780EGP/EGG/EGH三款通信定位二合一的模组型号中,GPIO23均被内部占用且有一些限制使用的场景;
Air780EGP和Air780EGG这两个型号,内置G-Sensor后,必然会暂用系统的资源,比如G-Sensor的供电控制,比如G-Sensor判断振动后的中断输入,比如I2C1的占用等;
对于Air780EGP和Air780EGG这两个型号,I2C1内部挂载了G-Sensor,如果还需要在模组外部挂载其它外设时,比如摄像头,此时务必要保持GPIO23为默认的输出高状态,不可将GPIO23改为输出低的状态,否则会影响该I2C1总线的正常初始化;
以下是Air780EGP/Air780EGG两款模组中内部占用的信号管脚,以及对应的详细说明;
| 管脚 | 信号 | Air780EGH | Air780EGPAir780EGG | |
|---|---|---|---|---|
| PIN107 | GPIO21 | ✅ | ✅ | 内部用于主控芯片打开和关闭GNSS芯片 |
| PIN28/29 | UART2 | ✅ | ✅ | 内部用于主控芯片与GNSS芯片通信用 |
| PIN99 | GPIO23(Vref) | ✅ | ✅ | Air780EGH内部用于GNSS芯片的后备供电,以便星历保持,在需要时热启动 Air780EGP/Air780EGG除给GNSS芯片后备供电外,还给G-Sensor供电 |
| PIN66/67 | I2C1 | 未被占用 | ✅ | Air780EGH内部没有占用,可作为I2C1供外部自由使用,也可复用为其它功能 Air780EGP/EGG内部将此管脚作为I2C1挂载了G-Sensor,因此外部只可作为I2C1使用,且不能与内部G-Sensor的I2C地址0x27冲突,且外部使用I2C1时需保持GPIO23为默认输出高的状态,不可将GPIO23改为输出低的状态,否则会影响该I2C1总线的正常初始化; |
| PIN79 | WAKEUP2(USIM_DET) | 未被占用 | ✅ | Air780EGH与Air780EPM/EHV等一样,供外部用作SIM卡热插拔检测 Air780EGP/EGG内部将此管脚用作了G-Sensor振动时的中断输入,外部不可再用 |
WAKEUP

a. WAKEUP,共有WAKEUP0/1/2三个,其中,WAKEUP1在模组内部固定用作USB插入唤醒(VBUS通过分压接到WAKEUP1),所以,用户实际可使用的WAKEUP只有WAKEUP0和WAKEUP2;
b. WAKEUP0和WAKEUP2中,WAKEUP2在合宙大部分模组型号上通常被命名为USIM_DET,也就是默认推荐用作SIM卡插入检测,但是,这个管脚仍然可以自定义使用,并不是只能用作SIM卡插入检测;
-
说明!
-
虽然WAKEUP2被推荐默认用作USIM_DET,但LuatOS底层固件里并没有将WAKEUP2与SIM卡插入检测做固定关联,也就是说,WAKEUP2作为USIM_DET使用时的中断逻辑,需要自己写代码实现,比如,WAKEUP2默认为高,由高变低时SIM卡插入;
-
在Air780EGP/EGG两款内置内置G-Sensor的模组型号中,WAKEUP2被内部占用固定用作G-Sensor的中断输入,外部不可再用;
c. WAKEUP0/1/2,属于LDO_1.8V电压域,LDO_1.8V的电压固定1.8V不可更改;
d. 除WAKEUP外,PWRKEY和CHG_DET在开机后也可以用作中断输入使用,所以,PWRKEY和CHG_DET通常也被拿来与WAKEUP一起介绍,其中:
-
PWRKEY在第三章节已进行介绍,CHG_DET因为未在Air780EPM/EHM引出来所以暂未介绍,可以简单的将CHG_DET和PWRKEY当做完全一样的功能即可(开机前:用作开机键;开机后:用作WAKEUP中断输入);
-
PWRKEY的电压域为VBAT,CHG_DET电压域与WAKEUP一样都是LDO_1.8V;
e. WAKEUP内部上拉/下拉可配置(上拉/下拉电阻250K左右),在休眠模式下可保持配置状态;
f. 常规模式(pm.WORK_MODE,0)和休眠状态下(低功耗模式pm.WORK_MODE,1 和 PSM+模式pm.WORK_MODE,3)都可实现中断输入,不可用于输出;
在PSM+模式pm.WORK_MODE,3 下,模组可以被WAKEUP中断唤醒,具体是由哪一个WAKEUP管脚唤醒可以由pm.lastReson()函数确认;
https://docs.openluat.com/osapi/core/pm/#45-pmlastreson

g. WAKEUP管脚内部上下拉非常弱,驱动能力<30uA,外部上下拉电阻建议选择100K阻值;
h. 所有WAKEUP中断和GPIO中断都支持双边沿中断,也都支持软件配置内部上下拉,也都支持软件取消内部上下拉而使用外部上下拉;
i. WAKEUP由于内部电路设计的原因,悬空时电压在1.3V以上时都为正常;
-
需要强调的是!WAKEUP高电平在1.3V以上才能正常工作,且高电平应大于1.3V且不大于3.6V;
-
如果外部高电平可能将WAKEUP拉至1.3V以下,则需要外加上拉电阻使其在合理范围内;
j. WAKEUP外接电平输入时可直连电平范围为1.8V-3.6V,或者说可以直接对接1.8V/2.8V/3.3V的MCU而无需电平转换;
k. 再次说明!WAKEUP0-2三个WAKEUP一般的处理是:
-
WAKEUP0引出到模组管脚供用户自由使用;
-
WAKEUP2引出的模组管脚但推荐用作USIM_DET,当然也可以自定义使用;
-
WAKEUP1模组内部固定用作USB插入检测使用(模组VBUS管脚,经过电压分压后,接WAKEUP1),不能再自定义为其它中断;
l. 如果WAKEUP容易受到干扰而引起异常中断,推荐WAKEUP引脚上添加RC滤波电路,避免异常唤醒;

m. 如果系统中的主控MCU通过三极管连接到模块的WAKEUP,则要求三极管的截止漏电流小于0.5uA,否则,由于WAKEUP内部上拉微弱,大漏电可能会将WAKEUP拉到1.3V以下进而造成模组无法正常工作;
三极管漏电流不能保证的情况下,有两种解决方案:
-
三极管电路预留上拉电路,注意VCC电压范围在1.8V~3.6V;
-
在三极管漏电流不能保证的情况下,可使用MOS管代替三极管, 大多数MOS漏电流相对较低;

AGPIOWU

a、AGPIOWU,共有三个,AGPIOWU0-2,分别是AGPIOWU0、AGPIOWU1、AGPIOWU2;
b、AGPIOWU0-2用作AGPIO时,分别对应GPIO20/21/22;
c、AGPIOWU0-2用作WAKEUP时,分别对应WAKEUP3/4/5;
d、 AGPIOWU0-2配置为AGPIO时,同AGPIO3-8一样,属于LDO_AON电压域;
AGPIOWU0-2配置为WAKEUP时,同WAKEUP0-2一样,属于LDO_1.8V电压域;
e、AGPIOWU0/1/2,可以软件配置为AGPIO或WAKEUP两种功能;
-
AGPIOWU0/1/2,软件配置为AGPIO功能后,还可以进一步配置为AGPIO中偏GPIO部分的功能和偏中断输入的功能;
-
AGPIOWU0/1/2,中断输入功能,又可以在软件上进一步选择是配置为GPIO中断还是WAKEUP中断;
说明!AGPIOWU0/1/2配置为GPIO中断时跟普通的GPIO中断时没有区别,也不存在AGPIO中断的说法;
| 分类 | 命名 | 功能 | LuatOS | 特别提示 | |
|---|---|---|---|---|---|
| AGPIOWU0 | AGPIO | GPIO20 | 输入 | --设置GPIO20为输入; gpio.setup(20, nil) |
1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE,3)),无法响应; |
| 输出 | --设置gpio20为输出,且初始化电平为低,使用硬件默认上下拉配置; gpio.setup(20, 0) --设置gpio20为输出,且初始化电平为高,使用硬件默认上下拉配置; gpio.setup(20, 1) |
1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE,3)),可以保持电平输出(软件设置的高电平或低电平); |
|||
| 中断 | --gpio20中断回调函数 function gpio20_int_callback(level) log.info("gpio20_int_callback", level) end --设置gpio20为中断,上升沿和下降沿都可以触发 gpio.setup(20, gpio20_int_callback, gpio.PULLUP) --设置gpio20为中断,仅上升沿触发 gpio.setup(20, gpio20_int_callback, gpio.PULLUP, gpio.RISING) |
1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE,3)),无法响应; |
|||
| WAKEUP | WAKEUP3 | 中断 | --WAKEUP3中断回调函数 function wakeup3_int_callback(level) log.info("wakeup3_int_callback", level) end --设置WAKEUP3为中断,上升沿和下降沿都可以触发 gpio.setup(gpio.WAKEUP3, wakeup3_int_callback, gpio.PULLUP) --设置WAKEUP3为中断,仅上升沿触发 gpio.setup(gpio.WAKEUP3, wakeup3_int_callback, gpio.PULLUP, gpio.RISING) |
1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE,3)),可以响应外部中断输入; |
|
| AGPIOWU1 | AGPIO | GPIO21 | 输入 | --设置GPIO21为输入;gpio.setup(21, nil) | 1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE,3)),无法响应; |
| 输出 | --设置gpio21为输出,且初始化电平为低,使用硬件默认上下拉配置; gpio.setup(21, 0) --设置gpio21为输出,且初始化电平为高,使用硬件默认上下拉配置; gpio.setup(21, 1) |
1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE, 3)可以保持电平输出(软件设置的高电平或低电平); |
|||
| 中断 | --gpio21中断回调函数 function gpio21_int_callback(level) log.info("gpio21_int_callback", level) end --设置gpio21为中断,上升沿和下降沿都可以触发 gpio.setup(21, gpio21_int_callback, gpio.PULLUP) --设置gpio21为中断,仅上升沿触发 gpio.setup(21, gpio21_int_callback, gpio.PULLUP, gpio.RISING) |
1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE,3)),无法响应; |
|||
| WAKEUP | WAKEUP4 | 中断 | --WAKEUP4中断回调函数 function wakeup4_int_callback(level) log.info("wakeup4_int_callback", level) end -设置WAKEUP4为中断,上升沿和下降沿都可以触发 gpio.setup(gpio.WAKEUP4, wakeup4_int_callback, gpio.PULLUP) --设置WAKEUP4为中断,仅上升沿触发 gpio.setup(gpio.WAKEUP4, wakeup4_int_callback, gpio.PULLUP, gpio.RISING) |
1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE,3)),可以响应外部中断输入; |
|
| AGPIOWU2 | AGPIO | GPIO22 | 输入 | --设置GPIO22为输入;gpio.setup(22, nil) | 1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE,3)),无法响应; |
| 输出 | --设置gpio22为输出,且初始化电平为低,使用硬件默认上下拉配置; gpio.setup(22, 0) --设置gpio22为输出,且初始化电平为高,使用硬件默认上下拉配置; gpio.setup(22, 1) |
--WAKEUP4中断回调函数 function wakeup4_int_callback(level) log.info("wakeup4_int_callback", level) end --设置WAKEUP4为中断,上升沿和下降沿都可以触发 gpio.setup(gpio.WAKEUP4, wakeup4_int_callback, gpio.PULLUP) --设置WAKEUP4为中断,仅上升沿触发 gpio.setup(gpio.WAKEUP4, wakeup4_int_callback, gpio.PULLUP, gpio.RISING) |
|||
| 中断 | --gpio22中断回调函数 function gpio22_int_callback(level) log.info("gpio22_int_callback", level) end --设置gpio22为中断,上升沿和下降沿都可以触发 gpio.setup(22, gpio22_int_callback, gpio.PULLUP) --设置gpio22为中断,仅上升沿触发 gpio.setup(22, gpio22_int_callback, gpio.PULLUP, gpio.RISING) |
1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE,3)),无法响应; |
|||
| WAKEUP | WAKEUP5 | 中断 | --WAKEUP5中断回调函数 function wakeup5_int_callback(level) log.info("wakeup5_int_callback", level) end --设置WAKEUP5为中断,上升沿和下降沿都可以触发 gpio.setup(gpio.WAKEUP5, wakeup5_int_callback, gpio.PULLUP) --设置WAKEUP3为中断,仅上升沿触发 gpio.setup(gpio.WAKEUP5, wakeup5_int_callback, gpio.PULLUP, gpio.RISING) |
1)驱动能力<30uA,外围电路,比如上拉或下拉电阻,阻值不能过小,建议阻值100K; 2)休眠模式下((pm.WORK_MODE,1 和 pm.WORK_MODE,3)),可以响应外部中断输入; |
f、AGPIOWU0-2分别配置为AGPIO和WAKEUP时的相关API函数详细说明;
gpio.setup(),第一个参数为是GPIO号时,就作为AGPIO使用,配置为中断功能时就是GPIO中断;
也就是说,AGPIOWU0-2不需要通过LuatIO工具初始化配置区分AGPIO和WAKEUP,可以直接操作;
以AGPIOWU0为例,配置为AGPIO时,直接将AGPIOWU0按照GPIO20操作即可;
gpio.setup(20, nil),设置GPIO20为输入;
gpio.setup(20, 0),设置gpio20为输出,且初始化电平为低,使用硬件默认上下拉配置;
gpio.setup(20, 1),设置gpio20为输出,且初始化电平为高,使用硬件默认上下拉配置;
以AGPIOWU0为例,配置为GPIO中断时,直接将AGPIOWU0按照GPIO20操作即可;
function gpio_func(val, io_num)
log.info("io", io_num, val) -- 提醒,val并不代表触发方向,仅代表中断后某个时间点的电平,io_num是IO序号
end
--GPIO20初始化
-- 1,如果要设置GPIO20为中断,默认双向触发,代码如下:
gpio.setup(20, gpio_func, gpio.PULLUP)
--2,如果要设置GPIO20为中断,仅上升沿触发,使用如下代码:
gpio.setup(20, gpio_func, gpio.PULLUP, gpio.RISING)
gpio.setup(),第一个参数为是WAKEUP号时,就作为WAKEUP中断使用;
也就是说,AGPIOWU0-2不需要通过LuatIO工具初始化配置区分AGPIO和WAKEUP,可以直接操作;
以AGPIOWU0为例,配置为WAKEUP3中断时,直接将AGPIOWU0按照gpio.WAKEUP3操作即可;
说明!
gpio.WAKEUP3是WAKEUP3在LuatOS核心库gpio库中定义的常量,详见:
gpio.WAKEUP3
常量含义:休眠唤醒脚3,与GPIO20是同一个引脚;
数据类型:number;
示例代码:
function wakeup3_callback()
log.info("gpio", "wakeup3 interrupt triggered")
end
gpio.setup(gpio.WAKEUP3, wakeup3_callback)
适用产品型号:仅Air780EXXX系列支持,Air8000系列支持;
function gpio_func(val, io_num)
log.info("io", io_num, val) -- 提醒,val并不代表触发方向,仅代表中断后某个时间点的电平,io_num是IO序号
end
--WAKEUP3初始化
-- 1,如果要设置WAKEUP3为中断,默认双向触发,代码如下:
gpio.setup(gpio.WAKEUP3, gpio_func, gpio.PULLUP)
--2,如果要设置WAKEUP3为中断,仅上升沿触发,使用如下代码:
gpio.setup(gpio.WAKEUP3, gpio_func, gpio.PULLUP, gpio.RISING)
g、AGPIOWU0/1/2配置为GPIO20/21/22时的注意事项;
-
AGPIOWU0/1/2配置为GPIO20/21/22时,每路GPIO的驱动能力只有 30uA,外部上下拉电阻建议选择100K阻值,使用时请务必注意!
-
GPIO20/21/22主要相对普通GPIO来说在休眠模式(pm.WORK_MODE,1 和 pm.WORK_MODE,3)下可以保持固定电平(固定为高或固定为低)输出,普通GPIO不可以;
-
GPIO20/21/22,与AGPIO3-8(GPIO23-28)一样都可以在休眠模式(pm.WORK_MODE,1 和 pm.WORK_MODE,3)下保持固定电平输出,只是,AGPIOWU0-2(GPIO20-22)与AGPIO3-8(GPIO23-28)的驱动能力不同,AGPIOWU0-2的驱动能力(30uA)相对AGPIO3-8的驱动能力(单路<5mA且所有AGPIO总和也要<5mA)要差;
-
AGPIOWU(0~2)在上电或reset时可能会有1mS左右的异常高电平,与普通GPIO和AGPIO不同,AGPIOWU(0~2)这个1ms左右的异常高电平无法消除;

h、AGPIOWU0/1/2配置为WAKEUP3/4/5时的注意事项;
-
常规模式(pm.WORK_MODE,0)和休眠状态下(pm.WORK_MODE,1 和 pm.WORK_MODE,3)都可实现中断输入;
-
WAKEUP内部上下拉非常弱,驱动能力<30uA,外部上下拉电阻建议选择100K阻值;
-
所有WAKEUP中断和GPIO中断都支持双边沿中断,也都支持软件配置内部上下拉,也都支持软件取消内部上下拉而使用外部上下拉;
-
WAKEUP由于内部电路设计的原因,悬空时电压在1.3V以上时都为正常;
-
WAKEUP外接电平输入时可直连电平范围为1.8V-3.6V,或者说可以直接对接1.8V/2.8V/3.3V的MCU而无需电平转换;
-
休眠状态下,低功耗模式pm.WORK_MODE,1/PSM+模式pm.WORK_MODE,3 ,只能通过WAKEUP0-2,AGPIOWU0-2配置为WAKEUP3/4/5,PWRKEY,CHRG_DET,UART1(LPUART)这几个中断输入源可以将模组唤醒,普通GPIO中断在休眠模式下无法唤醒模组;
-
如果硬件容易受到干扰而引起异常中断,推荐WAKEUP引脚上添加RC滤波电路,避免异常唤醒;

- 如果系统中的主控MCU通过三极管连接到模块的WAKEUP,则要求三极管的截止漏电流小于0.5uA,否则,由于WAKEUP内部上拉微弱,大漏电可能会将WAKEUP拉到1.3V以下进而造成模组无法正常工作;
三极管漏电流不能保证的情况下,有两种解决方案:
三极管电路预留上拉电路,注意VCC电压范围为1.8V~3.6V;
在三极管漏电流不能保证的情况下,可使用MOS管代替三极管, 大多数MOS漏电流相对较低;

3、GPIO/AGPIO在软件初始化完成之前是什么状态?
- 这是一个非常常见的问题,所以我们必须单独拎出来把这个问题说清楚;
- 我们先看下GPIO0-19(普通GPIO),GPIO20-28(AGPIO),GPIO29-38(普通GPIO)这39个GPIO在开机初始化完成之前的状态;

- 其中:
a. I&PU,意思是"输入+内部上拉",也就是在软件初始化完成之前,默认输入,且内部上拉;
b. I&PD,意思是"输入+内部下拉",也就是在软件初始化完成之前,默认输入,且内部下拉;I&PD的管脚只有GPIO0,且GPIO0更重要的功能是USB_BOOT,如果在开机前上拉到VDD_EXT改变默认下拉的状态,则会使能USB下载的功能,这一点我们在第五章节已有详细介绍,也正是因为这个特殊原因,LuatOS尚未开放GPIO0的复用功能,仅作为USB_BOOT使用;
c. NI&NP,意思是"非输入输出,没有上下拉,若需确定的状态,需要在外围电路设计时外加上拉或下拉",在软件初始化完成之前的状态,可以通过外部的上拉或下拉来确定;
4、GPIO/AGPIO/AGPIOWU/WAKEUP详细参数;
| 参数 | 描述 | 规格 | 单位 | ||
|---|---|---|---|---|---|
| Min | Typ. | Max | |||
| 普通GPIO,VDD_EXT=1.8V | |||||
| VDD | IO Supply Voltage | 1.8 | V | ||
| VIH | High-level input voltage | 0.7*VDD | V | ||
| VIL | Low-level input voltage | 0.2*VDD | V | ||
| VOH | High-level output voltage | 0.8*VDD | V | ||
| VOL | Low-level output voltage | 0.15*VDD | V | ||
| 低功耗模式pm.WORK_MODE,1 | 低功耗模式时Voltage | 间歇性输出,频率和与通信协议要求的时间间隔相同,通常为0.64S/1.28S/2.56S中的一个,输出时为1.8V; | V | ||
| PSM+模式pm.WORK_MODE,3 | PSM+模式时Voltage | 0 | V | ||
| I-oH | Digital High, Output Current | 4 | 6 | 9 | mA |
| I-oL | Digital Low, Output Current | 4 | 6 | 9 | mA |
| R-pu | Pull-up Resistance | 110k | 160k | 210k | Ω |
| R-pd | Pull-down Resistance | 160k | 210k | 260k | Ω |
| 普通GPIO,VDD_EXT=2.8V | |||||
| VDD | IO Supply Voltage | 2.8 | V | ||
| VIH | High-level input voltage | 0.7*VDD | V | ||
| VIL | Low-level input voltage | 0.2*VDD | V | ||
| VOH | High-level output voltage | 0.8*VDD | V | ||
| VOL | Low-level output voltage | 0.15*VDD | V | ||
| 低功耗模式pm.WORK_MODE,1 | 低功耗模式时Voltage | 间歇性输出,频率和与通信协议要求的时间间隔相同,通常为0.64S/1.28S/2.56S中的一个,输出时为2.8V; | V | ||
| PSM+模式pm.WORK_MODE,3 | PSM+模式时Voltage | 0 | V | ||
| I-oH | Digital High, Output Current | 5.3 | 14 | 29.1 | mA |
| I-oL | Digital Low, Output Current | 4.2 | 18 | 25.4 | mA |
| R-pu | Pull-up Resistance | 55k | 85k | 115k | Ω |
| R-pd | Pull-down Resistance | 70k | 100k | 130k | Ω |
| 普通GPIO,VDD_EXT=3.3V | |||||
| VDD | IO Supply Voltage | 3.3 | V | ||
| VIH | High-level input voltage | 0.7*VDD | V | ||
| VIL | Low-level input voltage | 0.2*VDD | V | ||
| VOH | High-level output voltage | 0.8*VDD | V | ||
| VOL | Low-level output voltage | 0.15*VDD | V | ||
| 低功耗模式pm.WORK_MODE,1 | 低功耗模式时Voltage | 间歇性输出,频率和与通信协议要求的时间间隔相同,通常为0.64S/1.28S/2.56S中的一个,输出时为3.3V; | V | ||
| PSM+模式pm.WORK_MODE,3 | PSM+模式时Voltage | 0 | V | ||
| I-oH | Digital High, Output Current | 9.6 | 14.9 | 20.8 | mA |
| I-oL | Digital Low, Output Current | 11.6 | 22.4 | 36.3 | mA |
| R-pu | Pull-up Resistance | 58k | 77k | 109k | Ω |
| R-pd | Pull-down Resistance | 49k | 78k | 138k | Ω |
| AGPIO, LDO_AON=1.8V(实际使用时请按照单个AGPIO或所有AGPIO驱动能力之和<5mA进行评估和设计) | |||||
| VDD | IO Supply Voltage | 1.8 | V | ||
| VIH | High-level input voltage | 0.7*VDD | V | ||
| VIL | Low-level input voltage | 0.2*VDD | V | ||
| VOH | High-level output voltage | 0.8*VDD | V | ||
| VOL | Low-level output voltage | 0.15*VDD | V | ||
| 低功耗模式pm.WORK_MODE,1 | 低功耗模式时Voltage | 1.7 | 1.8 | 1.9 | V |
| PSM+模式pm.WORK_MODE,3 | PSM+模式时Voltage | 1.7 | 1.8 | 1.9 | V |
| I-oH | Digital High, Output Current | 3 | 5 | mA | |
| I-oL | Digital Low, Output Current | 5 | mA | ||
| R-pu | Pull-up Resistance | 110k | 160k | 210k | Ω |
| R-pd | Pull-down Resistance | 160k | 210k | 260k | Ω |
| AGPIO, LDO_AON=2.8V(实际使用时请按照单个AGPIO或所有AGPIO驱动能力之和<5mA进行评估和设计) | |||||
| VDD | IO Supply Voltage | 2.8 | V | ||
| VIH | High-level input voltage | 0.7*VDD | V | ||
| VIL | Low-level input voltage | 0.2*VDD | V | ||
| VOH | High-level output voltage | 0.8*VDD | V | ||
| VOL | Low-level output voltage | 0.15*VDD | V | ||
| 低功耗模式pm.WORK_MODE,1 | 低功耗模式时Voltage | 2.65 | 2.8 | 2.95 | V |
| PSM+模式pm.WORK_MODE,3 | PSM+模式时Voltage | 2.65 | 2.8 | 2.95 | V |
| I-oH | Digital High, Output Current | 3 | 5 | mA | |
| I-oL | Digital Low, Output Current | 5 | mA | ||
| R-pu | Pull-up Resistance | 55k | 85k | 115k | Ω |
| R-pd | Pull-down Resistance | 70k | 100k | 130k | Ω |
| AGPIO, LDO_AON=3.3V(实际使用时请按照单个AGPIO或所有AGPIO驱动能力之和<5mA进行评估和设计) | |||||
| VDD | IO Supply Voltage | 3.3 | V | ||
| VIH | High-level input voltage | 0.7*VDD | V | ||
| VIL | Low-level input voltage | 0.2*VDD | V | ||
| VOH | High-level output voltage | 0.8*VDD | V | ||
| VOL | Low-level output voltage | 0.15*VDD | V | ||
| 低功耗模式pm.WORK_MODE,1 | 低功耗模式时Voltage | 3.15 | 3.3 | 3.45 | V |
| PSM+模式pm.WORK_MODE,3 | PSM+模式时Voltage | 3.15 | 3.3 | 3.45 | V |
| I-oH | Digital High, Output Current | 3 | 5 | mA | |
| I-oL | Digital Low, Output Current | 5 | mA | ||
| R-pu | Pull-up Resistance | 58k | 77k | 109k | Ω |
| R-pd | Pull-down Resistance | 49k | 78k | 138k | Ω |
| AGPIOWU0-2 (AGPIO function), LDO_AON=1.8V | |||||
| VDD | IO Supply Voltage | 1.8 | V | ||
| VIH | High-level input voltage | 0.7*VDD | V | ||
| VIL | Low-level input voltage | 0.2*VDD | V | ||
| VOH | High-level output voltage | 0.8*VDD | V | ||
| VOL | Low-level output voltage | 0.15*VDD | V | ||
| 低功耗模式pm.WORK_MODE,1 | 低功耗模式时Voltage | 1.7 | 1.8 | 1.9 | V |
| PSM+模式pm.WORK_MODE,3 | PSM+模式时Voltage | 1.7 | 1.8 | 1.9 | V |
| I-oH | Digital High, Output Current | 0.03 | mA | ||
| I-oL | Digital Low, Output Current | 0.03 | mA | ||
| R-pu | Pull-up Resistance | 110k | 160k | 210k | Ω |
| R-pd | Pull-down Resistance | 160k | 210k | 260k | Ω |
| AGPIOWU0-2 (AGPIO function), LDO_AON=2.8V | |||||
| VDD | IO Supply Voltage | 2.8 | V | ||
| VIH | High-level input voltage | 0.7*VDD | V | ||
| VIL | Low-level input voltage | 0.2*VDD | V | ||
| VOH | High-level output voltage | 0.8*VDD | V | ||
| VOL | Low-level output voltage | 0.15*VDD | V | ||
| 低功耗模式pm.WORK_MODE,1 | 低功耗模式时Voltage | 2.65 | 2.8 | 2.95 | V |
| PSM+模式pm.WORK_MODE,3 | PSM+模式时Voltage | 2.65 | 2.8 | 2.95 | V |
| I-oH | Digital High, Output Current | 0.03 | mA | ||
| I-oL | Digital Low, Output Current | 0.03 | mA | ||
| R-pu | Pull-up Resistance | 55k | 85k | 115k | Ω |
| R-pd | Pull-down Resistance | 70k | 100k | 130k | Ω |
| AGPIOWU0-2 (AGPIO function), LDO_AON=3.3V | |||||
| VDD | IO Supply Voltage | 3.3 | V | ||
| VIH | High-level input voltage | 0.7*VDD | V | ||
| VIL | Low-level input voltage | 0.2*VDD | V | ||
| VOH | High-level output voltage | 0.8*VDD | V | ||
| VOL | Low-level output voltage | 0.15*VDD | V | ||
| 低功耗模式pm.WORK_MODE,1 | 低功耗模式时Voltage | 3.15 | 3.3 | 3.45 | V |
| PSM+模式pm.WORK_MODE,3 | PSM+模式时Voltage | 3.15 | 3.3 | 3.45 | V |
| I-oH | Digital High, Output Current | 0.03 | mA | ||
| I-oL | Digital Low, Output Current | 0.03 | mA | ||
| R-pu | Pull-up Resistance | 58k | 77k | 109k | Ω |
| R-pd | Pull-down Resistance | 49k | 78k | 138k | Ω |
| WAKEUP, AGPIOWU0-2 (WAKEUP Function),LDO_1.8V | |||||
| VDD | IO Supply Voltage | 1.8 | V | ||
| VIH | High-level input voltage | 0.7*VDD | V | ||
| VIL | Low-level input voltage | 0.2*VDD | V | ||
| 低功耗模式pm.WORK_MODE,1 | 低功耗模式时Voltage | 1.05 | 1.2 | 1.25 | V |
| PSM+模式pm.WORK_MODE,3 | PSM+模式时Voltage | 1.05 | 1.2 | 1.25 | V |
| R-pu | Pull-up Resistance | 70k | 120k | 170k | Ω |
| R-pd | Pull-down Resistance | 60k | 110k | 160k | Ω |
5、常见使用错误;
-
GPIO20/21/22的驱动能力小于30uA,大家在硬件设计时非常容易忽略这一点,常常碰到的错误是,电路上的上拉电阻或者下拉电阻的阻值过小,造成GPIO20/21/22无法正常驱动,进而导致电路失效,所以,建议上下拉电阻值为100K;
-
WAKEUP3/4/5的驱动能力也小于30uA,因此,建议上下拉电阻值在20K到100K之间,根据实际硬件进行调试选择;
-
ESD保护;
a. GPIO/AGPIO/AGPIOWU/WAKEUP在硬件上需要外接按键或者外部高电压输入时,请注意做好保护;
b. 高电压输入时,请注意使用光耦做隔离,比如:
C127009_晶体管输出光耦_UPC817CG-D04-T_规格书_WJ149952.pdf
c. 外部按键、插针形式输入时,容易产生静电,推荐TVS型号如下;
样品购买链接:SIM和GPIO用,DFN1006-2封装,AR3321P1LV,应能微-淘宝网
6、LuatIO工具初始化配置;
- 任何IO管脚,都需要通过LuatIO进行初始化配置,也就是指定这个管脚这么多复用功能你要使用的那一个;
- LuatIO工具相关介绍LuatIO初始化配置工具 - common@air780epm - 合宙模组资料中心 ;
- 有关LuatIO的说明,请见第十三章节中的介绍;
- 以Air780EPM为例,LuatIO工具界面如下;

7、LuatOS相关API;
- GPIO操作,包括普通GPIO/AGPIO/AGPIOWU/WAKEUP,详见 21 gpio - 合宙模组资料中心 ;
- GPIO电平设置包括普通GPIO/AGPIO/AGPIOWU/WAKEUP,详见 52 pm - 合宙模组资料中心 ;
- IO序列操作的相关介绍,详见 31 ioqueue - 合宙模组资料中心 ;
8、关于GPIO相关的基础知识;
-
https://docs.openluat.com/embedded/interface/gpio/
-
以下是视频号信盈达关于GPIO基础知识的介绍,很有趣,截图给大家;
"应用场景,推挽点灯带电机,开漏通信I2C用"
"推挽输出,上有推来下有拉,高低电平都强硬",来自视频号信盈达内容截图;
![]() |
![]() |
|---|---|
"开漏输出,只能拉低不能高,输出高时呈悬空",来自视频号信盈达内容截图;
"上拉电阻,要想开漏输出高,上拉电阻必须加",来自视频号信盈达内容截图;
![]() |
![]() |
![]() |
|---|---|---|




