今天,笔者要为你们分享一个由SD引起的灾难,以及该灾难被咱们项目组攻克的技术案例。web
去年上半年,咱们公司承接了某大型广告公司的电梯广告显示屏的项目,该产品使用了飞思卡尔的IMX6系列芯片做为主控CPU,具有媒体人机触摸互动、媒体投放、远程升级、录像监控等功能。其中很重要的一项功能就是监控和保存功能,因客户的报价较低,咱们理所固然的选择了SD卡做为录像数据的保存介质。函数
没想到,灾难半年后就降临了,半年前发货的10K机器,每月都有10%的损坏率,损坏的机器90%都是SD卡损坏了!关键的监控视频信息所有丢失,客户不但要求咱们赔偿SD卡的损失,延长质保期,并且威胁一个月内不解决将终止合做,客户是老板的惟一大客户,丢失这个客户咱们离解散就不远。老板甚至放下狠话:一个月内不解决,大家跳槽,我跳楼。测试
项目组首先从客户的使用的电梯的场景入手,场景的特色以下:spa
一、电梯内部布满各类通讯线、音视频线、电力线,互相之间的干扰很是严重设计
二、电梯内的广告机天天晚上12点至早上6点回自动断电,白天自动上电视频
三、广告机只要开机就须要一直录像,保存到本地的SD卡中。blog
因而咱们首先模拟现场的应用场景,第一个场景公司内部没法模拟,因而先模拟第二和第三个场景,事设备上电10分钟,掉电5分钟,只要一上电就开始录像,提升上下电的频率。样本数量使用了50台。产品
实验第一天,SD卡损坏0张;it
实验次日,SD卡损坏1张;class
实验第三天SD卡损坏3张,一直到实验到第6天,SD卡一共损坏8张。
咱们基本找到SD卡损坏的缘由:就是设备上下电致使的。因而你们分头行动,从硬件和软件、驱动着手,分析掉电可能引发的缘由。
首先是驱动工程师查阅MMC的规范“JESD84-B45”时有发现,以下图1所示
图1 :JESD84-B45规范中掉电的要求。
文中大概的意思就是,主机在掉电关闭设备前,应该通知SD卡控制,由控制判断掉电的紧迫性,从而进入对自己设备的保护模式,而且在这以前,应该保持设备的电源处于工做范围以内。
继续查阅SD卡2.0规范中,SD卡的标准只保证在读数据过程当中,意外断电和移除能够对数据进行保护,对写和擦除过程当中的掉电的,彻底没有把握保护数据,也就是SD卡内部的自己固件、用户数据都是有可能丢失的。
图2:SD 2.0标准中对SD卡的保护阐述
经过查阅相关的规范,咱们知道了缘由的所在,就是咱们的设备在断电的时候,还在录像保存数据,进行不断的写和擦除SD卡的操做。
通过讨论,咱们采用了以下的方案。.其中,方案的核心主要有3个
第一:掉电检测电路;
第二:超级电容继续供电电路
第三:掉电后软件处理机制。
图3:SD卡掉电保护的处理过程
下图4是掉电检测电路,能够精准的检测一旦电压跌落至10V(电源为12V供电),立刻送掉电信号给CPU。
图4:掉电检测电路
下图5是超级电容的充放电电路,增长该电路可使掉电后继续维持2秒钟的时间,使CPU完成掉电后的保护处理工做。
图5:超级电容充放电电路
通过了上述的整改,咱们生产了50台设备,进行连续7天24小时,10分钟一个循环的上下电测试,没有一台设备的SD卡损坏,证实了上述方案可行。老板的楼,终于不用跳了。
经验总结,其实CPU原厂提供的DEMO参考设计,基本都是处在能用的状态,离真正的高可靠应用,还有很大的距离,须要咱们工程人员的不断挖掘和积累。才能设计出高可靠性的产品。
创易栈小编点评:
上述案例Flash的损坏是供电系统不稳定形成,电源电压的异常可能会致使系统单片机系统工做异常的现象,如输出电压小于单片机系统工做所需的最小电压,输出电压不干净,噪音严重等,这些很容易引发单片机内部电路的逻辑紊乱。
Flash的读写信号处于不稳定状态,可能产生知足Flash的写操做,从而给系统带来严重的损害。针对以上状况,能够在系统中加入电源监控芯片或使能MCU自己的电源监控电路,在电源异常的状况下禁止对Flash区域操做。
除了电源失效,会形成Flash损坏的常见缘由还有如下几种:
一、用户代码对Flash的误操做不当引发程序丢失或被错误改写
例如,在有对Flash写入或擦除操做的代码中,若是用户误调用了写入或擦除函数或者因为程序跑飞而刚好执行了Flash擦除或写入函数,这天然会致使数据丢失或改变。
针对以上状况,能够在程序中设置多个容许操做的变量,当执行写入或擦除操做时,对这些变量进行判断,只有条件所有知足时,才执行相应的操做。
在一些不须要进行擦除或写入操做的系统中,对存储区进行写保护或擦除保护设置,能有效的防止数据被意外修改。作到了写入或擦除的可控性,基本能够避免此种状况发生。
二、系统时钟不稳定
不管对于内部Flash仍是外部Flash,系统时钟的不稳定,都将致使MCU得不到可靠的工做时序信号,从而在读写Flash时产生不可预料的后果。
三、环境干扰
环境干扰的可能缘由不少,如生产过程当中的高温焊接、静电、使用环境的温湿度,强磁场等,均可能影响到Flash或整个系统的稳定。环境干扰的因素不少,在此不展开讨论。