查看: 282|回复: 0

[应用笔记] Semtech系列SPI模组进入SLEEP后IO的低功耗配置

[复制链接]

67

主题

100

帖子

570

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
570
发表于 2023-10-12 11:32:37 | 显示全部楼层 |阅读模式
  背景

  我司所有的Semtech芯片的SPI接口的RF模组,比如R系类、F系列、X系类等,在客户使用过程种都遇到因为使用不当引起的模组进入SLEEP状态后的电流偏大的情况。

  这些SLEEP电流偏大的案例中,如果SLEEP电流偏大了几百uA的话一般是模组没有真的进入SLEEP中(比如实际进入的是STANDBY),另外一类SLEEP电流偏大,比如偏大几uA或者偏大十几uA,一般都是由于模组进入SLEEP后,MCU的IO配置的状态不适合引起的,本文主要说的是这种模组进入SLEEP后MCU的IO配置的问题。

  本文以SX1268芯片的模组为例说明,其他芯片的模组的IO可以在其中找到对应的IO说明作为参考。例如SX27X芯片的模组没有BUSY,则不用关心。例如SX27X芯片的模组有DIOx则可以参考SX1268芯片模组的DIOx说明为参考。

  过程


  一、模组在各种状态下,模组的IO实际状态

  1、模组在各种状态下,模组的IO实际状态如下表
  对表格中IO信息的说明:
  PD:下拉,实际是在典型条件下,以50k欧姆下拉,而且电阻值随电源电压而变化。
  PU:上拉,在典型条件下,实际是以50 k欧姆上拉。
  HIZ:高阻态
  IN:输入 无上拉 无下拉
  HIZ PD:高阻态有下拉
  HIZ PU:高阻态有上拉
  IN PU:输入 有上拉
  OUT:输出

  2、关于模组状态的说明:模组的所有状态可以归类为两类,一类是中间状态,中间状态中模组是无法为使用者做任何工作的(即不能接收也不能发送等)。另外一类是工作状态。
  Reset:复位状态,这个状态是复位过程的一个状态,是模组的一个中间状态。该状态是一个过程,该过程中不能对模组进行任何操作,所以这个过程种MCU的IO配置不用关心。
  Start-up:启动状态,模组的一个中间状态。通电或复位后,芯片进入启动状态,在电池电压下运行的休眠状态机对芯片的控制。BUSY引脚为高电平,表示芯片正忙,无法接受命令。当数字电压和RC时钟可用时,芯片可以启动并由CPU控制。在这一阶段,BUSY变为低电平,设备准备接受命令。该状态是一个过程,该过程中不能对模组进行任何操作,所以这个过程种MCU的IO配置不用关心。
  Sleep:睡眠状态,模组的一种中间状态。模组处于低功耗状态。
  STBY_RC:内部晶振驱动的STANDBY状态,模组的一种工作状态。
  STBY_XOSC:外部晶振驱动的STANDBY状态,模组的一种工作状态。
  FS:频率合成状态,模组的一种工作状态。在FS模式下,PLL(锁相环)和相关调节器打开。一旦锁相环锁定或超时,BUSY会变低。出于调试目的,可以使用 SetFs 命令请求芯片保持此模式。
  RX:接收状态,模组的一种工作状态。
  TX:发送状态,模组的一种工作状态。

  由状态说明可知,Reset和Start-up过程状态中的MCU的IO状态不用关心。所以使用者只需要关心一种非工作状态(Sleep),和5种工作状态的MCU的IO配置。而5种工作状态的模组的IO状态完全一样。
  所以使用者在使用模组过程种只需要注意两套MCU的IO配置(Sleep状态和工作状态下两种配置)即可。

  二、MCU的IO配置

  1、GPIO的八种工作模式详解:(浮空输入、带上拉输入、带下拉输入、模拟输入、开漏输出、推挽输出、开漏复用输出、推挽复用输出)

  浮空输入:顾名思义,浮空就是 浮在空中.也就是没有什么把他拉下来,也没有什么把它拉上去。
  特点:电压的不确定性,它可能是0V,也可能是VCC,还可能是介于两者之间的某个值(最有可能).。浮空一般用来做ADC输入用、可以做KEY识别,这样可以减少上下拉电阻对结果的影响。

  带上拉输入:上拉就是把电位拉高,比如拉到Vcc。
  上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用。

  下拉输入:特点就是把电压拉低,拉到GND。与上拉原理相似。
  (备注:对于要加上拉或下拉电阻:当作单片机作为输入时,假设我们直接在IO端口接一个按键到地(或电源)。因为按键按与不按管脚都是悬空的。单片机就很难检测按键是否按下。所以人为的接一个上拉(或下拉)。以确定未按下的时候IO输入电平的状态。可以提高芯片的抗干扰能。.当单片机的IO口作输出时,如果不接上拉电阻只能提供灌电流。无法输出电流驱动外接设备。这时也需要考虑上拉电阻。这样才可以使IO输出高电平)

  模拟输入:
  应用ADC模拟输入,或者低功耗下省电信号从编号为1 的端口进从编号为2的一端直接进入MCU的AD模块。

  开漏输出:
  上图是GPIO开漏输出模式的工作原理图

  当MCU在编号1 端通过“位设置/ 清除寄存器”或“输出数据寄存器”写入数据后,该数据位将通过编号2的输出控制电路传送到编号4 的I/O端口。

  如果CPU 写入的是逻辑“1 ”,则编号3 的N-MOS管将处于关闭状态,此时I/O 端口的电平将由外部的上拉电阻决定。

  如果CPU写入的是逻辑“0”,则编号3的N-MOS管将处于开启状态,此时I/O端口的电平被编号3的N-MOS管拉了“地”的零电位。


  在图中的上半部,施密特触发器处于开启状态,这意味着MCU可以在“输入数据寄存器”的另一端,随时可以监控I/O端口的状态,通过这个特性,还可以实现了虚拟的I/O端口双向通信:假如CPU 输出逻辑“1 ”,由于编号3 的N-MOS管处于关闭状态,I/O 端口的电平将完全由外部电路决定,因此,MCU可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑“1 ”。

  GPIO口的输出模式下,有3 种输出速度可选(2MHz 、10MHz和50MHz) 这个速度是指GPIO口驱动电路的响应速度,而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出电路用户可以根据自己的需要选择合适的驱动电路)。

  通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。

  高频的驱动电路,噪声很高 当我们的项目不需要比较高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI 性能。

  当然如果我们的项目要求输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到比较失真的输出信号.

  推挽输出:GPIO的推挽输出模式是在开漏输出模式的基础上,在“输出控制电路”之后,增加了一个P-MOS管
  当MCU输出逻辑“1 ”时,编号3 处的P-MOS管导通,而下方的N-MOS管截止,达到输出高电平的目的

  当MCU输出逻辑“0 ”时,编号3 处的P-MOS管截止,而下方的N-MOS管导通,达到输出低电平的目的

  在这个模式下,MCU仍然可以从“输入数据寄存器”读到该IO端口电压变化的信号。

  优点:可以吸收电流也可以灌电流。

  缺点:一条总线上,只能有一个推挽输出器件。

  开漏复用输出:

  GPIO的开漏复用输出模式与开漏输出模式的工作原理基本相同
  不同的是编号为2 的输入的源不同,它是和复用功能的输出端相连

  此时的“输出数据寄存器”被输出通道给断开了。

  从上面的这个图,我们还可以看到CPU同样可以从“输入数据寄存器”读取到外部IO端口变化的电平信号。

  推挽复用输出:

  最后介绍一下GPIO推挽复用输出模式的工作原理
  编号2“输出控制电路” 输入是与复用功能的输出端相连

  此时“输出数据寄存器”被从输出通道断开了,片上外设的输出信号直接与“输出控制电路”的输入端想连接。

  我们将GPIO配置成复用输出功能后,假如相应的外设模块没有被激活,那么此时IO端口的输出将不确定。

  其它部分原理与前面叙述的模式一样,包括对“输入数据寄存器”的读取方式也是一样的。

  最后,着重说明一下,MCU外设输入输出的配置情况;

  外设对应管脚为输出:可根据外围电路的配置选择对应管脚为复用功能的推完输出或者复用功能的开漏输出。

  外设对应管脚为输入:可根据外围电路的配置选择对应管脚为浮空输入或者带上拉输入或者带下拉输入。

  ADC对应的管脚:配置管脚为模拟输入

  如果把端口配置成复用输出功能后,如过外设没有被激活,那么它的输出将不确定。

  2、使用者需要关心的模组的IO状态:
  (浮空输入、带上拉输入、带下拉输入、模拟输入、开漏输出、推挽输出、开漏复用输出、推挽复用输出)
  HIZ:高阻态(高阻态 无上拉也无下拉)
  IN:输入 无上拉 无下拉(浮空输入)
  HIZ PD:高阻态有下拉
  HIZ PU:高阻态有上拉
  IN PU:输入 有上拉
  OUT:输出(推挽输出)

  3、模组不同模式下MCU的IO配置

  (1)模组工作模式下MCU的IO配置:
  模组的OUT(DIOx、BUSY、MISO)接MCU的IO的浮空输入即可
  模组的IN(MOSI、SCK、NSS)接MCU的IO的推挽输出即可
  模组的IN UP(NRESET)接MCU的IO的推挽输出即可

  (2)模组Sleep模式下MCU的IO
  a、模组的HIZ PD(DIOx)接MCU的IO的浮空输入即可
  b、模组的HIZ PU(BUSY)接MCU的IO的浮空输入即可
  c、模组的HIZ (MISO、MOSI、SCK)接MCU的IO的状态:MISO接MCU的IO为下拉输入或输出低或模拟输入即可。MOSI、SCK接MCU的IO的推挽输出即可。
  d、模组的IN(NSS)接MCU的IO的推挽输出即可
  e、模组的IN UP(NRESET)接MCU的IO的推挽输出即可

  结论


  由上文可知:
  模组进入SLEEP后如果功耗异常(多了几uA或者十几uA),需要重点检查模组SLEEP后的MCU的接MISO的IO,因为芯片的MISO管脚在Sleep状态时为HIz(高阻)状态且无上下拉,即对外部不管什么电平都不会对SX268芯片该管脚有影响。MISO对应IO配置浮空输入(GPIO_MODE_INPUT),对于低功耗优化GPIO处理基本原则是不要浮空配置,未使用的GPIO应该配置为模拟输入,如果GPIO连接到外部接收器,则需要使用PP或PU/PD强制GPIO信号值。


  原因是MCU的MISO对应IO配置为浮空输入(GPIO_MODE_INPUT)状态,可能出现MCU内部IO的施密特触发器在由外部噪声引起的逻辑电平之间随机切换。这增加了总体消耗。这种现象是随机的,可能和温度、PCB走线等都有关系。所以模组进入低功耗后需要配置MCU的IO为下拉输入或输出低或模拟输入。

  其他IO的检查方式可以根据模组进入SLEEP后的IO状态,调整MCU的IO配置来做匹配。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表