【经验】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问题比较普遍
相关推荐
Silicon Labs(芯科科技) 8 bit 集成开发环境 (IDE)
描述- Silicon Labs(芯科科技) 集成开发环境 (IDE) 是一个完整独立的软件程序,其包含项目管理器、源代码编辑器、源代码级调试器和其他实用工具。第三方开发工具链的 IDE 接口,可为系统设计者提供完整的嵌入式软件开发环境。IDE 支持全部的 8 位微控制器 (MCU) 组合。
SILICON LABS 8-bit Microcontroller选型表
SILICON LABS 8位MCU选型,MCU Core 8051,频率20MHz~100MHz,Flash存储2kB~120kB,RAM存储0.25kB~8kB。
产品型号
|
品类
|
系列
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Vdd min(V)
|
Vdd max(V)
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
Dig I/O Pins
|
ADC 1
|
Temp Sensor
|
Timers (16-bit)
|
PCA Channels
|
DAC
|
Comparators
|
UART
|
SPI
|
I2C
|
HS I2C Slave
|
EMIF
|
CAN
|
LIN
|
VREF
|
Debug Interface
|
C8051F392-A-GM
|
8位MCU
|
C8051F39x Small Form Factor
|
50
|
16
|
1
|
1.8
|
3.6
|
QFN20
|
4x4
|
±2
|
17
|
10-bit, 16-ch., 500 ksps
|
Temp Sensor
|
6
|
3
|
10-bit, 2-ch.
|
1
|
1
|
1
|
2
|
0
|
0
|
0
|
0
|
VREF
|
C2
|
选型表 - SILICON LABS 立即选型
SILICON LABS C8051F99x Ultra Low Power Touch Sense MCUs选型表
SILICON LABS 8位MCU选型,基于25MHz Frequency,8kB Flash,0.5kB RAM等参数进行选型
产品型号
|
品类
|
MCU Core
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Dig I/O Pins
|
ADC 1
|
Temp Sensor
|
Timers (16-bit)
|
PCA Channels
|
Comparators
|
UART
|
SPI
|
I2C
|
HS I2C Slave
|
I2S
|
EMIF
|
CAN
|
LIN
|
Vdd min(V)
|
Vdd max(V)
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
VREF
|
Debug Interface
|
C8051F990-GM
|
MCU
|
8051
|
25
|
8
|
0.5
|
16
|
12-bit, 9-ch., 75 ksps
|
Temp Sensor
|
4
|
3
|
1
|
1
|
1
|
1
|
0
|
0
|
0
|
0
|
0
|
1.8
|
3.6
|
QFN20
|
3x3
|
±2
|
VREF
|
C2
|
选型表 - SILICON LABS 立即选型
8位单片机EFM8的烧录器有哪些?
8位单片机EFM8系列采用C2调试接口,常见的烧录器有:1,官方的EFM8 STK、USB Debug Adapter、ToolStick。2,第三方的U-EC2/6、WizPro200EFM(支持EFM8和EFM32)等。
世界上最节能的微控制器EFM32之十大低功耗奥秘
Silicon Labs EFM32 32 位微控制器系列是世界上最为节能的微控制器,特别适用于低功耗和能源敏感型应用,包括能源、水表和燃气表、楼宇自动化、警报及安防和便携式医疗/健身器材。本文着重强调10个Silicon Labs32位MCU功耗低的因素。
8位混合信号单片机能够降低汽车电子设计的成本和复杂度
芯科科技提供的是C8051F58x单片机提供了高精度的振荡器,高精准的电压参考器,5V整流模块等相当多的片上外设,这些让混合信号单片机在汽车电子系统设计中的应用系统的设计难度降低了,并减少了元器件的数量和印制板的尺寸。
C8051F120和AT45DB系列的存储芯片写数据,编译器在单步执行的时候MCU可以读到数据,但是程序运行的时读不到数据,这是为什么?
分析流程:1、MCU通过SPI写数据到1区的SRAM时,有SCK的信号确认,保证数据正常写入SRAM;2、AT45DB系列SRAM到主存写入,是通过开始地址和指令来执行,带擦除的话,先还擦除页面后再写入数据;3、AT45DB系列主存到2区SRAM,也是是通过开始地址和指令来执行,此时如果步骤2写入主存指令还没有执行完成,那么此时写入指令是无效的;4、如果步骤3指令没有执行成功,此时读到数据也是不正确的。由流程可以分析出来:如果主存区忙碌的话,再去对主存区域进行操作,读出的数据无效,所以在写入主存区域,先判断是否忙碌,可读取寄存器地址为57H的状态寄存器,判断第7bit的“RDY/BUSY”位,或者延时一段时间在去操作主存区。
【产品】Silicon Labs C8051F9xx系列超低功耗微控制器,适用于家庭自动化、智能仪表、工业监控等
Silicon Labs(芯科科技)推出的C8051F9xx超低功耗系列微控制器产品是业界最节能的微控制器。从开始设计到最终形成最优解决方案,在所有必要指标中实现业界最佳,因此它被视为真正的“低功耗”。其可在整个工作电压范围内完成所有工作,而不会影响其性能和电池寿命。
主控MCU通过C2接口对EFM8BB10F8G MCU的Flash存储器进行读写操作,存在概率性失败。从Flash存储器中读数据也是异常,请问这时什么原因导致的?
检查程序中的中断设置,发现是有一处读操作没有关闭中断导致的,将中断关闭后,对EFM8BB10F8G MCU的Flash进行读、写,存在概率性失败的情况得到解决。因为主控MCU用的是ARM芯片,运行的是linux操作系统,所以主控MCU通过C2接口对EFM8BB10F8G MCU的Flash存储器进行读写操作的函数也是以驱动程序的形式存在的,并且系统中各种软硬中断也比较频繁,因此相对时序控制上也需要更加严格,才能保证可靠的读写操作。
【产品】16位微处理器S1C17M33、SICI17W3X,睡眠电流分别低至0.2uA、0.15uA
EPSON推出的微处理器S1C17M33、SICI17W34/SICI17W35/SICI17W36都属于低电压、低电流微处理器,可大幅延长产品电池寿命,它们嵌入式电路部分可帮助客户降低总产品数量、节省板子空间和减少软件开发时间,也均可驱动LCD显示模式,可广泛应用于通信设备、工业电子、汽车电子及消费电子领域。
CP2105 单芯片USB转UART桥接器
描述- Silicon Labs(芯科科技) CP2105 单芯片USB转UART桥接器数据手册(中文)-CP2105技术资料,CP2105,CP2105-F01-GMR,CP2105-F01-GM,CP2105EK,silabs CP2105,CP2105数据手册,CP2105 datasheet,CP2105规格书,CP2105手册,CP2105技术资料,CP2105资料,CP2105方案
型号- CP2105,CP210X,CP2105-F01-GM,CP2105-F01-GMR,CP2105EK,CP2105-GM
使用EFM8BB1系列MCU时,怎样关闭看门狗定时器?
关闭看门狗定时器,需要向WDTCN寄存器写入0xDE后再写入0xAD将禁止WDT。写0xDE和写0xAD必须发生在4个时钟周期之内,否则禁止操作将被忽略。在这个过程期间,应禁止中断,以避免两次写操作之间有延时。
C8051系列MCU用外部振荡器作为时钟源,在软件中该如何配置这些外部振荡器引脚?
对于具有专用振荡器引脚的 MCU (如 C8051F12x系列),这些引脚将自动配置为所选的外部振荡模式。 对于那些外部振荡器引脚与GPIO引脚复用的器件(如C8051F30x),这些与外部振荡器相关的GPIO引脚必须按照下面描述配置: 1. 对于一个外部晶体振荡器,XTAL1和XTAL2两个引脚必须配置为模拟输入。 2. 对于“RC”模式或“C”模式,XTAL2 或 EXTCLK引脚必须配置为模拟输入。 3. 对于CMOS时钟模式,XTAL2或EXTCLK引脚必须配置为数字输入。 对于振荡器引脚与GPIO复用的器件,任何时候使用外部振荡器,相关的Crossbar必须配置跳过这些被振荡器电路使用的引脚,以避免任何与Crossbar外设之间的 冲突。
【产品】最大工作频率48MHz的微控制器,嵌入式应用最佳选择
Silicon Labs新推出微控制器EFM8UB3系列,Flash容量为40kB,在512字节扇区内支持在线可编程,提供非易失性数据存储,同时支持固件的现场升级。提供独立的片上系统解决方案,具有多功能的外设接口。
电子商城
现货市场
服务
可定制连接器的间距范围1.25mm~4.5mm、单列/双列列数、焊尾/表面贴装/浮动式等安装方式、镀层、针数等参数,插拔寿命达100万次以上。
最小起订量: 1 提交需求>
朗能泛亚提供是德(Keysight),罗德(R&S)等品牌的测试测量仪器维修服务,包括网络分析仪、无线通讯综测仪、信号发生器、频谱分析仪、信号分析仪、电源等仪器维修,支持一台仪器即可维修。
提交需求>
登录 | 立即注册
提交评论