GPIO简介

简介: 本文所述IO(Input/Output PAD)主要是指集成在CMOS芯片中的连接模块,其负责芯片引脚的外部信号与芯片内部的数字/模拟模块的交互,它是一颗完整芯片设计中不可或缺的组成部分。 文章首先根据IO的使用类型,介绍了IO的分类;紧接着重点介绍了GPIO的输入/输出功能和模式...

1. 概述与分类

本文所述IO(Input/Output PAD)主要是指集成在CMOS芯片中的连接模块,其负责芯片引脚的外部信号与芯片内部的数字/模拟模块的交互,它是一颗完整芯片设计中不可或缺的组成部分。 文章首先根据IO的使用类型,介绍了IO的分类;紧接着重点介绍了GPIO的输入/输出功能和模式,以及输入/输出模式下的一些特点和设计考虑;最后简要介绍了GPIO的功耗/静电保护/tolerance IO等一些问题

1.1 电源IO

电源IO的典型应用如下图所示:
hljs-center

image.png

电源IO主要作用就是提供电源在整芯片中的连接方式以及对电源本身的ESD保护方案。 对于电源IO, 简单归类:1. 是否需要连接到IO power ring上?通常认为可以直接连接到IO power ring上的电源对噪声不敏感; 2. 高压电源/低压电源的分类,这可能会涉及到ESD保护方案的不同

1.2 晶振IO

晶振IO的主要作用就是提供给外部的晶体一定的驱动能力,配合振荡晶体和外围电路产生振荡信号,为系统提供稳定可靠的时钟。目前较为常见的是皮尔斯振荡器,这种振荡器需要占有2个IO。
皮尔斯晶体振荡器的典型应用如下图所示:
hljs-center

image.png

Notes: 晶振的Cload值一般是以无源晶体本身来定义;CL1和CL2的串联值为Cload,即Cload=0.5CL1=0.5CL2 (一般CL1=CL2) 通常这个IO的开发都是专用IO电路,当晶体振荡器功能不用时,无法复用为GPIO。后续开发倾向于单独开发晶振驱动电路,和GPIO复用在一起;当晶体振荡器功能不用时,也能将这两个IO复用为GPIO。

1.3 GPIO

GPIO(General Purpose Input Output)的典型框图如下图所示:

image.png

ST GPIO Diagram

image.png

能就是实现芯片内外隔离,实现电平变化以及缓冲输入/输出的作用。具体的作用和工作模式详见第二章节介绍。

1.4 特殊引脚IO

在芯片设计中,可能会存在某些特殊的引脚。例如RESET复位PIN就通常设定为一个上拉输入的GPIO; SWD通信中SWDIO和SWDCLK也有一个上拉电阻的要求。

2. GPIO基本工作模式

本章节针对GPIO的输入输出工作模式进行描述。

2.1 输入接口电路

输入接口电路负责处理从芯片外部输入信号到芯片内部。

2.1.1 输入接口电路的主要作用

  • 提供适当的电平转换
  • TTL电平和CMOS电平
  • Schmitt触发器输入
  • 对片内电路起保护作用
  • 注意ESD二级保护的电阻应用。一般ESD保护电阻的阻值在250欧姆作用;对输入缓冲,保护电阻可以设计的大一些,电源/高速时钟信号则要相对选小一些

施密特(Schmitt)触发器的基本架构和工作模式如下所示:

image.png

施密特触发器的主要作用:施密特触发器存在一个明显的迟滞窗口,有利于提高输入的噪声容限;尤其是输入上升沿/下降沿不够理想的应用环境

2.1.2 输入接口电路的模式

 PAD模拟输入  需要注意对模拟内部信号的二次ESD保护  直接将模拟信号精确的输入或输出,无需额外的缓冲电路,而且保护电路也不可对模拟信号有所扭曲,使其有所失真  PAD数字输入  严禁浮空输入  上拉输入  下拉输入  上拉/下拉输入电阻阻值一般在几十K的数量级,且随电源电压变化较大

