上电复位
MCU整体工作流程可总结如下:
上电——>主时钟起振——>启动代码——>用户程序(main函数)。
对于我们应用开发来说,大部分工作重点是在应用程序编写这块。特别是高级MCU的出现,如ARM系列的STM32、LPC等32位MCU,以及芯片原厂的完善底层代码,启动代码已经固化在芯片内部flash(称为BootLoader),或者已经提供完整的汇编启动源码。因此,启动过程这块,我们比较陌生,但基本的原理还需了解,不排除面试或者使用到实时系统(RTOS)时需要修改启动汇编代码。
MCU上电(复位)时,从固定的地址启动,一般是地址0x00000000,如ARM7;个别特殊的如STM32默认启动地址为0x8000000(flash区启动)。启动过程主要完成两部分工作,一个是硬件执行环境,如中断向量表、寄存器、看门狗等,另一个是软件环境,如C库环境、ZI(未初始化的内存变量)等。
一、硬件环境工作
1.初始时钟
初始化内核时钟,主时钟,各个外设的时钟。
2.关闭看门狗
看门狗是用来监控应用程序的异常跑飞而复位CPU,在初始化阶段,由于没有“喂狗”这一动作,有可能导致CPU不断复位,因此,首先会关闭看门狗,初始化完,再开启。
3.建立中断向量表
中断向量表,中断源的识别标志,可用来形成相应的中断服务程序的入口地址,或者中断服务程序入口地址的偏移量和段基值。CPU利用中断向量表转入中断服务程序处理相关事务。
4.初始化堆栈寄存器
堆栈的作用一个就是保存现场(上下文),如函数调用或者中断发送时,将当前执行地址压栈,调用完成再返回此处执行程序。另一个作用就是保存参数,如临时变量。因此,在启动阶段需初始化堆栈寄存器、堆栈的大小、起始地址等。
5.内存初始化
选择内部或者外部RAM。
二、软件环境工作
1.把RO,RW从它们的加载域复制到它们的运行域中去。
2.初始化(清零)ZI域。
3.初始化堆栈指针
4.初始化C库环境
包括C库所需的内存空间、程序执行所需资源、C库初始化。
三、CortexM3启动
CortexM3有3种启动方式
1、BOOT1=1BOOT0=1,中断向量表定位于SRAM区,即起始地址为0x2000000,同时复位后PC指针位于0x2000000处。
2、BOOT1=xBOOT0=0,中断向量表定位于FLASH区,即起始地址为0x8000000,同时复位后PC指针位于0x8000000处。
3、BOOT1=0BOOT0=1,中断向量表定位于内置Bootloader区,此时可通过串口下载程序的二进制文件到flash区。
而Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。即是对于flash启动来说(正常工作也是flash启动),0x8000000地址存放的是栈顶地址__initial_sp,0x8000004地址存放的是复位中断向量Reset_Handler入口地址(STM32使用32位总线,存储空间为4字节对齐);在编写多段程序时,偏移地址空间需注意,如编写一个BootLoader,从BootLoader到应用程序段的相互跳转。
参考
[1]http://blog.csdn.net/whiteshark1991/article/details/6635296
版权声明:本文为CSDN博主「acuity_」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_20553613/article/details/79568441
工程师们在调试各式各样的板子时,常会出现开机出现错误,系统无法正常打开,接下来我们将列举电路板上电时可能引发的一些常见系统问题,并说明了保证电路板正确初始化的基本原则。
许多IC 都包含POR电路,上电复位,即Power-on Reset),其作用是保证板子上电后,模拟和数字模块初始化至已知状态。
POR三步走:电源电压达到阈值电压——POR电路就会释放内部复位信号——状态机开始初始化器件。
在初始化完成之前,器件忽略外部信号,包括传输的数据。唯一例外是复位引脚,它会利用POR信号内部选通。
1.1 POR电路长什么样?
先通俗的科普一个概念,窗口比较器:常用两个比较器组成(双比较器),它有两个阈值电压VT2(高阈值电压)及VT1(低阈值电压),若VT1≤VA≤VT2,Vout输出高电平;若VA<VT1,VA>VT2,则Vout输出低电平。

