【经验】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 立即选型
世界上最节能的微控制器EFM32之十大低功耗奥秘
Silicon Labs EFM32 32 位微控制器系列是世界上最为节能的微控制器,特别适用于低功耗和能源敏感型应用,包括能源、水表和燃气表、楼宇自动化、警报及安防和便携式医疗/健身器材。本文着重强调10个Silicon Labs32位MCU功耗低的因素。
C8051F120和AT45DB系列的存储芯片写数据,编译器在单步执行的时候MCU可以读到数据,但是程序运行的时读不到数据,这是为什么?
分析流程:1、MCU通过SPI写数据到1区的SRAM时,有SCK的信号确认,保证数据正常写入SRAM;2、AT45DB系列SRAM到主存写入,是通过开始地址和指令来执行,带擦除的话,先还擦除页面后再写入数据;3、AT45DB系列主存到2区SRAM,也是是通过开始地址和指令来执行,此时如果步骤2写入主存指令还没有执行完成,那么此时写入指令是无效的;4、如果步骤3指令没有执行成功,此时读到数据也是不正确的。由流程可以分析出来:如果主存区忙碌的话,再去对主存区域进行操作,读出的数据无效,所以在写入主存区域,先判断是否忙碌,可读取寄存器地址为57H的状态寄存器,判断第7bit的“RDY/BUSY”位,或者延时一段时间在去操作主存区。
8位混合信号单片机能够降低汽车电子设计的成本和复杂度
芯科科技提供的是C8051F58x单片机提供了高精度的振荡器,高精准的电压参考器,5V整流模块等相当多的片上外设,这些让混合信号单片机在汽车电子系统设计中的应用系统的设计难度降低了,并减少了元器件的数量和印制板的尺寸。
【产品】16位微处理器S1C17M33、SICI17W3X,睡眠电流分别低至0.2uA、0.15uA
EPSON推出的微处理器S1C17M33、SICI17W34/SICI17W35/SICI17W36都属于低电压、低电流微处理器,可大幅延长产品电池寿命,它们嵌入式电路部分可帮助客户降低总产品数量、节省板子空间和减少软件开发时间,也均可驱动LCD显示模式,可广泛应用于通信设备、工业电子、汽车电子及消费电子领域。
【产品】最大工作频率48MHz的微控制器,嵌入式应用最佳选择
Silicon Labs新推出微控制器EFM8UB3系列,Flash容量为40kB,在512字节扇区内支持在线可编程,提供非易失性数据存储,同时支持固件的现场升级。提供独立的片上系统解决方案,具有多功能的外设接口。
使用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外设之间的 冲突。
Silicon Labs(芯科科技) EFM32PG (LDMA)控制器工具
型号- EFM32PG1B100F256GM32-B0,EFM32PG1B200F256GM32-C0,EFM32PG1B100F256GM32-C0,EFM32PG1B100F128,EFM32PG1B200F256GM32-B0,EFM32PG1B200F128,EFM32PG1B200F128GM48-B0,EFM32PG1B200F128GM48-C0,EFM32PG1B100F256,EFM32PG1B200F256GM32,EFM32PG1B100F128GM32-C0,EFM32PG1B200F128GM32-C0,EFM32PG1B100F128GM32-B0,EFM32PG,EFM32PG1B200F256,EFM32PG1B200F256GM48-B0,EFM32PG1B200F256GM48-C0,EFM32PG1B100F256GM32-C0R
8051系列MCU有没有单独的且能够支持中文软件的下载器?
C8051F系列和EFM8系列MCU有单独的调试下载器——USB DEBUG ADAPTER,该下载器支持中文软件。
使用KEIL C51开发环境,仿真调试正常,手动切换内部默认20MHz时钟到24.5MHz时钟后,调试仿真MCU和开发环境卡死,仿真器USB接口不断尝试连接不成功,是不是仿真器的问题?应该如何解决?
在KEIL C51环境和Eclipse环境下操作时钟切换要特别小心,一定要先确认切换到的时钟已经正常振荡,否则一旦切换到没有起振的时钟源,将导致开发环境和目标板卡死的现象,这并非仿真器的问题。解决办法:重新启动开发环境软件或者计算机,连接仿真器和目标板,检查程序是否先打开了24.5MHz的内部高速振荡器,循环判断等待振荡标志位生效,然后再切换主时钟到内部高速24.5MHz时钟源上。
EFM8BB1系列8位微控制器 参考手册
描述- 该资料详细介绍了EFM8BB1系列微控制器的特性、功能和应用。EFM8BB1是一款多功能的8位微控制器,具有高效的核心、丰富的模拟和通信外设,适用于空间受限的应用。主要特点包括:25 MHz的C8051核心、多达18个多功能、5 V容错的I/O引脚、12位ADC、两个低电流模拟比较器、集成温度传感器、3通道增强型PWM/PCA、四个16位定时器、UART、SPI和SMBus/I2C。此外,资料还涵盖了系统概述、内存组织、特殊功能寄存器、闪存存储器等功能模块的详细说明。
型号- EFM8BB10F2G-QFN20,EFM8BB10F8I-A-QSOP24,EFM8BB10F2,EFM8BB10F4,EFM8BB10M1069F8GM,EFM8BB10M1069F8GM-AR,EFM8BB10F8,EFM8BB10F8G-A-QSOP24,EFM8BB10F8I-A-QFN20,EFM8BB10F2G-A-QFN20R,EFM8BB10F2G-A-QFN20,EFM8BB10F8G-A-SOIC16,EFM8BB10F8G-A-QFN20,EFM8BB10F8G-A-SOIC16R,EFM8BB10M1069F8GM-A,EFM8BB1,EFM8BB10F4G-A-QFN20R,EFM8BB10F4G-A-QFN20,EFM8BB10F2I-A-QFN20R,EFM8BB10F2G,EFM8BB10F8G-A-QFN20R,EFM8BB10F8G-A-QSOP24R,EFM8BB10F8G-QSOP24,EFM8BB10F2I-A-QFN20,EFM8BB10F8G-QFN20,EFM8BB10F8I-A-QFN20R,EFM8BB10F4G,EFM8BB10F8G
电子商城
现货市场
服务
可定制板装式压力传感器支持产品量程从5inch水柱到100 psi气压;数字输出压力传感器压力范围0.5~60inH2O,温度补偿范围-20~85ºС;模拟和数字低压传感器可以直接与微控制器通信,具备多种小型SIP和DIP封装可选择。
提交需求>
可来图定制均温板VC尺寸50*50mm~600*600 mm,厚度1mm~10mm,最薄0.3mm。当量导热系数可达10000W/M·K,散热量可达10KW, 功率密度可达50W/cm²。项目单次采购额需满足1万元以上,或年需求5万元以上。
提交需求>
登录 | 立即注册
提交评论