发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印
[APM32F1]

一个案件让你了解APM32芯片IO的VIH VIL

[复制链接]
1307|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 onemoren 于 2025-5-14 17:30 编辑

#技术资源# #有奖活动# #申请原创# @21小跑堂

一个案件让你了解APM32芯片IO的VIH VIL
问题描述:使用APM32芯片做产品,产线批量烧录后做功能测试,有5%样机上电运行时会闪屏,排查发现是IIC总线一直处于BUSY,IIC为MCU内置模块,引脚为PB10/PB11。IIC相关连接如下图示。除IIC外其它功能正常;
           


2.2 人工复现
● 测试方法:PCB板上电12V,观察SCL/SDA波形变化。
● 测试结果:与产线反馈现象相同,板子上LED快闪,复现异常现象。检查波形,确认图中1位置SCL与SDA存在异常掉电,最低低于1.5V。此时SCL/SDA电平低于IIC总线正常电平,会导致0/1逻辑误判进入BUSY状态(逻辑分析仪此时也发生了误判,不停跳变)。
3.1 电源信号检查
● 测试方法:IIC信号线是上拉到LCD电源的,故同步检查VDD/LCD电源波形
● 测试结果:如图1位置,MCU电源VDD电平正常。但是LCD_3V3电源存在异常掉电,而IIC信号线是上拉到LCD_3V3电源的,LCD_3V3电源掉电会导致SCL/SDA电平异常。
3.2修改SCL上拉电源
● 测试方法:修改SCL使用MCU上拉电源:LCD_3V3改为VDD,排除SCL掉电影响,观察现象。
● 测试结果:busy现象消失,板子上LED正常慢闪。对比波形,图中1位置SCL波形下降幅度减少,不会低于2V,故逻辑分析仪也不会误判,SCL持续保持高电平。SDA波形依旧有异常降低,但是当LCD_3V3掉电恢复后,SDA最后必然存在上升沿,符合STOP条件波形(SCL高,SDA上升沿),不会造成BUSY状态。
3.3 VIL/VIH对比
● 测试方法:引脚的逻辑电平取决于VIH/VIL。将芯片拆下,测试IIC两引脚PB10/PB11 VIH/VIL电平;
● 测试结果:实测不同芯片的VIL/VIH不完全相同。抽样仓库芯片正常片,实测值在SPEC范围内。注意到下表中1#NG芯片的SCL VIL为1.4V,SDA为1.44V,在上拉电压掉落的过程中,SDA理论上会先由1变0,SCL理论上会后由1变0,这就形成了START条件,触发忙标志。
样品
PB10 VIH
PB10 VIL(SCL)
PB11 VIH
PB11 VIL(SDA)
NG#1
1.68
1.40
1.64
1.44
仓库#11
1.68
1.44
1.64
1.44
仓库#12
1.68
1.44
1.68
1.44
仓库#13
1.68
1.44
1.68
1.44
仓库#14
1.68
1.44
1.68
1.44
3.4 IIC BUSY状态验证
● 测试方法:测试SCL/SDA不同的时序,对BUSY状态的影响。
● 测试结果:由下表第2行数据可以看出,SDA比SCL稍提前下降,就能触发START信号。SCL/SDA突然掉电再回升对逻辑时序的影响,可能会触发START而无法触发STOP,导致总线一直处于BUSY状态。具体验证结果如下表与波形图。
SCL与SDA同时掉电时序
对START信号影响
STOP信号影响
SDA比SCL提前270ns下降
可以触发START,总线进入BUSY
/
SDA比SCL提前60ns下降
可以触发START,总线进入BUSY
/
SDA与SCL同时下降
无法触发START,总线不会BUSY
/
SDA比SCL延迟60ns下降
无法触发START,总线不会BUSY
/
SDA比SCL延迟270ns下降
无法触发START,总线不会BUSY
/
由下表第3行数据可以看出,SDA与SCL同时上升,不能触发STOP信号。而此案中SDA/SCL在掉落电压后回升过程中,SDA/SCL是同时上升的。
SCL与SDA同时上电时序
START信号影响
STOP信号影响
SDA比SCL提前270ns上升
/
无法触发STOP,总线一直BUSY
SDA比SCL提前60ns上升
/
无法触发STOP,总线一直BUSY
SDA与SCL同时上升
/
无法触发STOP,总线一直BUSY
SDA比SCL延迟60ns上升
/
可以触发STOP,总线解除BUSY
SDA比SCL延迟270ns上升
/
可以触发STOP,总线解除BUSY
3.5 VIL、VIH角度分析
在SCL/SDA掉电的场景中,如果IO电平不在手册中规定的VIL/VIH电平范围内,会出现逻辑判0、判1异常的情况。如果要得到逻辑0,根据数据手册中VIL的最大值,SCL/SDA电平需要掉到1.36V以下;如果要得到逻辑1,根据数据手册中VIH的最小值,SCL/SDA电平需要升到1.85V以上。此案应用场景出现了1.4V左右的电平(在1.36V-1.85V的区间),需要MCU判0、判1,则会出现误判风险。

  综合分析来看,此案应用场景遇到的失效现象发生过程为:程序运行过程中,IIC上拉电源LCD_3V3发生10ms以上、1.4V左右的异常掉电。SCL/SDA在上拉电源突然掉电再回升的过程中,SCL/SDA电压和逻辑时序(ns级别)的组合会存在触发START而无法触发STOP的可能,导致总线一直处于BUSY状态。
  在SCL/SDA掉电的场景中,如果IO电平不在手册中规定的VIL/VIH电平范围内,会出现逻辑判0、判1异常的情况。如果要得到逻辑0,根据数据手册中VIL的最大值,SCL/SDA电平需要掉到1.36V以下;如果要得到逻辑1,根据数据手册中VIH的最小值,SCL/SDA电平需要升到1.85V以上。此案的应用场景出现了1.4V左右的电平(在1.36V-1.85V的区间),需要MCU判0、判1,则会出现误判风险。
  受到制造工艺影响, 每个芯片个体VIL/VIH的实际电压有差异(返回芯片的实测值在手册范围内),应用场景需满足手册中关于VIL/VIH电平参数的规定
  规避方法:优化PCBA硬件电路,使IIC的SCL/SDA上拉电源稳定,预防电源过低掉电电压的情况。

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 50.00 元 2025-05-20
理由:恭喜通过原创审核!期待您更多的原创作品~~

