经验之谈 - 上电缓慢引发I2C异常的详细调试记录

文摘   科技   2024-01-17 21:38   广东  

Keep Moving 

保持·热爱

电源驱动弱

总结

软硬调试

导致电压的跌落



涉及软件、硬件的逻辑分析

详细记录调试过程,应该对初学者有所帮助

高精度的,分压法测量电阻



概述

前言

项目研发过程中,往往大部分问题都能很快解决,但这个解可能只是规避性的,没有挖出病灶,这事实上不利于我们技术成长。刨根问底,每一个现象都要有合理的解释。


其中的分析问题、制定实验、实验结论分析等,往往都可采用一套固定的思维方式,而这转化为我们的技术沉淀。


下文涉及:电源、台式万用表、示波器接地弹簧、MSP430i、铁电存储器


问题概述

电源系统是个大学问。若功率过小,系统上电瞬间因容性负载等,会产生较大的电流,此时电源无法供应这个电流,于是电源电压被拉低。我给负载提供电流,一开始怎么也喂不饱负载,我的输出电压被迫拉低,随着负载慢慢吃饱,输出电压逐渐上升到我的设定值。


电源上升变缓,引发不同IC因工作电压差异导致的时序控制问题,这种异常,软件、硬件都有解。



问题分析

实验链表             

              链表描述

问题由来

某天硬件同事跟我说,这块小板上电后有问题,发指令没有响应。我看了一下,各个电源指示灯正常,基本表明电源没有问题。操作了一遍,确实没有反应。


常规排查,测量IC各个电压

小板的主控是MSP430i,根据其数据手册,测量几个关键信号:

www.ti.com.cn/product/cn/MSP430I2041


使用安捷伦的6位半万用表,电压档,设置1PLC


1. 差分模拟通道A0、A1共4个pin

  • 正常,未超出1.1V左右的VREF

2. VREF引脚,1.1V左右,读值无剧烈跳动

3. VCORE引脚,1.8V左右,读值无剧烈跳动

4. pin15的RST引脚,高电平(该引脚需4.7K上拉,对地电容 ≤ 10nF)

5. 数字3V3正常


拆卸板子,单独调试

一通常规检查无异常后,把板子拆下来,拿到工位上,接上我的12V、24V开关电源。连接PC,串口助手下发指令,有应答,神奇了!

板子核心功能分析:

  • 控制电压

  • 电压、电流测量

  • 还有就是铁电存储器的读写


硬件同事的调试环境:

  • 一个大模组加上这块小板

  • 由一个24V电源适配器供电

  • 电源适配器的电流较小2A,目前调试阶段,这个电流也足够


根据目前情况,进一步分析

苦思无果,吃午饭去了。下午突然联想到前段时间调试的另一块上电后无法正常运行的板子,当时是:

  • SPI设备未进行电气连接

  • 主SPI没有超时处理

  • 程序在初始化的过程死等SPI状态,导致卡死。


抓I2C波形,不就可以确定软件有没有跑起来吗。同时也值得怀疑I2C通信状况。固件是我写的,软硬件初步调通后交付给同事:

  • 系统上电后需先从铁电存储器读取数据

  • MSP430Ware旧版本,I2C外设库存在多处死等操作


CSS IDE上打开资源浏览器,可找到MSP430Ware,下载安装:

安装后,IDE安装路径多出一个:

X:\Program Files (x86)\ti\msp430ware_3_80_14_01

外设库在该目录下的:.\driverlib\driverlib


抓I2C波形,继续实验

拿回硬件同事那里,用逻辑分析仪抓 I2C波形。乍一看波形没有问题,有一个地址出来。仔细一看,协议解析报NACK。好家伙,I2C无超时处理,NACK将导致MCU卡死。


断电,测量铁电存储器通信引脚,对地阻值正常。怎么理解?拿泰克示波器过来:


卸下探棒的钩子、接地鳄鱼夹,接上接地弹簧:

数字3V3没多少噪声,正常啊。


示波器抓I2C波形

勾好信号,系统上电,抓波形,有意思了:


理想的波形应该这样:


电压都没有平稳,波形就发出来了。赶紧抓数字3V3:


合理了。我用的是20多A的开关电源,而现在采用2A的电源适配器,上电瞬间带不动,导致系统电源上升缓慢。


尝试修复

在3V3上升阶段,我就发出I2C波形,铁电存储器怎么不回我?加个延时吧,避开这段上升期,看这波形,估摸着给个100ms:

有效果,发指令有应答了!


查看规格书,深入分析

它不回我,是不是它还没准备好,翻规格书:


近乎无限次数擦写的铁电存储器:


我悟了,MSP430工作电压更低,波形都送上门了,铁电存储器还未完成上电,无法应答I2C,导致单片机一直死等通信状态标志。看来得抽空补上超时处理。



解决问题

更换电源的实验

控制变量法:

  • 去掉100ms延时,恢复原状

  • 对硬件同事搭建的调试平台下手,由开关电源供电

果然,MSP430i 也正常了。


软件可以先加延时处理。但为了提高软件的响应速度,后续这个延时还是要去掉。


而这套系统设计是采用开关电源供电的,也就是说正常情况下,不会出现这种电源功率过小,引发上电缓慢的问题。


总结

这是一个因软件未作超时处理,硬件的电源功率过小,而提前暴露出来的bug。如果作了超时处理,反而这个问题没有那么容易发现,左右尴尬。


可以肯定的是:

  • 固件任意地方都不能死等,要有超时处理机制

  • 电源上升缓慢时,不同IC上电有差异,可能引发异常,好在可以尝试用软件兼容





-END-


碎片聚合
求真务实
 最新文章