6671浏览
查看: 6671|回复: 0

Leonardo的启动时间探究

[复制链接]
本帖最后由 Leotower 于 2014-3-8 10:20 编辑

使用Leonardo,当上电时,Lenonardo的启动没有任何等待时间就开始跑用户程序了; 如果你按复位键就会发现Blink灯闪烁8s左右再开始跑应用程序。 知道这是为什么吗?

这是因为在Leonardo对应的bootloader中对启动情况进行了区别对待:

上电启动:  无等待时间
通过USB程序加载时软件自复位:  等待8s
按复位键启动:  等待8s
用户watchdog复位启动:无等待时间


它的假设是:如果有应用程序,则上电时则不等待, 用户程序将自己复位也不等待。这人就人性化多了,正常应用时就不需要等待时间了。


1、 上电启动 和 复位键(reset)启动如何区别

Leonardo使用的atmega32U4有记录复位事件的寄存器,能够区分是上电启动(PORF),还是外部RESET复位(EXTRF), 具体请参考datasheet
Leonardo的启动时间探究图1


2、 如何判断是通过USB上载程序复位

USB上载程序复位也是通过watchdog复位。 如何和用户程序中使用的watchdog相区别呢?原来在ArduinoUSB虚拟串口程序中在内存中记录一个标识,若标识存在则是用户正在通过USB上载用户程序而进入等待。


3、 Leonardo的reset引脚没有接滤波电容的秘密

UNORESET引脚上接有对地滤波电容,而Leonardo没有。如果给Leonardo的也接上这个电容,你会发现上电启动也会等待8s 这是因为,一旦接上电容,便满足了外部复位的条件,在bootloader读取MCUSR寄存器之前,PORFEXTRF位都已经有效;在bootloader中外部reset复位启动优先,因此会等待(这个设计我以为不合理)。

注:AVRMCU有内部的复位延时,因此reset脚不用对地接电容也可正常工作。 有的应用为了加强对reset的保护,对地接电容进行滤波保护,这是一种抗干扰设计。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail