AVR通用Bootloader折腾记

发布者:mlgb999最新更新时间:2017-02-06 来源: eefocus关键字:AVR  Bootloader 手机看文章 扫描二维码
随时随地手机看文章

最近做一个新东西, 正好手边有ATMega128的芯片, 资源也足够用, 于是决定就用它了. 考虑到以后PCB会装到外壳中, 导致软件升级困难, 而正好在电路中会用到蓝牙串口, 于是决定使用串口更新程序. 于是乎在网上找到”AVR通用Bootloader“, 打算折腾一番.

不得不说作者很牛X, 考虑的也很周到, 特意制作了一个兼下载与图形化配置的软件, 直接生成配置头文件, 和编辑的批处理文件, 相当方便, 所以这一部分很简单, 配置了一下, 编译, 然后使用ISP下载到MCU中, 嗯, 别忘记还要配置一下Boot相关的熔丝.
完成之后写了一个简单的程序使用Bootloader下载到芯片中进行测试. 程序的内容很简单, 就是让一个外接端口的LED不停的闪烁. 程序下载很顺利, 但是结果却让人很忧伤. 程序会正常运行, 但是LED闪烁几下之后会再次进入Bootloader, 再进入用户程序, 闪几下LED, 再进行Bootloader, 如此往复.

我很抓狂, 熔丝检查了一遍又一遍, 没问题, 使用ISP将程序读出来, 也没发现有什么诸如程序未全部下载或者出现错误等问题, 没办法, 认真的读完作者提供的使用说明, 还是无果. 怀疑编译器优化太厉害导致出错, 于是更改优化等级, 还是依旧. 手边没有调试器, 无法跟踪, 事情至此陷入僵局. 无奈只好又配置了一遍参数, 再试了几次, 打算再不行就啃源代码了. 在进行配置的时候忽然注意到看门狗的选项, 恍然大悟:在Bootloader中配置了看门狗, 但在程序跳转到用户程序后没有进行喂狗操作, 看门狗饿死后直接复位了系统, 然后MCU又从Bootloader开始执行…..如此往复, 造成程序不断在Bootloader和用户程序间跳转的错觉.

知道原因后就好解决了, 在用户程序中进行喂狗操作, 然后就正常了. 正如你猜的, 这事情还没完. 使用Bootloader能正常下载后又发现一个问题: 第一次使用Bootloader下载是正常的, 但是从第一次下载后就再没法下载了!

我很奇怪, 怎么可能出现这样的问题!? 再一次检查熔丝, 重新配置下载, 问题依旧. 至此我已经在电脑前坐了快5个小时了, 暗骂了几句后决定出去走走.

回来之后又试了一次, 不过这次鬼使神差的拔掉了GND线, 再接上, 居然能正常下载了!

仔细一想, 也想通了: 这个AVR的板子是我自己做了, 因为空间有限, 没有使用复位按钮. 因为调试的时候电源线和GND线是通过杜邦线连接上去的, 所以重启的时候拔一下电源线就好了, 却没料到这次居然栽了! 具体原因可能是我拔线后再插上的时间太短, 滤波电容里存储的电量和串口线上电流(因为串口在不停的发送连接密码)使得MCU没有完全复位, 所以使得再次接上电源后程序没从Bootloader执行.

想想挺简单的两个小问题, 居然让我折腾了快一天. 汗.


关键字:AVR  Bootloader 引用地址:AVR通用Bootloader折腾记

上一篇:ENC28J60学习笔记——AVRNET项目
下一篇:XMEGA128学习笔记7-模数转换ADC

推荐阅读最新更新时间:2024-03-16 15:32

