【STM32L496 Dis】3.板载功耗测量
<div class='showpostmsg'> 本帖最后由 数码小叶 于 2023-10-29 16:46 编辑<p><span style="font-size:16px;">STM32L496 Discovery kit的学习借鉴的地方很多,其一就是电流测量。相比于其他大部分的L系列或者F系列的板卡,可能提供了低功耗模式的验证Demo,但都是仅限于设置好MCU的工作模式,需要通过电流测量接口外接万用表测量。而STM32L496 Discovery kit确是直接显示在屏幕上,不需要外部的测量设备。STM32L496 Dis电源设计有一个跳线帽JP2,这个可以选择是直接接到VDD还是电流测量部分,这个设计在ST的板卡上几乎都会存在</span></p>
<div style="text-align: center;"></div>
<div> </div>
<div> </div>
<div><span style="font-size:16px;">通过micro usb给板卡供上电,之前已经看到了IDD的应用,只需要再Demo里选择GUI为SEGGER,就能看到里面有电流测量应用</span></div>
<div>
<div style="text-align: center;"></div>
<div style="text-align: center;"> </div>
<div><span style="font-size:16px;">里面提供了7中模式:</span></div>
<div><span style="font-size:16px;">运行模式 24Mhz、睡眠模式24Mhz、低功耗运行模式2Mhz、低功耗睡眠模式、停止2模式、待机模式、关机模式。</span></div>
<div><span style="font-size:16px;">L4的参考手册总共介绍了十种运行模式,Demo里的七种已经涵盖了所有模式。手册里详细介绍了每种模式怎么进入怎么退出等操作,这个在之前策略L4功耗的时候已经了解过了</span></div>
<div>
<div style="text-align: center;"></div>
<p> </p>
<div style="text-align: center;"></div>
<p> </p>
</div>
<div>
<div style="text-align: center;"> </div>
<div> </div>
<div><span style="font-size:16px;">然后就是查看原理图,看下这个电流测量的具体过程</span></div>
<div>
<div style="text-align: center;"></div>
<p><span style="font-size:16px;">从跳线帽JP2入手,是一个很好的起始点。JP2决定了从哪路引入电流,左边VDD支路是直接引入的,没有接入任何器件;右侧IDD支路,有四个采样电阻,1Ω、24Ω、620Ω和10kΩ分别有三个MOS管控制开启或关断。控制三个MOS管的管脚SH0\SH1\SH2出自于MFX-V3。两个双运放芯片,共四个运放,三个作为电压跟随器,一个电压放大,最后传到MUC的ADC,采样电阻很明显可以确保最后的电压值不超量程。</span></p>
</div>
<div> </div>
<div><span style="font-size:16px;">看原理图时发现电流测量部分全部集中在一个独立的模块中:Title: IDD measurement / MFX (Multi Function eXpander)</span></div>
<div>
<div style="text-align: center;"></div>
<p> </p>
</div>
<div> </div>
<div><span style="font-size:16px;">虽然原理图上只写了MFX_V3,没写具体芯片,但是在STM32L496 Dis,可以看出是一颗STM32L152CCTB。对于MFX部分,在官网没有找到详细的介绍,只有部分文档里有介绍</span></div>
<div>
<div style="text-align: center;"></div>
<p> </p>
<div style="text-align: center;"></div>
<p> </p>
</div>
<div><span style="font-size:16px;">明白其共有三个作用,触摸、电流测量、IO扩展。但遗憾的是其固件在网上也没有找到,倒是ST的英文社区很多人询问MFX的文档或者源码,几乎也都没有响应,只是让参考Demo接口直接调用。因此,如果覆盖擦除了MFX的固件,想恢复几乎就不可能了,估计也是为了以往万一,MFX的烧写口是引出来了的,但是没有焊接排针。</span></div>
<p> </p>
<p><span style="font-size:16px;">对于MFX的所有操作,被封装成了一个函数指针组成的结构体中</span></p>
<pre>
<code>IDD_DrvTypeDef mfxstm32l152_idd_drv =
{
mfxstm32l152_Init,
mfxstm32l152_DeInit,
mfxstm32l152_ReadID,
mfxstm32l152_Reset,
mfxstm32l152_LowPower,
mfxstm32l152_WakeUp,
mfxstm32l152_IDD_Start,
mfxstm32l152_IDD_Config,
mfxstm32l152_IDD_GetValue,
mfxstm32l152_IDD_EnableIT,
mfxstm32l152_IDD_ClearIT,
mfxstm32l152_IDD_GetITStatus,
mfxstm32l152_IDD_DisableIT,
mfxstm32l152_Error_EnableIT,
mfxstm32l152_Error_ClearIT,
mfxstm32l152_Error_GetITStatus,
mfxstm32l152_Error_DisableIT,
mfxstm32l152_Error_ReadSrc,
mfxstm32l152_Error_ReadMsg
};
</code></pre>
<p> </p>
<p><span style="font-size:16px;">上一篇已经知道了怎么由GUI到具体的应用调用,所以可以忽略上层的调用过程,只看一下电流测量的过程。</span></p>
<p><span style="font-size:16px;">总共七种测量模式,被封装成一个结构体数组:</span></p>
<pre>
<code>Idd_AppliTypedef IddTest=
{
{Idd_RunEnter, Idd_RunRestore, "Run 24Mhz", IDD_RUN},
{Idd_SleepEnter, Idd_SleepRestore, "Sleep 24Mhz", IDD_SLEEP},
{Idd_LprEnter, Idd_LprRestore,"LP Run 2Mhz", IDD_LPR_2MHZ},
{Idd_LprSleepEnter, Idd_LprSleepRestore,"LP Sleep", IDD_LPR_SLEEP},
{Idd_StopEnter, Idd_StopRestore, "Stop2", IDD_STOP2},
{Idd_StandbyEnter, NULL,"Standby", IDD_STANDBY},
{Idd_ShutdownEnter, NULL,"Shutdown", IDD_SHUTDOWN},
}</code></pre>
<p><span style="font-size:16px;">每一种模式,其对于外设的设置就都不一样了,在其函数中体现,其中涉及时钟的总共有三个函数,分别对应不同模式下的时钟设置:</span></p>
<p><span style="font-size:16px;">Idd_ExternalSupply_ClockDecrease,设置系统时钟从80Mhz变为24Mhz</span></p>
<p><span style="font-size:16px;">SystemLowClock_Config,设置系统时钟2Mhz</span></p>
<p><span style="font-size:16px;">在测量时,调用了SystemPeripheralClockDisable,关闭了外设时钟。</span></p>
<p> </p>
<p><span style="font-size:16px;">查看其中的某一个函数:</span></p>
<pre>
<code>void mfxstm32l152_IDD_Start(uint16_t DeviceAddr)
{
uint8_t mode = 0;
mode = MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL);
mode |= MFXSTM32L152_IDD_CTRL_REQ;
MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL, mode);
}</code></pre>
<pre>
<code>uint8_t MFX_IO_Read(uint16_t Addr, uint8_t Reg)
{
return I2C2_ReadData(Addr, Reg, I2C_MEMADD_SIZE_8BIT);
}</code></pre>
<pre>
<code>static uint8_t I2C2_ReadData(uint16_t Addr, uint16_t Reg, uint16_t RegSize)
{
HAL_StatusTypeDef status = HAL_OK;
uint8_t value = 0x0;
__disable_irq();
status = HAL_I2C_Mem_Read(&I2c2Handle, Addr, Reg, RegSize, &value, 1, I2c2Timeout);
__enable_irq();
if (status != HAL_OK)
{
/* Re-Initiaize the BUS */
I2C2_Error();
HAL_Delay(200);
}
return value;
}</code></pre>
<p><span style="font-size:16px;">一些操作被底层抽象成了寄存器,最终调用的是HAL库的驱动函数HAL_I2C_Mem_Read,实现了像操作IIC器件一样去操作STM32L152的效果。这个过程中,可以熟悉MFX的操作流程。</span></p>
<p> </p>
<p><span style="font-size:16px;">最后的实际测试结果:</span></p>
</div>
<div></div>
<div><span style="font-size:16px;">运行模式测量时,屏幕不会熄灭,其他模式会测量时,屏幕会熄灭。待机模式和关机模式会清空之前的测量数据,而其他测量模式不会清空之前的数据。这个操作在回调函数_cbHint里实现的,以及测量完成后的界面绘制。</span></div>
<div><span style="font-size:16px;">按理MFX很强大啊 ST应该推广啊,即使不开源,但是固件可以放出来,为啥整的像很闭塞似的。很奇怪,不理解,<img height="29" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/time.gif" width="32" /><img height="29" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/time.gif" width="32" /></span></div>
<div> </div>
<p> </p>
</div>
<p> </p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> 目前意法半导体的日子也不怎么好过呀,有些技术放开了,就怕别人学去了,不开发,又没有人会,两难。 <p>谈到L152,就会想起以前一个项目,在某宝买回来的芯片,调试LCD死活调不出来,程序编绎、仿真,跑起来都没问题,也不报错,也没警告。只是在仿真时发现,LCD相关的寄存器,不管写什么值进去,再去读取时都没有变化,也就是写不进去,才怀疑芯片是不是有问题,然后找代理申请了几片样品换上去,一切正常。果然国人造假的技术太。。。。。,专坑自己人。后面用微距拍照对比,才发现假货打磨后,芯片表面比原装粗糙很多,然后侧面拍照对比也能发现打磨后的芯片比原装会薄一点点。</p>
hjl2832 发表于 2023-10-30 08:55
谈到L152,就会想起以前一个项目,在某宝买回来的芯片,调试LCD死活调不出来,程序编绎、仿真,跑起来都没 ...
<p>某宝还是偏随意了<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/lol.gif" width="48" /></p>
hjl2832 发表于 2023-10-30 08:55
谈到L152,就会想起以前一个项目,在某宝买回来的芯片,调试LCD死活调不出来,程序编绎、仿真,跑起来都没 ...
<p>那会某宝很多假货吧。。。</p>
<p>它这个电流测量精度还挺高的,ST的板子做的确实还是很好的!业界标榜。</p>
lugl4313820 发表于 2023-10-30 07:00
目前意法半导体的日子也不怎么好过呀,有些技术放开了,就怕别人学去了,不开发,又没有人会,两难。
<p>相比其他半导体,TI和ST这点做的感觉已经很好了</p>
wangerxian 发表于 2023-10-30 18:34
它这个电流测量精度还挺高的,ST的板子做的确实还是很好的!业界标榜。
<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/lol.gif" width="48" />方便验证原始程序</p>
hjl2832 发表于 2023-10-30 08:55
谈到L152,就会想起以前一个项目,在某宝买回来的芯片,调试LCD死活调不出来,程序编绎、仿真,跑起来都没 ...
<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan63.gif" width="69" />国人专坑国人,这话不是没道理的</p>
数码小叶 发表于 2023-10-30 19:45
国人专坑国人,这话不是没道理的
<p>不过这次经历也让我涨知识了,从此多了一个识别假芯片的方法,手机微距拍照。打磨后表面粗糙度也大的颗粒感,比正常芯片表面粗糙多了。</p>
<p>反正看字是看不出来多少差异的,因为都是用激光刻,字体很容易搞成一样,但是表面处理它们就没办法保持跟没打磨前一样了。</p>
页:
[1]