image.png
输入模式下的真值表

2.1.3 输入模式下的注意点

在所有输入信号中尤其需要注意VDDC_OFF(POC)功能  该信号为高电压域信号  该信号的作用:在电源上电过程,如果VDDC或VDDIO还没有稳定的时候,VDDC_OFF处于有效保护状态,保证IO处于High-Z状态,防止输出的大MOS管发生贯通电流或IO上有强驱动输出  如果是多管脚输出设计(例如管脚数量大于64),建议逐步释放VDDC_OFF信号,防止产生瞬间的大电流

2.2 输出接口电路

输出接口电路负责从芯片内部输出信号。

2.2.1 输出接口电路的主要作用

 电平转换  提高信号的驱动能力;  提高足够大的驱动能力。通常片外负载会在pF数量级别,同时还需要提供适当的上升/下降时间  输出缓冲的总延迟时间小  Slew rate控制  对片内电路起保护作用;

2.2.2 输出接口电路的模式

 CMOS推挽(Push-Pull)输出  开漏(Open-Drain)输出  典型应用场景:I2C  开源(Open-Source)输出

输出模式下的真值表 2.2.2.I 开漏(Open-Drain)输出说明 需要注意的时开漏输出,其典型的几种情况如下:

开漏输出的主要作用:1. 实现“线与”逻辑,即多个开漏输出的管脚可以直接并在一起;2. 实现不同逻辑电平的转换(如3.3V和5V之间), 但可能要注意IO的耐压tolerance问题 2.2.2.II 输出驱动能力说明 GPIO的输出驱动能力一般可选:2mA/4mA/…/24mA等  驱动能力的衡量是在外部管脚拉/灌标称的驱动电流时,输出还能维持一定的VOH/VOL为判定标准  驱动能力越强,GPIO自身消耗的功耗越大,电源/地线引起的扰动噪声也越大;所以建议选择满足需求的合适的驱动能力  虽然驱动能力不同,但一般来说,IO的面积大小相同。主要因为驱动管和ESD管一般都是共用在一起;而ESD管的面积基本决定了IO的面积大小  输出驱动管(也包含部分ESD管)一般都会有比较大的PMOS/NMOS尺寸,容易引发latch-up特性。所以在版图上都会有双重保护环(double guard ring)的设计要求 2.2.2.III 输出延迟时间说明 关于IO的延迟时间:  输出接口电路最重要的一点是对负载电容必须有足够的驱动能力,以达到适当的上升时间和下降时间。当输出要驱动一个很大的负载电容时,为保证电路的工作频率,就必须使电路的输出级能够提供够的驱动电流,电路的延迟时间可 以近似用下式表示:

其中,CL是电路要驱动的总负载电容,V是电路的输出摆幅,Id是输出级的驱 动电流。 从上面的式子可以看出,在负载电容和摆幅一定的情况下,若想减小电路的延迟时间,必须增大MOS管的宽长比。然而,输出级MOS管的宽长比增大,又 将增大前一级的负载电容,影响前一级的工作速度。因此,常采用级联反相器 作为输出缓冲电路。且使反相器的尺寸逐级增大;通过设计适当的级数比例, 以使总延迟最小。

 按固定的比例因子逐级增大器件尺寸: 这样,每级反相器有近似相等的延迟时间,对级联反相器的总延迟最有利。 当n = ln (CL/Cin), S = e时,级联反相器的总延迟最小。延迟时间约为:

 上面的结论只是从速度优化方面考虑的结果。在实际缓冲器的设计中不能简单的套用, 而要从速度/功耗和面积多方面综合考虑。一般这个值会取4~8

3. GPIO的功耗等影响因素

