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

【经验分享】RAM 上电后初始值问题一例

[复制链接]
STMCU小助手 发布时间:2022-2-21 20:29
前言* }% L& _& F0 H" o! O' L; P
本篇 LAT 的内容简介了一个由 RAM 上电后初始值引起的问题。' s* w( m# `. V+ k) t& t

+ n# w, Z9 h+ ~- |9 F4 G2 p问题+ y+ ~7 u! t: O+ M+ k
客户反映,某产品试生产时出现问题,故障率在 10%左右。该故障可以复现,并且将芯片(MCU)更换到新的电路板也无法解决。因此,客户怀疑是芯片出现质量问题。
0 m# S4 |; M+ M) C+ a0 l  ^: W! o/ h4 T( g+ `* v# m
. V& {7 U9 E# p0 ?* @+ S' k
分析" p0 Y7 n& N5 c6 Y9 }. ]5 |. V
粗看下来,故障确实比较象是由于芯片本身质量引起的。但是仔细查看代码,发现程序中有一段值得怀疑。该部分代码利用 RAM 中某个字节的值来判断芯片是否发生过掉电,并据此执行不同的分支。一般而言,在芯片上电以后但是没有进行初始化之前,那么 RAM(这里不包括寄存器)中的值是随机的。客户开发时曾询问过这一点,所以开发时加以利用。8 |  h; h, i/ [4 S9 g! `
那么,究竟该怎么理解这个“随机”呢?
$ a: b/ [. U& D这里“随机”的意思是,任何值都是可能的。因此,当芯片发生若干次掉电上电时,对同一个 RAM 字节来说,里面的值可以每次都不一样,也可以每次都一样,也可以有时一样有时不一样。因此,应理解这个“随机”为“不保证为任何值”。
4 ~& T, w- c" J1 J而客户恰恰认为,既然是随机的,那么每次值都应该是不同的。# L/ `" H; e; f$ g3 Z
- J- ^+ \+ P$ Y" J2 j* @; O, V3 T

( O' {! N( E, o6 v* v! v9 p处理3 c0 v! R# W) {4 |
综上分析过程,尽管思路是完全可行的,但是由于对“随机”的含义理解错误,所以程序中只判定RAM 中一个字节的值存在一定的风险。0 T% _$ ~$ k5 ~4 y6 }2 Q
解决方法是在判定条件中,将判断 1 个字节的值更改一下,例如判断 3 个字节(或者更多)的值是否相同(可以使用多数判决)。同时,选取这 3 个字节的时候,尽量使得它们的地址分散一些。这样,误判的概率就大大降低。
- B" V4 r2 \" o0 c/ S! \( s, T对于某些芯片来说,还有其他的判断方法。例如,对于 STM32 系列来说,在寄存器 RCC_CSR 寄存器中的最高位一般都是上电标志;此外,对于部分产品,还可以在 BKP_DR(或者是 RTC_BKP 之类,根据产品不同)寄存器中写入特定序列来判断。9 Q2 ]0 m) k2 {8 R
/ i; p" d; i/ x
4 x) l: x7 e1 t: N/ u( i) S
结论- g, O4 @) ^* G& ?' s2 ~9 @% m; }0 C
此例实际上是由于对“随机”一词的理解不同造成的问题,而非芯片质量问题。经过重新修改程序后,该问题不再出现。
+ g* k* N5 Q/ N
/ V; a$ W0 X% F: l& G' A% O, M+ i
赞 收藏 评论0 发布时间:2022-2-21 20:29

举报

0个回答

所属标签

相似技术帖

官网相关资源

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