跳转至

PIN100:GPIO17和IO_Volt_set(IO电平设置)

1、Air780E系列的老模组型号,以Air780E为例,PIN100是作为IO电平的设置管脚出现,所以有时候PIN100也被叫做 IO_Volt_set 管脚;

PIN100悬空时,Air780E的IO默认电平为1.8V;

PIN100接地时,Air780E的IO电平设置为3.3V;

(说明!PIN100接地,可以直接接GND,也可以通过10K电阻接GND,都可以,本质都是GPIO17默认输入上拉,当检测到电平变低时,修改IO电平数值)

这样做的目的是,方便大家根据外设的情况,尤其是对端MCU的IO电平情况,来灵活调整模组的IO电平,避免再使用电平转换电路才可以进行通信;

2、我们推出Air780EPM后,做了如下延续和变化;

  • Air780EPM的默认电平,相对Air780E的1.8V,Air780EPM改为了3.3V;

为什么?

因为我们发现大多数情况下大家使用的都是3.3V;

  • 延续了PIN100作为IO电平更换设置的作用;

PIN100悬空时,Air780EPM的IO默认电平为3.3V;

PIN100接地时,Air780EPM的IO电平设置为1.8V;

注意!跟上一代的Air780E是相反的设置;

3、Air780EHM推出后,由于与Air780EPM除了Flash和RAM不同外,其余完全相同,所以延续了Air780EPM的做法:

PIN100悬空时,Air780EHM的IO默认电平为3.3V;

PIN100接地时,Air780EHM的IO电平设置为1.8V;

4、虽然Air780EPM/EHM保留了PIN100硬件设置IO电平的做法,但仍然可以通过函数pm.ioVOL()进行修改,当硬件设置和软件设置冲突时,以软件设置优先;

一般来说,Air780EPM/EHM的IO电平大概可以分为如下六种情况:

第一种情况

以Air780EHM为例,当PIN100:GPIO17悬空,main函数中无pm.ioVol()函数初始化IO电平;

说明:

1)PIN100:GPIO17悬空时默认为高电平,下同,不再说明;

2)如果main函数中包含pm.ioVol(),需要放在main函数运行的第一行;

此时IO电平经历了如下一个过程:

1,Air780EHM上电开机,BOOT过程中,IO电平默认为1.8V;

2,BOOT结束后底层软件开始运行,IO默认电平延续1.8V;

3,底层软件继续运行,直到运行到开始检测PIN100:GPIO17的状态为高电平,IO默认电平更改为3.3V;

4,LuatOS软件开始运行,IO默认电平延续3.3V;

第二种情况

以Air780EHM为例,当PIN100:GPIO17悬空,main函数中包含pm.ioVol(pm.IOVOL_ALL_GPIO, 3300)初始化IO电平;

1,Air780EHM上电开机,BOOT过程中,IO电平默认为1.8V;

2,BOOT结束后底层软件开始运行,IO默认电平延续1.8V;

3,底层软件继续运行,直到运行到开始检测PIN100:GPIO17的状态为高电平,IO默认电平更改为3.3V;

4,LuatOS软件开始运行,main函数中设置了pm.ioVol(pm.IOVOL_ALL_GPIO, 3300),IO默认电平延续3.3V;

第三种情况

以Air780EHM为例,当PIN100:GPIO17悬空,main函数中包含pm.ioVol(pm.IOVOL_ALL_GPIO, 1800)初始化IO电平;

1,Air780EHM上电开机,BOOT过程中,IO电平默认为1.8V;

2,BOOT结束后底层软件开始运行,IO默认电平延续1.8V;

3,底层软件继续运行,直到运行到开始检测PIN100:GPIO17的状态为高电平,IO默认电平更改为3.3V;

4,LuatOS软件开始运行,main函数中设置了pm.ioVol(pm.IOVOL_ALL_GPIO, 1800),IO默认电平再次更改为1.8V;

第四种情况

以Air780EHM为例,当PIN100:GPIO17下拉接地(直接接地或者通过电阻接地),main函数中无pm.ioVol()函数初始化IO电平;

此时IO电平经历了如下一个过程:

1,Air780EHM上电开机,BOOT过程中,IO电平默认为1.8V;

2,BOOT结束后底层软件开始运行,IO默认电平延续1.8V;

3,底层软件继续运行,当运行到开始检测PIN100:GPIO17的状态为低电平,IO默认电平延续为1.8V;

4,LuatOS软件开始运行,IO默认电平延续1.8V;

