想要硬件设计不用愁?首先要搞懂这三类GPIO!

news/2024/11/8 7:10:24/文章来源:https://www.cnblogs.com/luatos/p/18534348

合宙低功耗4G模组经典型号Air780E,支持两种软件开发方式:

一种是传统的AT指令;
一种是基于模组做Open开发。

传统AT指令的开发方式,合宙模组与行业内其它模组品牌在软件上区别不大,在硬件功耗上更有优势;

模组Open开发,合宙采用的是LuatOS方式,相对C-SDK入门更简单,开发更方便,开发时间上也更快。

本文所介绍的GPIO设计指导,都是针对Air780E用于LuatOS开发方式时的一些注意事项,AT指令开发版本不支持GPIO操作。

 

Air780E模组共支持GPIO0~GPIO31合计32个GPIO和WAKEUP0~5合计6个唤醒管脚,其中:

32个GPIO口本身有多重复用功能,大家需要根据实际应用进行选择配置;

6个WAKEUP管脚中,部分也可以配置为GPIO功能,在接下来的表格中,也将详细介绍WAKEUP管脚的注意事项;

32个GPIO中,又可分为普通GPIO和AGPIO,在接下来的表格中,会详细介绍这两种GPIO的定义和区别。

 

一、GPIO复用表

对于GPIO功能复用,请参考如下表格。

 

▼ GPIO复用表 ▼

图片

 

二、GPIO特性

Air780E的GPIO口根据不同的特性,可以分为三种类型:

  • 普通IO

  • Wakeup IO

  • AGPIO

不同特性的GPIO,其驱动能力以及在低功耗模式/PSM+模式下的表现区别比较大,在使用这些特性的GPIO时尤其要注意;

AGPIO也常被写作为:AONGPIO、AON_GPIO,以下均以AGPIO的写法进行描述。

1. 普通IO

Air780E大部分管脚为普通GPIO(上图GPIO复用表格中灰色底色的IO);

Air780E系统为了在休眠模式下有极致的低功耗性能,会在模组进入休眠/深休眠模式时,关闭GPIO供电(VDD_EXT),因此会导致所有以VDD_EXT为电源域的GPIO会进入下电状态。

在使用普通GPIO时,要尤其注意在休眠状态下GPIO的掉电状态对控制外设造成的误动作风险。

 

▼ 普通IO相关特性 ▼

 

  • 电压域:VDD_EXT(1.8/3.3V可配置)

  • 输入输出:可以配置

  • 上下拉:内部可配置

  • 输入中断:
    上下边沿触发/双边沿触发/高低电平触发(休眠后无法响应中断)

  • 休眠电平保持:不可保持

  • 休眠唤醒:不可唤醒模组

  • 驱动能力:单个普通GPIO驱动能力<=10mA

 

图片

 

2. AGPIO

AGPIO管脚为休眠可保持管脚(GPIO复用表格中绿色底色IO管脚);

这类管脚电源域为长保持的LDO_AONIO电源(为内部电源,模组外部不可测量),这类电源在模组低功耗模式/PSM+下,仍然能够保持供电,因此AGPIO管脚在休眠状态下能够保持电平。

AGPIO管脚可以用于休眠状态下仍然需要保持工作状态的外设。

 

▼ AGPIO相关特性 ▼

 

  • 电压域:LDO_AONIO(1.8/3.3V)

  • 输入输出:可以配置

  • 上下拉:内部可配置

  • 输入中断:
    上下边沿触发/双边沿触发/高低电平触发(休眠后无法响应中断)

  • 休眠电平保持:可保持

  • 休眠唤醒:不可唤醒模组

  • 驱动能力:

    AGPIOWU0/1/3(MAIN_DTR):30μA;

    AGPIO3~8:5mA(所有AGPIO总共驱动电流不能超过5mA)。

 

图片

 

3. Wakeup IO

Air780E模组包含6个特殊管脚:
WAKEUP0~WAKEUP5

此类型IO为中断唤醒管脚,能够在模组休眠状态下响应外部中断从而使模组退出休眠状态,因此这类IO管脚在休眠状态下也能保持供电。

注意:Wakeup IO仅支持输入,不能配置为输出,且固定电平不可配置。

 

▼ Wakeup IO相关特性 ▼

 

  • 电压域:LDO_AON(2V,不可配置)

  • 输入输出:仅输入

  • 上下拉:内部可配置

  • 休眠唤醒:支持

  • 驱动能力:30μA

  • 输入中断:上下边沿触发/双边沿触发/高低电平触发

  • 休眠电平保持:可保持

 

图片

 

三、GPIO应用注意事项

1. 普通GPIO以及相应的电压域VDD_EXT,在休眠时会输出频繁百ms级别的高脉冲,极易导致连接的外设误动作。

原因解析:

Air780E的休眠特性,VDD_EXT在休眠状态下会关闭,但是Air780E系统在休眠的整个时期内并不是一直保持稳定休眠状态,需要不定时唤醒起来与4G网络交互以保持网络连接,因此VDD_EXT会随着模组唤醒而打开。而大部分普通GPIO默认是I&PU状态,就会被VDD_EXT拉高,导致输出高脉冲。

设计建议:

在一些需要休眠状态下正常工作的外设的控制(比如LED控制)不建议使用普通GPIO,可以使用AGPIO。

由于AGPIO数量有限,在必须用普通GPIO的情况下,可以在普通GPIO上做外接10K电阻下拉(如下图R23),可以大幅减小休眠时输出的高脉冲幅值,使得减小到外设的高电平判别门限以下,也可以避免误动作的情况,但是相应的在某些情况下,会增加功耗,请根据实际情况酌情做出选择。

图片

