外设的复位及稳定性设计
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.4GHz无线信号传送给无线WiFi AP,经以太网口传送给PC,由PC把无线AP获取的数据保存到硬盘。
调试时,发现前端部分工作不稳定,WiFi模块启动不稳定,各次启动现象不一致,有时能正常启动,有时不能正常启动。,找到问题的所在点:WiFi模块上电启动时,没有得到正确的复位。系统上电的RC复位电路产生的Reset信号并不能完全使系统稳定,需要再加一个脉冲信号,如图10(a)所示。WiFi模块的Reset时序包括两个阶段:大于20ms的上电Reset和大于1ms的硬件脉冲信号。微处理器SoC上电复位并初始化后,由I/O控制WiFi模块上电及复位,按需求进行了特殊复位处理,采用特殊的Reset信号和时序,如图10(b)所示,模块可以稳定启动,工作正常,问题解决。
结语
嵌入式系统的复位方式有上电复位、按键复位、电压监控复位和看门狗复位等很多种,正确地设计复位电路,合理并巧妙地应用各种类型的复位操作,能使整个嵌入式系统更可靠、更稳定地工作。