评论
21小跑堂 2025-5-20 17:58 回复TA
由APM32的IIC外设异常引起的MCU GPIO的VIH VIL测试思考,作者对问题的现象捕捉灵敏,并通过大量实验探究VIL/VIH的深层思考,态度值得肯定,测试方法和结果具有较高的价值。 
沙发
jobszheng| | 2025-5-15 00:24 | 只看该作者
这种busy死锁现象多半发生在从设备上面。
其实,主设备强制复位一下可以增加很大的稳定

使用特权

评论回复
板凳
zjsx8192| | 2025-5-15 08:19 | 只看该作者
学习了,以前iic总有这样或者那样的问题

使用特权

评论回复
地板
dffzh| | 2025-5-15 09:02 | 只看该作者
之前主机那边也遇到一个关于IIC的偶发性Bug,就是设备上电IIC锁死的;
IIC应用过程中是不是好像比其他总线(UART、SPI)容易出问题?如果软硬件设计不好的话。

使用特权

评论回复
5
真的问题不大| | 2025-5-15 10:16 | 只看该作者
dffzh 发表于 2025-5-15 09:02
之前主机那边也遇到一个关于IIC的偶发性Bug,就是设备上电IIC锁死的;
IIC应用过程中是不是好像比其他总线 ...

确实是,多主多从,所有设备挂在两根线上,出错概率大大增加

使用特权

评论回复
6
cooldog123pp| | 2025-5-15 13:18 | 只看该作者
他们家芯片没用过,但是看楼下说上电IIC锁死,很好奇是什么现象,就是两个总线一直拉高么?

使用特权

评论回复
7
穷得响叮当侠| | 2025-5-15 18:50 | 只看该作者
这个案例分析得很透彻,通过实际问题来理解VIH和VIL的概念非常有帮助。

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

58

帖子

2

粉丝