用VMLAB进行AVR单片机硬件/软件协仿真
前言 在单片机应用开发过程中,当源文件的编译成功后,就要进行仿真调试工作。仿真调试可分为两大类--芯片级仿真和代码级仿真。芯片级仿真是指使用仿真软件和ICE硬件工具相配合,在实际硬件上进行仿真调试工作;而代码级仿真则完全在计算机上完成,不需要硬件的参与。两种类型的仿真各有特点,使用的场合不同。本文基于VMLAB,讲述了进行AVR单片机硬件/软件协同仿真的方法。 VMLAB的全称为:VisualMicroLab。它针对于AVR以及ST62系列单片机设计,是一个单片机的虚拟原型(virtualprototype)框架(frame),它可以提供给用户一个真正意义上的虚拟微控制器(MCU)设计实验室。它具有强大的多窗口、多文件的编辑器
[单片机]
用VMLAB进行<font color='red'>AVR</font>单片机硬件/软件协仿真
ATmega16单片机(AVR)主要特点总结
下面就总结一下AVR单片机ATmega16的主要特点: (注: 括号内有红色 *x* 符号的表示文章下方会有解释/扩展) 1) 采用 RISC 结构的AVR内核单片机. 131 条机器指令, 大多数指令为单个系统时钟周期执行的指令; 32 个 8 位通用工作寄存器; 全静态工作方式(Fully Static Operation). (*A*) 工作在 16 MHz 时具有 16 MIPS 的性能.(注: ATmega16L 系列最大工作频率为 8 MHz); 内部配备有 2 个时钟周期的硬件乘法器. 2)片内自带大容量, 非易失的程序和数据存储器 (*B*) 16KB 在线可编程(ISP, In-Sys
[单片机]
ATmega16单片机(<font color='red'>AVR</font>)主要特点总结
基于ARM的嵌入式系统Bootloader启动流程分析
一. 引言: 对于PC机,其开机后的初始化处理器配置、硬件初始化等操作是由BIOS(Basic Input /Output System)完成的,但对于嵌入式系统来说,出于经济性、价格方面的考虑一般不配置BIOS,因此我们必须自行编写完成这些工作的程序,这就是所需要的开机程序。而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序,启动时用于完成初始化操作的这段代码被称为Bootloader程序,因此整个系统的加载启动任务就完全由Bootloader 来完成。简单地说,通过这段程序,可以初始化硬件设备、建立内存空间的映射图(有的CPU没有内存映射功能如S3C44B0),从而将系统的软硬件环境设定在一个合适的状态,以便为最终调
[单片机]
基于ARM的嵌入式系统<font color='red'>Bootloader</font>启动流程分析
AVR中如何操作单个IO口
WinAVR中如何操作单个IO口 用PORTA|=(1 7) PORTA|=(1 7) 意思是把00000001左移7位再和porta相或 PORTB |= _BV(n) 和 PORTB &= ~_BV(n) sbi() 可以用的 05版装好后的确不能用 sbi()和cbi()。 仔细看资料后,发现头文件里的确没有这两函数的定义。 发现问题原因后,解决它就不是什么问题了。 方法有无数种。 1. 将下面两行拷到程序中。 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bi
[单片机]
AVR单片机定时器TIME0普通定时实验程序
/*很简单的问题费了好大的劲,注意中断向量地址和向量号的区别,*/ /*这样的是时钟节拍可以搞到微秒级的,太好了这样对以后搞操作系统是很管用的,节拍直接影响CPU的利用效率*/ /*节拍器越小,时间片就越准确,对于整个系统的统一是绝对有意义的,*/ /*AVR定时器普通定时实验 0415 天津第四项目部宿舍 */ #include iom16v.h #define uchar unsigned char #define uint unsigned int #define set_bit(a,b) a|=(1 b) #define clr_bit(a,b) a&=(1 b) #define get_bit(a,b) a&(
[单片机]
Mouser提供Microchip ATtiny1617系列AVR MCU
贸泽电子(Mouser)近日宣布即日起开始供应Microchip Technology的ATtiny1617微控制器系列。ATtiny1617为Microchip低功率8位AVR微控制器产品组合的其中一个系列,接脚和程序代码均与ATtiny817系列装置兼容,且闪存容量更大。这个8位装置体积轻巧,运作频率最高达20 MHz,提供可自定义的组态与简化流程,适用于电容式触控系统与核心独立周边(CIPs),有助于提高系统的数据传输速率,同时降低整体耗电量。 贸泽电子供应的Microchip ATtiny1617 8位AVR微控制器,具备16KB系统内部可程序闪存、256B EEPROM和2KB的SRAM。这些装置类似于其他的Microc
[半导体设计/制造]
AVR/Arduino定时/计数器、中断入门
在Arduino中,可以使用AnalogWrite来使用硬件产生490Hz/980Hz的pwm波,并可根据参数来设定占空比。不了解这个的同学可以去AnalogWrite学习下,SecretsOfArduinoPWM也是讲了Arduino在avr的定时/计数器上做的封装,我们这里并不讲Arduino相关,而是讲AVR的定时/计数器,如何产生更多PWM波和定时/计数器的中断使用。 AVR Timer/Counter(以下统称Timer) 以ATmega358p为例,其内部拥有一个16位计时器,两个8位计时器,下图则为16位计时器的大致图解: 对于没有接触过avr内部的Arduino同学来说,这张图看不出来任何意思,别急,这些都是AV
[单片机]
<font color='red'>AVR</font>/Arduino定时/计数器、中断入门
基于AVR微控制器的电力机车智能辅保系统的实现
    摘要: 给出了以AVR微控制器为核心的电力机车智能辅保系统的设计方案,并介绍了系统硬件及软件的具体实现方法。     关键词: 智能辅保系统 AVR微控制器 硬件 软件 电气机车辅助系统中有劈相机、空气压缩机、通风机及制动风机等各种类型的电机。运行中为了防止出现短路、过流等异常情况而烧毁电机,通常配置辅助保护系统,起到及时监测电机故障并加以处理的作用。目前电力机车上安装的辅保系统都是模拟电路装置,系统硬件复杂,又不方便司机使用和维修。因此,设计一种实时性高、性能可靠的智能辅保系统替代原有的模拟电路装置势在必行。本文将介绍笔者开发的用于韶山型电力机车的智能辅助保护系统的设计及实现。 1 系统的主要功能
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved