Reset与嵌入式系统应用的稳定性
eSoC芯片,硬件结构如图3所示,主要包括一个8051的MCU核和ZigBee收发器。调试时,发现ZigBee模块快速关机然后快速开机,即二次开机时不稳定,有时启动不正常,功能不能实现。在软件里加Trace信息,发现当快速开关机时MCU并没有正常启动,没有进入所需要的初始化和主循环。避免快速关机开机,则可以正常启动。当嵌入式系统关机后立即再开机,有时不能正常工作,是因为复位不充分,这是嵌入式系统的共同点。
最后发现,由于SoC芯片里有内部POR,所以片外没有加RC复位电路。而工作电源VDD_3V上有20μF电容,下电时不能快速放电。添加外部RC复位电路(100 kΩ电阻和1μF电容),延长复位时间,电源稳定后再取消复位。Reset功能在芯片上下电时更稳定,问题得以解决。有时候电阻电容这种“小器件”往往可以解决“大问题”。
3电压检测复位
为了防止系统在上电、突然掉电或者电网瞬间欠压引起嵌入式系统操作失误,更常用和有效的方法是采用具有复位信号输出的电压监测电路。电压监测电路提供多种保护功能:在系统上电、瞬间欠压时提供系统复位信号;系统突然断电、瞬间欠压时输出监测信号,以供系统实施保护措施,如数据保护、I/O安全设置;可连接备用电源,保证备用电源的投、切控制。
对于供电系统的容差范围较大、压值精度较低的情况,或者是遇到电网长期工作在欠压状态下时,可能会造成系统在正常工作条件下频繁复位。这种情况更应该监控电源电压,当监测到电压波动时,监控芯片向处理器发送电压异常信号,处理器响应该信号并中断正在运行的程序,进入掉电保护子程序,设置复位状态寄存器,避免下次上电时由于寄存器状态错误而无法启动上电复位。
电压监测复位,可以解决电源毛刺等造成系统不稳定。复位电路可以采用分立元件搭建,目前常用专用集成电路芯片,阈值电压和复位信号有些可通过编程修改。图4是一个典型的电压监控复位芯片与微处理器的连接图。
4看门狗复位
看门狗复位(即程序运行监视复位)可保证程序非正常运行时能及时进入复位状态。看门狗分硬件看门狗和软件看门狗。
4.1硬件看门狗复位
硬件看门狗的基本原理是,为电路提供一个用于监视系统运行的信号线,当系统正常运行时,应在规定的时间内给信号线提供一个特定信号;如在规定的时间内无这个信号,自动复位电路就认为系统运行不正常,并重新对系统进行复位。具体方式是通过处理器的定时复位计数器来实现。此复位电路的可靠性还与软件有关,即将向复位电路发出脉冲的程序放在何处,在哪里插入“喂狗”指令,需作优化。
硬件看门狗复位主要有三种形式:使用内部带WDT功能单元的电路,外部增设WDT电路和专用集成WDT芯片。图5是一个看门狗芯片的工作方式图。
4.2软件复位
软件复位可以节约电路板的空间和成本;软件复位方式更灵活,更便捷。尤其是对一些功能模块或者外设的监控,借鉴硬件看门狗思想,采用软件看门狗更有优越性。用软件来监测功能模块或者外设的工作情况,一旦认为功能模块或者外设工作异常,通过设定特殊的标记,达到Reset判据时,则通过处理器强行复位并重新初始化工作异常的功能模块或者外设,而其他功能模块或者外设照常工作。当然,有时也需要重新复位并初始化整个系统,使系统更稳定地运行。有些系统人为操作硬件复位(按键复位或者上下电)很不方便时,或者有些系统和产品不便于让用户知道其重启时,就可采用软件复位。
4.3实例分析:手机找网问题
笔者做过一个功能手机(feature phone)项目,由于手机平台刚推出,平台不太稳定,软件存在一些Bug,尤其是底层Layer1部分。手机找不到网,或者手机有网但过一段时间又没有网的现象,发生概率很小,很难Debug.当时软件找了很长时间的Bug,并把问题反馈给平台厂商,但没能及时给出解决方法。情急之下,只好做了应急之便,采用软件复位的方法来救急。
在RTOS实时多任务操作系统软件中,添加一任务,设置网络状态标志位来监视网络状态,当手机没有信号时设置某标志;通过适当的判据,确认是否Reset,如果达到Reset条件就迅速地软件复位,软件重新初始化,如图6所示。复位过程只能是“偷偷地”快速进行,不能让用户察觉,否则用户体验极为不好;要保持用户界面,底层快速重启,不知不觉地完成重启。重启后,网络正常,用户使用正常,巧妙地缓解,当然最终还是从本质上去解决问题。
5外设的复位及稳定性设计
5.1外设复位的特殊性与可控性
嵌入式系统通常有LCD显示、摄像头和无线通信模块等外设。外设正常工作
RESET 硬件复位 嵌入式系统 上电复位 看门狗复位 相关文章:
- CPLD在DSP系统中的应用设计(04-11)
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)