3.1 GPIO的功耗分布

 动态功耗如下图所示  对整个充放电的电流积分乘以电源,可以得到充放电一次消耗的能量为C¬LVDD^2; 因此在一定频率下的平均功耗为P = Freq* C¬LVDD^2

 贯通功耗如下图所示  大驱动PAD的最后一级MOS管的Size非常大,如果存在P/N管同时导通的情况, 会有很大贯通电流  静态电流功耗如下图所示  大驱动PAD的最后一级MOS管的Size非常大。因此,在IO PAD不翻转时的静态功耗(漏电流)可能也会比较大,在设计中,必须进行仿真确认。

 IO PAD的整体功耗分布如下图所示

3.2 GPIO的ESD保护

IO的ESD保护是个复杂的大课题,在这里只是简单介绍一些ESD保护的基本概念。  随着工艺尺寸的发展,ESD设计挑战越来越大。因为gate oxide break down电压越来越低,ESD设计窗口越来越小

 IO的ESD目前而言,一般来说电源IO的power clamp会选用RC trigger; GPIO会利用NMOS的snapback特性

3.3 GPIO的其他注意事项

 Cu bonding要求有一定的抗压能力,对顶层金属以及通孔阵列有一定的要求  在某些情况下,可能还需要一种类型IO需要tolerance高压设计,即接口信号电压高于电源电压的情况下的应用  Tolerance IO主要应用环境包括  输入高压,输入电压高于电源电压  输出开漏,Termination电压高于电源电压  带charge pump功能的LCD驱动输出,LCD电压高于电源电压  Tolerance IO设计需要考虑的因素  器件的耐压特性  PMOS器件的漏极和衬底之间的寄生二极管  Tolerance IO的负面影响  IO单元的面积有明显变大  相同面积下,驱动能力减弱  相同面积下,ESD能力相对下降 Tolerance IO设计下存在的寄生二极管,示意图如下:
本文作者:yangyf
点击查看原文

相关文章
|
5月前
|
Linux API
嵌入式Linux中的 gpio、gpiod基本分析
嵌入式Linux中的 gpio、gpiod基本分析
434 0
|
4月前
|
开发者
【经典案例】使用HAL库配置STM32F407的SPI外设
在嵌入式系统开发中,STM32F407是一款广泛应用的微控制器,而SPI(Serial Peripheral Interface)是一种常用的通信接口。本文将详细介绍如何使用STM32的硬件抽象层(HAL)库配置STM32F407的SPI外设,并提供完整的代码示例。
306 1
|
12月前
|
芯片
STM32速成笔记(二)—GPIO
本文介绍了STM32的GPIO的配置和使用方法,并且给出了应用实例。此外,针对使用时可能遇到的一些问题给出了解决办法。
335 0
STM32速成笔记(二)—GPIO
|
5月前
|
芯片
STM32 GPIO工作原理详解
STM32 GPIO工作原理详解
|
存储 芯片 内存技术
STM32F0单片机快速入门十 用 SPI HAL 库读写W25Q128
STM32F0单片机快速入门十 用 SPI HAL 库读写W25Q128
STM32F0单片机快速入门五 GPIO中断
STM32F0单片机快速入门五 GPIO中断
|
移动开发 API
STM32使用HAL库操作GPIO
使用HAL库的优点在于不用手动添加初始化的代码了,CubeMX会根据软件设置自动生成
196 0
|
存储 芯片
【STM32】Cortex_M4 GPIO口概述知识总结
GPIO口:简单而言,就是芯片用来控制或者采集外部器件的相关信息,这个又可以称之为输入输出的端口。
【STM32】Cortex_M4 GPIO口概述知识总结
|
传感器 编解码 Ubuntu
ESP32-C3入门教程 基础篇(七、LEDC — LED PWM 控制器)
测试第7课,补一补基本的PWM控制器的测试。 说明一下,ESP32-C3没有MCPWM硬件,所以测试只有LEDPWM, 如果想用ESP32-C3控制电机,可以考虑使用 RMT,后期有机会测试一下。
806 0
ESP32-C3入门教程 基础篇(七、LEDC — LED PWM 控制器)