你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L4中STOP2 模式下的漏电流分析

[复制链接]
zero99 发布时间:2017-6-27 10:28
前言
% Q) j. m6 m2 l, _$ r8 xSTM32L4 系列,目前是STM32超低功耗产品中最强大的一个系列。它为我们提供了丰富的低功耗模式,包括STOP2 模式、低至30nA 的Shutdown 模式。对于这些模式,我们需要进行深入地了解,才能把它们用好。
9 |1 D4 I! P  s4 c4 P$ N2 G5 g1 \- T' L: z5 u
问题) L& k7 b* A% O0 ?
某客户在其产品的设计中,使用了STM32L476RGT6。客户在开发过程中,发现当进入STOP2模式后,MCU 的电流保持在179.6uA,远大于数据手册中所描述的值:1.18uA (3V 工作电压 & 室温 & 无LCD& 无RTC)。; p( I$ M7 C+ L  X& O" g0 T
# Z$ K& U6 c! T. c; q
调研, T. z! p0 R) b  J: Z) Y
1.了解问题7 a3 R  {- Q. P# v' a8 }/ i5 e
首先,我们先确认这个179.6uA 的电流真实存在,而且只是MCU上的电流,不是整机电流。客户并没有使用LCD,也没有RTC,根据参考手册,在3V 的供电电压下,这个电流应该是1.18uA 左右,如下图:
( A% J1 `) F& W3 M/ P, F 21.png 3 T( T7 X. Q8 S" N( D- c& V7 z+ x" |; a
3 O) o+ [; b/ [
目前所测的这个电流实在是太大了。; c& q" s) }$ g) y# a. p; b

6 ^+ [5 v1 G* V! [$ s7 ^2.问题分析
) d  c; k, `+ @! g根据代码和现象确认MCU 已经进入了STOP2 模式。那么,这个电流是如何产生的呢?初步怀疑是有输出口在对外输出电流。. y- B' {* h- I# G4 P- }& k
于是,找到电路图,对电路图进行了检查,客户的电路图并不复杂,没有很明显可能会导致往外输出电流的情况。结合电路图,我们对I/O 口的状态进行了检测,最后发现MCU 的一个I2C接口上的两根信号线电平为低!
4 i9 u, }, J8 U  I! c7 c鉴于此,我们还得分成两种情况来看。一是如果这两个I/O 口被配置为输入口,那么它是没问题的,不会产生电流;另一种情况是,它仍然为I2C功能的开漏输出口,那么这种情况下将会产生漏电流。所以,需要对代码进行检查。
: C. |( O. F5 w* O, Q
! g: e5 Y2 L8 t3 X6 |从电路图上来看,MCU 的I2C 接口,SCL 和SDA 两条线直接连接到外部器件,没有上拉电阻。所以,先检查I/O配置,这两个口被配置为具有内部上拉的复用开漏功能模式使用了内部上拉电阻,这是正确的配置,没问题。但是,我们发现客户在进入STOP2模式之前并没有对这两个口的配置进行调整,也就是说,它们仍然带着内部上拉电阻并保持I2C 功能的开漏输出结构。6 f/ i0 W4 W6 \: n3 y  c, F

5 h& _0 T9 @6 E5 H% R我们知道,如果I2C 是在空闲状态下进入STOP2 模式,按道理,它们应该是保持在高电平。为什么两个引脚都是低电平呢?再检查用户代码,发现代码中将数据写入I2C 进行发送后,就直接进入STOP2 模式了。
/ r. L3 ^/ X" `  m  y+ c- b: d; [6 q+ U3 v& o* \$ C: p
问题来了,如果进入STOP2 模式的时间点上,数据还在发送过程中,此时,若SCL和SDA 都处于低电平的情况下,I2C 外设时钟停止,SCL 和SDA 的状态将被锁定在输出低电平状态上。我们使用示波器对此情况进行测试,发现确实如此,在进入STOP2模式时,I2C 数据还在发送;处于STOP2 模式中,SCL 和SDA 保持为输出低电平;从STOP2模式唤醒后,I2C 继续把剩下的bits 发完。
2 q# g& ]3 s" V) j来看一下此时SCL和SDA 的I/O 配置结构图:) x, c- z6 \3 m- _5 Z
22.png 3 q! z0 v+ Y& U3 D5 @! I7 ?

2 `2 V& K! i6 ~到此,这个问题基本就理清楚了:当I2C 在工作时,并在SCL 线和SDA 线上发送低电平时,N-MOS 被打开,电流从VDDIOx 经过上拉电阻流入I/O 口内部,经过N-MOS 流入VSS。若此时进入STOP2 模式,由于Vcore 域的所有时钟停止,导致I2C 外设时钟停止,那么此I/O 状态被保持,将导致在STOP 2 模式下电流持续产生。
! e& x+ `, r. p. O$ k: j2 e
+ h3 v) s, o+ M7 w$ I) @STM32L476 的内部上拉电阻为25~55kΩ,标称值为40 kΩ ,3V 的工作电压,两个I/O 的上的电流大约是3V/40 kΩ * 2=150uA
/ x/ n$ y1 y8 {1 u5 O, f因为内部上拉电阻并非刚好40 kΩ,所以我们测得到179.6uA就是相当地正常了。
% T; _9 a& U$ v8 |- K& ?3.问题解决
- M6 ]0 N0 C. P1 x4 |( B4 I检查STM32L476的参考手册RM0351,在STOP2 模式下的描述中,可以看到以下这一段话:7 |0 y$ W3 O4 D0 f
23.png ; v2 h1 ]; i  @9 \
, U- l$ }  k  m; j9 m7 D0 C# E
意思是说:所有在STOP2 模式下不能使用的外设,在进入STOP2模式之前,必须在其外设本身清除相应的使能位来进行禁用,或者通过设置相应的位将其恢复到复位状态。6 |+ h3 Q' A) X+ ]' t& q/ ?
于是,需要对代码进行修改:在进入STOP2 模式之前,将I2C 外设进行复位,复位后将SCL和SDA 两根线配置为输入上拉状态。为什么要配置为输入上拉呢?因为此I2C 在外部上没有上拉电阻连接,需要在STOP2模式下保持这两个I/O 上有确定的电平,以避免其易受电磁干扰和额外的电流消耗。而这两个口工作中又作为I2C接口,所以选择上拉电阻而不是下拉电阻。修正后,再进行测试,可测得在STOP2 模式下的电流为1.0uA,与数据手册相符。9 h. h+ n" \: r. _1 B
. m' u, k; L. o7 _" ~6 i
结论
! \! T4 S6 f4 f; ^( f由于在进入STOP2 模式之前没有对I2C 进行复位及I/O 口处理,导致在STOP2 模式中产生了漏电流。4 i$ N) {/ l8 a! P# v+ M4 I
$ P/ B/ i+ R0 o; T% \& b
处理
$ g9 |5 t0 }! f- @9 v0 N7 [  t1 J在进入STOP2 模式下,请确保所有不相关的外设都已经被正确复位或禁用,并配置I/O口为相应的正确结构。此种情况还容易发生在使用操作系统的应用中,因为多个任务的调度很容易让使用者在进入STOP2模式时忘记对所有的外设进行检测。所以,在进入STOP2 模式前,请检查一下其他任务的工作情况,是否还有外设在传输数据还没传输完,是的话需要等待其结束,确保所有数据传输完成后,对外设进行复位或禁用,再进入STOP2模式。
/ H* H& g/ S8 _; j/ }5 }1 g
$ V  [# i6 h: V- y1 G转自:ST MCU 信息交流8 ~' j8 T' X( l+ W+ J; E

" f1 p8 Y4 x' Y" k6 Z4 e$ N/ A0 A& o; y6 `3 Z

0 g; b# E6 x) X( T  g4 U
" H4 J% e- s- G% `9 D) O. f
赞 收藏 评论3 发布时间:2017-6-27 10:28

举报

3个回答
arenas 回答时间:2017-6-27 10:33:01
stm32 的超低功耗感觉是有些bug或者说不人性的地方,之前用atmel的和TI的zigbee产品,进入超低功耗会自然关闭一部分内存,输出输入和ad
zero99 回答时间:2017-6-27 10:50:08
SInzo 发表于 2017-6-27 10:33  K9 E- G0 y% h7 e$ ?" g
stm32 的超低功耗感觉是有些bug或者说不人性的地方,之前用atmel的和TI的zigbee产品,进入超低功耗会自然关 ...
0 \  t; I4 R" b* [; I3 c+ J/ T& M+ [
厉害厉害...
MrJiu 回答时间:2017-6-27 11:53:38
虽然没做过低功耗,不过进入低功耗之前,程序里面也应该要对一些外设进行单独的处理,比如如何配置啊,等等。。。当然了,这些都需要实际的实战来慢慢总结经验!!

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版