导言
在嵌入式体系电子设备的运转中,当呈现程序跑飞的状况或程序跳转时,可用手动或主动的办法发信号给硬件特定接口,使软件的运转康复到特定的程序段运转,这一操作便是复位(Reset);这一进程中,手动或主动发给硬件特定接口的信号,便是复位信号。为了战胜体系因为内因(时钟振动源的安稳性)和外因(射频搅扰)所引起的运转不安稳的状况,在嵌入式体系软件和硬件上,必须作相应的处理和维护。复位操作是一种卓有成效的维护办法,一起复位体系本身也是引起嵌入式体系运转不安稳的要素,在规划时需特别注意。
本文结合笔者亲身经历的实例来阐明Reset的重要性,奇妙地运用Reset使体系作业更安稳牢靠。
1 Reset办法及手法
在嵌入式运用体系中,复位操作包含两个方面——处理器本身的复位和体系中外设(外接功用模块)的复位,如图1所示。
总的说来,嵌入式复位办法首要分硬件复位和软件复位。硬件复位,即选用硬件的手法、经过硬件复位信号对体系处理器或许外设进行复位。只要在RST端呈现必守时刻(详细看体系和处理器的机器周期)的复位电平信号,由CPU采样复位信号,发动复位时序,即可完结复位操作。硬件复位一般包含上电复位、按键复位、电压监控复位和看门狗复位等,这些复位信号,在体系规划时可用逻辑电路组合起来加载到体系的RST端。软件复位,即经过软件手法,在软件结构里对体系复位,从头初始化体系。
按处理器内外来区分,又分为芯片内复位和芯片外复位。所以,硬件复位又分外部硬件复位和内部硬件复位。
关于硬件复位,按复位信号电平凹凸又可分为高电平复位和低电平复位。高电平复位是高电平有用,并在复位脉冲的下降沿完结复位进程;低电平复位是低电平有用,并在复位脉冲的上升沿完结复位。详细用什么复位信号,视嵌入式体系本身而定,但大多选用低电平复位,这与TTL的功耗有关,因为TTL电路中高电平的吸收电流要远小于低电平的吸收电流。
2 上电复位的完结及安稳性规划
2.1 上电复位
上电复位(Power On Reset,POR),即体系上电时经过复位电路,在RST引脚供给一个满意长时刻的复位电平信号,直至体系电源安稳后,再吊销复位电平。在嵌入式体系中,上电复位是体系发动初始化复位,全面而体系地复位处理器内的一切逻辑单元与模块,将初始化内部逻辑操作,如存储器操控器、中止操控器和I/O引脚等的装备。
上电复位是确保嵌入式体系正常运转的根本操作。一般处理器芯片内部自带上电复位电路,图2(a)所示为某MCU(微操控器)Reset引脚示意图,内部自带上电复位电路。MCU芯片上电时,片内POR将发生内部复位信号以初始化芯片内的数字模块,其时序如图2(b)所示。
有的处理器芯片经过在片外增加RC延时电路来得到上电复位信号。RC复位电路的复位脉冲宽度由芯片要求的复位时刻决议,持续时刻取决于RC电路参数,电容太大复位时刻很长,电容太小复位时刻不行,缺乏以安稳复位。
2.2 上电复位失效及应对办法
实际作业时,因为各方面的原因,上电复位会失效。因为遭到搅扰、电源动摇、误操作等原因,时刻短的电压下降形成供电康复时因为电压没有满意POR的发生条件,复位端的低电平复位信号无法再次发动体系从头复位作业,此刻会呈现体系死机;电源二次开关时刻距离太短时,复位不牢靠;当电源电压中有浪涌现象时,或许在浪涌消失后不能发生复位脉冲。这些现象虽然并不频频,但关于某些特别运用场景,如不能随时进行手动复位的长途主动操控体系,却是丧命的。
呈现失效时,常选用进步复位门限来应对,使复位门限坐落处理器正常作业电压规模内,且挨近处理器正常作业时的最低门限。另一应对办法是延伸复位信号时刻,让复位信号在电压值康复后坚持满意长的时刻。电源安稳后还要经过必定的延时才吊销复位信号,以防止电源开关或电源捕头分一合进程中引起的颤动影响复位。别的,为了处理电源毛刺和电源缓慢下降(电池电压缺乏)等问题引起的POR不牢靠现象,有规划人员在RC电路中增加了二极管放电回路,在电源电压瞬间下降时使电容敏捷放电,这样,必定宽度的电源毛刺也可令体系牢靠复位。
2.3 实例剖析:快速开关机单片机发动不安稳
笔者从前做过一个ZigBee物联网项目,选用ZigBeeSoC芯片,硬件结构如图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显现、摄像头和无线通信模块等外设。外设正常作业也需求正确的复位。有些规划直接将外设的复位引脚与处理器的复位引脚连在一起,共用一个外部硬件复位源,如图7(a)所示。这种衔接办法存在一些问题。首要,这要求复位电路有满意的复位时刻,才干确保处理器和外设都正确复位;其次,一旦外设出问题,那么处理器也需求复位,整个体系都需从头初始化;终究,简单发生异步复位,在处理器复位后,对外设写入指令时,或许被外设所复位掉,导致初始化犯错。
这些问题能够从硬件和软件两个方面来处理。硬件方面,对处理器和外设的复位别离进行复位电路规划,恰当展宽复位脉冲。软件方面,选用延时法,CPU上电后延时一段时刻,等候外设复位充沛,再进行外设初始化。最牢靠并最具操作性的是确保外设复位的可控性,使外设的复位信号与处理器复位信号分隔,由处理器的某一GPIO来操控。当处理器安稳上电完结本身的初始化后,由处理器软件操控外设复位,恰当延时后,再对外设进行初始化,如图7(b)所示。
外设复位的可控性,对要求特别复位时序的外设特别有用。不同的外设,其复位时序要求不同,具有特性与特别性,体系应根据详细的复位时序要求进行特性化复位,不然或许导致外设作业不正常。
关于运用体系中有多个外设时,不应该如图8(a)那样把多个外设的复位引脚连在一起,由处理器的一个GPIO操控,进行一次外部硬件复位。一般选用如图8(b)的衔接办法,处理器完结上电复位后,别离经过不同的GPIO操控、选用不同的延时对各外设别离进行上电及复位。体系运转进程中,某个外设因受搅扰作业不正常时,能够独自对该外设进行复位操作,而不影响其他外设;有利于进步体系规划的灵敏性和牢靠性,能确保多个外设的牢靠运转。
5.2 实例剖析:WiFi模块的特别复位信号
笔者做过一个用WiFi进行数据传输的项目,整个体系如图9所示,SoC处理器模块收集到的数据经过UART传送给WiFi模块,WiFi模块再经过2.4 GHz无线信号传送给无线WiFi AP,终究经以太网口传送给PC,由PC把无线AP获取的数据保存到硬盘。
调试时,发现前端部分作业不安稳,WiFi模块发动不安稳,各次发动现象不一致,有时能正常发动,有时不能正常发动。终究,找到问题的地点点:WiFi模块上电发动时,没有得到正确的复位。体系上电的RC复位电路发生的Reset信号并不能彻底使体系安稳,需求再加一个脉冲信号,如图10(a)所示。WiFi模块的Reset时序包含两个阶段:大于20 ms的上电Reset和大于1 ms的硬件脉冲信号。微处理器SoC上电复位并初始化后,由I/O操控WiFi模块上电及复位,按需求进行了特别复位处理,选用特别的Reset信号和时序,如图10(b)所示,模块能够安稳发动,作业正常,问题处理。
结语
嵌入式体系的复位办法有上电复位、按键复位、电压监控复位和看门狗复位等很多种,正确地规划复位电路,合理并奇妙地运用各种类型的复位操作,能使整个嵌入式体系更牢靠、更安稳地作业。