POR电路可以表示为窗口比较器,也就是一旦工作电压落在高低阈值之间,电路就自动复位。如图2所示。

1.2 POR怎么运作?
比较器窗口通常由数字电源电平定义。数字模块控制模拟模块,数字模块全面工作所需的电压与模拟模块工作所需的最小电压相似。
较高的VT2阈值对模拟模块会更好,若过于接近推荐最小电源电压,当电压略微降低时,可能会意外触发复位。
如果器件包括独立的模拟电源和数字电源,则避免故障的一种策略是增加一个POR电路,使两个模块保持复位状态,直至电源电压高到足以确保电路正常工作。
1.3 POR怎么对付短暂断电?
POR 电路有时会集成一个掉电检测器(BOD),用于防止电路在电压非常短暂地意外降低时发生复位。实际上,掉电电路给POR模块所定义的阈值电压增加了迟滞,通常为300mV左右。BOD保证,当电源电压降至VT2以下时,POR不会产生复位脉冲,除非电源电压降至另一阈值VBOD(VT2-300mv)以下,如图3所示。

掉电阈值电平足以保证数字电路保留信息,但不足以保证其正常工作。这样,如果电源电平只是非常短暂地降低的话,控制器可以在电源降至某一电平以下时中止活动,使整个器件都免于重新初始化。
1.4 正确上电要掌握的三种情况
一、 单调性电源有震荡时
实际的POR电路比图2所示的简化版本要复杂得多, POR电路需要一个启动模块来产生启动脉冲,这种情况下必须使用单调性电源(单调上升或下降而没有震荡的电源)。因为若使用非单调性电源,当偏差接近任何阈值电平时,非单调性斜坡可能会引起问题。 较高的阈值偏差会引起同样的非单调性序列对某一个元件有效,而对其他元件无效,如图4所示。


解决方法:使用单调性电源,避免斜坡引起问题。
二、 系统无法启动?可能是残压
某些时候,即使断开电源(禁用LDO),储能电容也会保留一定的残余电压,POR将无法正确复位,器件将无法正确初始化。如图6所示。

解决方法:此电压应尽可能小,以便保证残压能降至VT1 以下。
三、 上电时序该如何安排?
某些数据手册给出了应当应用于具有一个以上电源引脚的器件的推荐供电“时序”。遵守这个序列是很重要的。例如,想想一个具有两个独立电源的器件。

解决方法:推荐供电序列要求数字电源先于模拟电源供电(这是常规,因为数字模块控制模拟模块,所以必须首先为数字模块供电),该模块必须首先初始化。哪个电源首先开始上升不重要,但数字电源必须先于模拟电源跨过阈值,如图7所示。如果电源之间的延迟为100 μs左右,则影响应当很小,器件应能正确初始化。
四、 其他小结
由于内部三极管寄生效应,数百ms 的慢速电源斜坡可能会引起问题。POR 电路要在各种压摆率下进行评估,以保证其在正常电源条件下能正确工作。数据手册会说明是否需要快速电源斜坡(100 μs或更短)。
例如,对于用细电缆连接电源的电路板,不良的接地连接会具有高阻抗,它可能会在上电期间产生毛刺。另外,在某些电磁环境(EME)下,MOS晶体管的寄生栅极电容可能会充电,导致晶体管不能正常工作,除非让该电容放电。这可能引起POR初始化失败。
漂移和容差也需要考虑。某些情况下,电容等分立元件具有高容差(高达40%)和高漂移(随温度、电压和时间的漂移)。此外,阈值电压具有负温度系数。例如,VT1 在室温下为0.8V,在-40°C下为0.9 V,在+105°C 为0.7V。
文章来源:百度文库







