【经验】C8051单片机Flash失效分析
最近,有客户反馈在使用SILICON LABS C8051Fxxx单片机过程中,Flash有出现程序丢失或者代码被改写的现象,出现这种情况只能重新下载代码到Flash中,系统才能恢复工作。在这里我们统称为Flash失效,这种情况如果在产品中出现后果很严重。Flash失效有软件操作上的原因,也有可能是硬件的问题。软件操作上的问题比较容易解决,如果硬件上的问题解决起来难度大些。下面就Flash失效的问题进行根因分析以及提出解决办法。
一、软件引起的失效
1、访问包含LockByte页引起的失效
C8051Fxxx系列高保密性体现在,Flash中有LockByte的设置来保护某一页或多页的内容不可被非法访问。当在LockByte中设置其他任一页被保护,那么包含LockByte的这一页默认是被保护的。如果用户代码试图擦除包含LockByte的这一页,可能引起整个Flash空间的代码被擦除。
规避措施:
访问包含LockByte的页时要谨慎,不要在用户代码中试图去擦除包含LockByte的页面。
2、Firmware对Flash写入操作不当引起的失效。
在Firmware中可能会出现对Flash的操作,比如将程序运行过程中得到一些数据写入Flash进行保存。那么这个时候,如果程序处理流程不当可能会引起Flash中的其他代码被改写。
1)当PSWE(Flash写使能位)=1(和PSEE(Flash擦除使能位)=1)时,Firmware用MOVX指令向意料之外的XRAM空间写入了数据,则会造成Flash空间代码被修改或擦除。
2)如果在Flash写入过程中,有中断产生并且中断服务向XRAM空间写入了数据,这时Flash会被错误的修改。
3)当PSWE=1并且Flash写指针处于XRAM空间时,Flash写指针错误的指向则会造成Flash被修改。
规避措施:
1)在设置PSWE=1之前禁止任何中断。
2)当PSWE=1时不要更新Flash写指针或者其他变量。
3)减少PSWE=1和PSWE=0之间的指令数目。
4)将Flash写指针定位在idata或者data空间(不要定义在xdata或者pdata空间,谨慎使用存储器Large模式和Compact模式)。
5)用反汇编窗口观察PSWE=1和PSWE=0之间的指令。
6)在一个程序中只使能一次PSWE和使能一次PSEE(可以设计两个函数,一个用于Flash写,另外一个用于Flash擦除)。
3、PC指针跑飞引起的Flash失效
在某项目中使用C8051F04x中出现这种现象:在做可靠性测试时,MCU内部寄存器被改写,PC指针跑飞。如果这时PSCTL的PSWE位被意外置1,PC又恰好访问到XRAM空间,Flash就会被错误改写或者擦除。
规避措施:
在Flash操作子程序外面设置一个状态变量FlashWriteOK,只有当FlashWriteOK=0xA5时,才允许调用Flash操作子程序,可以在一定程度上避免对Flash的误操作。
4、VDD Monitor处理不当引起的Flash失效
C8051Fxxx单片机内部有VDD监视电路,在Flash写入过程中,如果VDD出现异常(低于2.7V),而这时又没有将VDD异常作为复位源,则Flash操作可能会出现异常而导致失败。
规避措施:
在进行Flash写入之前使能VDD Monitor(有些MCU是通过外部管脚置高,没有硬件使能的MCU可以通过寄存器设置),同时,要将VDD Monitor作为复位源(在RSTSRC中直接将PORSF位置高,注意:对RSTSRC的操作不能用“|”或“&”的方式操作,而应直接写入,比如:RSTSRC=0x02而不要RSTSRC&=0x02)。
5、另外,在调用Flash操作子程序之前加一定的延迟也可以防止Flash误操作。
二、硬件引起的Flash失效
当程序中包含有Flash写入或者擦除操作程序时,电源失效、过慢的VDD爬升时间、时钟线上的毛刺、超高/低温都可能会引起Flash失效。
1、电源失效
电源失效可能会引起Flash失效。
规避措施:
1)使能VDD Monitor,并将VDD Monitor作为复位源。
对于没有MONEN管脚的器件:
在STARTUP.A51中,使能VDDMON和将VDDMON作为复位源;
在执行写或者擦除Flash操作前使能VDDMON和将VDDMON作为复位源。
2)确定在写RSTSRC寄存器时是显示的将PORSF写为“1”。
只用RSTSRC=xx的方式,而不要使用RSTSRC |=xx或者RSTSRC &=xx的方式。
2、时钟毛刺引起的失效
MCU的Flash对时钟毛刺敏感,可能会引起Flash失效。
规避措施:
1)如果系统需要精确度高的时基并且工作在高噪声的环境,时钟源建议使用CMOS时钟而不采用晶体振荡器来减少时钟毛刺。
2)在MCU内部将外接时钟源二分频后作为系统时钟,减少时钟毛刺的影响。
3)外部时钟电路优化:时钟电路尽量靠近MCU时钟管脚;时钟电路被地包围;时钟线尽量短;时钟线上加RC滤波电路。
4)精度允许的情况下尽量采用内部时钟作为系统时钟。
5)如果系统是外接时钟源,在进行Flash操作时切换到内部时钟,操作完毕切换到外部时钟。
3、VDD爬升时间过长引起的Flash失效
如果有MONEN管脚并在硬件上拉高,在VDD上升过程中,MCU会一直处于复位状态。而对于某些器件,VDD Monitor是靠内部寄存器使能的,并在初始化时是Disable状态(如F300,F310,F330等器件),在VDD上升过程中,系统复位是靠外部复位信号起作用。这时,如果VDD上升时间大于外部复位信号有效时间,则系统复位不完全,内部寄存器可能存在不确定状态,系统程序可能会进行错误的Flash操作。
规避措施:
1)检查电源质量,要求VDD上升时间满足芯片规定的值。比如,对于F300、F310和F330等器件,其允许的VDD最大上升时间是1ms。
2)在芯片/RST管脚上接RC上电复位电路:100欧电阻上拉到VDD,0.1uf~1uf电容接到GND;直接将/RST管脚上拉到VDD的做法是不可取的。
3)直接在/RST管脚上接一个电源监视电路:如MAX6464、MAX706等。
以上措施都经过严格反复实验,经过如上措施规避,Flash程序丢失或者改写的现象没有再发生。
相关技术文档:
Silicon Labs 高速、低功耗、超高性价比MCU选型指南 详情>>>
- |
- +1 赞 0
- 收藏
- 评论 7
本网站所有内容禁止转载,否则追究法律责任!
评论
全部评论(7)
-
用户_2169 Lv8 2018-12-29不错不错
-
墨菲 Lv5. 技术专家 2017-12-28好文章
-
luose Lv8. 研究员 2017-10-14学习学习哈
-
Qin Lv7. 资深专家 2017-09-19不错的文章
-
Tristan Tsai Lv5. 技术专家 2017-07-31再看一遍,还是超赞的
-
yxf Lv7. 资深专家 2017-07-29总结的不错,收藏了
-
Tristan Tsai Lv5. 技术专家 2017-07-27这个文章很不错,flash问题比较普遍
相关推荐
【经验】PCB布线技巧:8位单片机端口Crossbar功能的使用及配置
如果单片机自带Crossbar功能,只要软件配置调整一下各端口功能,PCB布线就会畅通。
设计经验 发布时间 : 2017-08-09
【经验】如何正确使用8位MCU的PortMatch功能
Silicon Labs的8位MCU(C8051和EFM8)都具有PortMatch功能,此功能允许一个或多个端口IO引脚上的逻辑电平变化触发系统事件。
设计经验 发布时间 : 2018-02-08
【经验】如何进行IC FLASH程序存储器写入安全字节?
SILICON LABS推出C8051F系列单片机产品项目在开发时为了预防FLASH程序会被修改,通常软件工程师会对该IC FLASH程序存储空间进行加密。
设计经验 发布时间 : 2018-02-12
C8051F系列MCU是否兼容5V系统?
C8051F MCU不同的系列,供电电压范围不同,如C8051F5XX系列MCU的供电范围为:1.8V~5.25V,C8051F33X系列MCU的供电范围为:2.7V - 3.6V。
技术问答 发布时间 : 2017-05-05
8位混合信号单片机能够降低汽车电子设计的成本和复杂度
芯科科技提供的是C8051F58x单片机提供了高精度的振荡器,高精准的电压参考器,5V整流模块等相当多的片上外设,这些让混合信号单片机在汽车电子系统设计中的应用系统的设计难度降低了,并减少了元器件的数量和印制板的尺寸。
新应用 发布时间 : 2019-07-23
USB 桥接器CP2102和CP2102N有什么区别?
CP2102N是CP2102的升级版本,包含三种封装可选QFN20,QFN24,QFN28。最大可以支持到3Mbps,支持4~7个GPIO,支持RS485总线,USB接口内部含有ESD保护二极管。详情可以参考Silicon labs AN976:CP2101/2/3/4/9到CP2102N过渡指南。下载地址:http://www.sekorm.com/doc/49405.html
技术问答 发布时间 : 2017-05-04
主控MCU通过C2接口对EFM8BB10F8G MCU的Flash存储器进行读写操作,存在概率性失败。从Flash存储器中读数据也是异常,请问这时什么原因导致的?
检查程序中的中断设置,发现是有一处读操作没有关闭中断导致的,将中断关闭后,对EFM8BB10F8G MCU的Flash进行读、写,存在概率性失败的情况得到解决。因为主控MCU用的是ARM芯片,运行的是linux操作系统,所以主控MCU通过C2接口对EFM8BB10F8G MCU的Flash存储器进行读写操作的函数也是以驱动程序的形式存在的,并且系统中各种软硬中断也比较频繁,因此相对时序控制上也需要更加严格,才能保证可靠的读写操作。
技术问答 发布时间 : 2016-10-25
【产品】一款内置液晶面板驱动器和闪存的16位超低功耗RISC微控制器
爱普生(EPSON)推出的S1C17701,其休眠时为1μA,32.768kHz的工作频率、空闲时为2.5μA,工作时为13.5μA,适合遥控器、运动手表等典型应用。
新产品 发布时间 : 2018-02-26
8位MCU C8051F020使用比较大的程序进行仿真,仿真失败,怎么回事?大程序无法仿真是芯片本身特征决定的还是开发环境,或仿真器的问题?
软件断点支持数量和开发环境有关系和程序大小没有关系。可以尝试升级KEIL C51到比较新的版本,确保编译的程序能执行到断点处。可以在需要打断点的地方配置一个GPIO输出低,200ms高,200ms低,用示波器或者LED灯来测试程序。
技术问答 发布时间 : 2017-07-06
世界上最节能的微控制器EFM32之十大低功耗奥秘
Silicon Labs EFM32 32 位微控制器系列是世界上最为节能的微控制器,特别适用于低功耗和能源敏感型应用,包括能源、水表和燃气表、楼宇自动化、警报及安防和便携式医疗/健身器材。本文着重强调10个Silicon Labs32位MCU功耗低的因素。
新产品 发布时间 : 2016-07-11
【产品】最大工作频率48MHz的微控制器,嵌入式应用最佳选择
Silicon Labs新推出微控制器EFM8UB3系列,Flash容量为40kB,在512字节扇区内支持在线可编程,提供非易失性数据存储,同时支持固件的现场升级。提供独立的片上系统解决方案,具有多功能的外设接口。
新产品 发布时间 : 2018-02-08
Silicon Labs(芯科科技) C8051F99x/C8051F98x MCU 数据手册
型号- C8051F997-C-GU,C8051F991-C-GM,C8051F989-C-GU,C8051F996-GM,C8051F997-C-GM,C8051F990-C-GMR,C8051F980-C-GMR,C8051F989-C-GM,C8051F996-GU,C8051F996-C-GUR,C8051F98X,C8051F996-C-GM,C8051F988-C-GU,C8051F982-C-GM,C8051F990-C-GM,C8051F996-C-GMR,C8051F996-C-GU,C8051F988-C-GM,C8051F983-GM,C8051F987-GM,C8051F981-GMR,C8051F987-C-GM,C8051F981-C-GM,C8051F987-C-GU,C8051F991-GM,C8051F99X,C8051F996-GMR,C8051F988-GM,C8051F996-GUR,C8051F988,C8051F989,C8051F991-C-GMR,C8051F986,C8051F990-GM,C8051F987,C8051F980-GMR,C8051F980,C8051F985-GM,C8051F981,C8051F985-C-GM,C8051F981-C-GMR,C8051F985,C8051F982,C8051F989-GM,C8051F983,C8051F990-GMR,C8051F997-GM,C8051F997,C8051F986-C-GM,C8051F997-C-GMR,C8051F991,C8051F983-C-GM,C8051F990,C8051F982-GM,C8051F986-C-GU,C8051F996,C8051F997-C-GUR,C8051F980-C-GM
单片机EFM8BB10F8G具有Timer0、Timer1、Timer2、Timer3,请问使用16位定时器自动装置功能,可以选用哪些定时器?
单片机EFM8BB10F8G使用16位定时器自动装置功能可选Timer2和Timer3,Timer0和Timer1只支持8位定时器自动装置功能。
技术问答 发布时间 : 2016-10-25
【技术】如何将无限制版的Keil C51嵌入到Silicon labs IDE中调试
如果要编译超过4K代码的C程序,必须购买正版Keil并安装好,再把IDE中编译和链接文件的路径指定到Keil中的编译和链接文件所在的位置。
技术探讨 发布时间 : 2017-08-18
C8051F9系列MCU的IO口漏电流是多少?
C8051F9系列MCU的IO口漏电流典型值为25uA。
技术问答 发布时间 : 2017-05-05
电子商城
现货市场
服务
可定制板装式压力传感器支持产品量程从5inch水柱到100 psi气压;数字输出压力传感器压力范围0.5~60inH2O,温度补偿范围-20~85ºС;模拟和数字低压传感器可以直接与微控制器通信,具备多种小型SIP和DIP封装可选择。
提交需求>
定制水冷板尺寸30*30mm~1000*1000 mm,厚度1mm~50mm,散热能力最高50KW,承压可达3MPA;液冷机箱散热能力达500W~100KW。项目单次采购额需满足1万元以上,或年需求5万元以上。
提交需求>
登录 | 立即注册
提交评论