2. Wakeup IO类型的GPIO不要用VDD_EXT或者普通GPIO上拉,会导致系统无法进入休眠。

原因解析:

Air780E的休眠特性使得普通GPIO管脚和VDD_EXT会在休眠状态下输出高脉冲,会使得Wakeup IO收到中断而导致系统被唤醒,无法进入休眠模式。

设计建议:使用内部的上下拉。

3. Wakeup IO类型的GPIO不要直接连接主控MCU的IO管脚,会导致电平不一致而影响系统稳定性。

原因解析:

Wakeup IO管脚电平是2V左右,这个与大多数MCU的IO电平不匹配,而且Wakeup IO的供电为内部的LDO_AON,而这个供电会给系统启动相关的部分供电,比如reset管脚,因此Wakeup IO上由于电平不匹配而导致的漏洞,有可能会影响系统稳定性。

设计建议:

使用二极管或者三极管来隔离(如下图)。

图片

今天的内容就分享到这里了~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/828663.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定位模组LuatOS快速入门:源UART串口通信

合宙Air201资产定位模组——是一个集成超低功耗4G通信、语音通话、超低功耗定位、计步、震动、Type-C、充电、放音、录音等功能的超小PCBA。 内部集成高效、简单、可靠的LuatOS语言,旨在帮助客户降低开发难度,降低研发成本,以及打造超小超低功耗的精品产品。 合宙Air201快速…

为 .NET Conf 2024 做好准备之本地社区活动 .NET Conf China 2024 启动

.NET Conf 2024 是一个面向.NET生态系统社区的大型活动,将于2024年11月12日至14日举行。该活动将通过YouTube和Twitch进行现场直播,并在dotnetconf.net网站上提供直播流。这是一个免费的虚拟事件,旨在为初学者和学习者提供关于AI、Web开发、移动开发和游戏开发等方面的教育内…

源码开放:WebSocket应用示例

1 WebSocket概述WebSocket是HTML5下一种新的协议(本质上是一个基于TCP的协议),它实现了浏览器与服务器之间的全双工通信,能够节省服务器资源和带宽,达到实时通讯的目的。WebSocket协议通过握手机制,允许客户端和服务器之间建立一个类似TCP的连接,从而方便它们之间的通信…

东山派七号STM32MP157-适配U-Boot LCD驱动 内核启动LCD打印启动信息

最近淘到一块东山派7号开发板,基于STM32MP157DAC,因为便宜,买过来玩。 但是韦东山的资料真的有一说一,板子出的挺多,除了卖的最好的板子,其他的资料非常非常少。。(韦老师您看到了别生气,至少因为资料少引发问题我解决了也算收获经验了。。。) 我说的是实话,因为正点…

chapter16

segmentation.py参数第一题问题先让我们用一个小地址空间来转换一些地址。这里有一组简单的参数和几个不同的随机种子。你可以转换这些地址吗? segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 0 segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 1 segm…

刻不容缓腾讯云双十一活动羊毛攻略!!!

前言 每年的各大云厂商都在举办自己的活动,这不腾讯云举办了双十一嘉年华上云拼团 GO, 像我们这类程序员都拥有自己的博客或者需要部署的应用以及 Demo 案例,缺少不了云服务,接下来我带着大家领略最佳价格!!一、活动时间与节奏预热期(10 月 24 日 - 10 月 31 日)可提前了解活…

避坑指南:Mask操作时不要使用float(-inf)填充

在Transformer等类似深度学习任务中有掩码自注意力机制等子模块,会涉及默认的填充值, 建议填一个足够小的数,如-1e6就OK了,如果设置成float(-inf),如: if mask is not None:mask = mask.expand(attention_scores.shape[0], -1, -1, -1)attention_scores = attention_score…

游记:第37届校赛

T7 悦跑圈!启动! 改完这个题我就睡觉 求在s1或s2闭合的最小环,所以我枚举了边,假设一条边的两头分别是u和v,我以为环就是dij跑出来的d[u]+d[v],虽然不会立刻原路返回起点,但是中间可能有重复路径,而环是不能有这种路径的,所以从一开始就错了。(不长记性,失恋三部曲忘…

zlibrary镜像网站,z-library中文入口(持续更新)

zlibrary,一个全球领先的数字图书馆,拥有超过1300万册电子书资源,供人下载。它跨越多个学科,从古典文学到现代科技,再到人文艺术,无所不包。ZLibrary的使命是促进教育平等,让每个人都能便捷地获取知识。zlibrary数字图书馆镜像网址 zlbrary最新官网地址:https://zh.z-l…

MacOS(Unix系统)炫酷完美终端配置

MacOS(Unix系统)炫酷完美终端配置 1 下载安装 iTerm2 1.1 iTerm2,没有上架到AppStore,只能通过下载zip包安装,这是下载地址: https://iterm2.com/downloads.html ,压缩包双击打开后,将解压后的App拖动到【应用程序】文件夹就完成了。1.2 打开iTerm2 配置如下图,iTerm2…

流程编排LiteFlow-业务代码解耦

LiteFlow真的是相见恨晚啊,之前做过的很多系统,都会用各种if else,switch这些来解决不同业务方提出的问题,有时候还要“切一个分支”来搞这些额外的事情,把代码搞得一团糟,毫无可读性而言。如何打破僵局?LiteFlow为解耦逻辑而生,为编排而生,在使用LiteFlow之后,你会发…

Linux中awk命令实现指定字段的第一个字母大写

001、[root@PC1 test]# ls a.txt [root@PC1 test]# cat a.txt ## 测试数据 abcd KHG DETT dre ssae rtE [root@PC1 test]# awk {$1 = toupper(substr($1, 1, 1)) substr($1,2); print $0} a.txt ## 此处借助awk的内置函数…