第五种情况

以Air780EHM为例,当PIN100:GPIO17下拉接地(直接接地或者通过电阻接地),main函数中包含pm.ioVol(pm.IOVOL_ALL_GPIO, 1800)初始化IO电平;

此时IO电平经历了如下一个过程:

1,Air780EHM上电开机,BOOT过程中,IO电平默认为1.8V;

2,BOOT结束后底层软件开始运行,IO默认电平延续1.8V;

3,底层软件继续运行,直到运行到开始检测PIN100:GPIO17的状态为低电平,IO默认电平延续为1.8V;

4,LuatOS软件开始运行,main函数中设置了pm.ioVol(pm.IOVOL_ALL_GPIO, 1800),IO默认电平延续1.8V;

第六种情况

以Air780EHM为例,当PIN100:GPIO17下拉接地(直接接地或者通过电阻接地),main函数中包含pm.ioVol(pm.IOVOL_ALL_GPIO, 3300)初始化IO电平;

此时IO电平经历了如下一个过程:

1,Air780EHM上电开机,BOOT过程中,IO电平默认为1.8V;

2,BOOT结束后底层软件开始运行,IO默认电平延续1.8V;

3,底层软件继续运行,直到运行到开始检测PIN100:GPIO17的状态为低电平,IO默认电平延续为1.8V;

4,LuatOS软件开始运行,main函数中设置了pm.ioVol(pm.IOVOL_ALL_GPIO, 3300),IO默认电平将更改为3.3V;

以上六种情况,1-3步大概耗时350ms左右,3-4步大概耗时150ms左右;

5、再后续的Air780Exx系列,包括Air780EHV/Air780EGP/Air780EGG/Air780EGH/Air780EHN/Air780EHU,底层固件都没再保留PIN100的这一功能,而是只作为普通的GPIO17使用;

为什么?

因为这些型号本来就只支持LuatOS二次开发,如果要设置IO电平,不过是一个函数的事情,完全没有必要浪费一个GPIO来实现这个功能;

示例代码

pm.ioVol(pm.IOVOL_ALL_GPIO, 3300)    -- 所有GPIO高电平配置为3.3V
pm.ioVol(pm.IOVOL_ALL_GPIO, 1800)    -- 所有GPIO高电平配置为1.8V

6、Air780EPM和Air780EHM理论上也可以使用 pm.ioVol() 函数来实现IO电平的设置,把PIN100释放出来作为普通的GPIO17来使用;

注意!

任何时候,pm.ioVol() 的优先级高于PIN100的设置,也就是说,同时使用PIN100悬空或下拉设置的时候,其优先级低于 pm.ioVol() 的设置;

但是,需要特别注意的是!

当你将Air780EPM/Air780EHM的PIN100作为GPIO17使用时,如果其硬件电路上有下拉,但是你需要将IO电平设置为3.3V使用,你可以按照第四条中提到的"第六种情况"进行处理;

以Air780EHM为例,当PIN100:GPIO17下拉接地(直接接地或者通过电阻接地),main函数中包含pm.ioVol(pm.IOVOL_ALL_GPIO, 3300)初始化IO电平;
此时IO电平经历了如下一个过程:

1,Air780EHM上电开机,BOOT过程中,IO电平默认为1.8V;
2,BOOT结束后底层软件开始运行,IO默认电平延续1.8V;
3,底层软件继续运行,直到运行到开始检测PIN100:GPIO17的状态为低电平,IO默认电平延续为1.8V;
4,LuatOS软件开始运行,main函数中设置了pm.ioVol(pm.IOVOL_ALL_GPIO, 3300),IO默认电平将更改为3.3V;

以Air780EHM参考设计为例说明,GPIO17用于LCD背光控制,其硬件电路上有下拉,

这个时候如果不使用 pm.ioVol(pm.IOVOL_ALL_GPIO, 3300) 进行IO电平的设置,模组的IO电平就会被设置为1.8V,进而造成LCD/摄像头/SD卡等3.3V外设无法正常使用;

有些时候,即便使用pm.ioVol(pm.IOVOL_ALL_GPIO, 3300)进行IO电平的设置,但由于外设供电3.3V和模组开机初始化的前三步电平不同,也有可能造成外设的初始化异常,这个时候,通常需要通过给外设下电再上电的操作进行解决,所以,所有外设的供电都需要可以通过GPIO进行控制,以便在遇到异常时进行下电上电的操作;

7、pm.ioVol()函数需要放在main文件中的第一句,举例如下;