在arduino的板子上,作为核心的avr单片机往往都会烧录一个bootloader,这个叫做bootloader的东东其实是arduino研发团队针对arduino板子开发的一小段代码,借助于这段代码,我们可以在不用外部烧录工具的情况下来把我们自己的代码下载到AVR单片机中。为了使一些朋友更容易理解,不妨打个比方,bootloader类似于我们电脑中的windows操作系统,而我们的代码则类似于运行于windows上的各种程序。

一般而言,arduino板的卖家都会把每块板的bootloader都烧好后再出售,这样买家直接收到板后就能够把自己在arduinoIDE中编写的程序借助PC的USB口来下载到arduino单片机内。当然,下载bootloader是需要借助于外部下载器的,可支持的下载器不少,基中比较具有性价比的是usbtinyisp,在淘宝上很多店家都有出售,比如易捷机器人电路的价格就只有38元。对于一般用户,因为在下载自己代码的时候偶尔会出现破坏bootloader的情况,就像PC的windows系统突然之间崩溃了一样。这时候,就会需要用外部下载器来恢复这个bootloader,就相当于PC重装系统。

在arduinoIDE的菜单中有一项是Burnbootloader,专门是用来烧bootloader用的,在连接好下载器和arduino板的ISP接口后,选择"Burnbootloader",以目前主流的uno板为例,这时程序会按以下步骤自动操作:

(1)确认采用stk500的通讯协议。bootloader.atmega328P-<BOARD>.programmer(default value: stk500) is the protocal used by thebootloader.

(2)允许对相应内存地址空间操作。bootloader.atmega328P-<BOARD>.unlock_bits(default value: 0x3F) is the value to write to theATmega328 lock byte to unlock the bootloadersection.

(3)写熔丝位的扩展位。bootloader.atmega328P-<BOARD>.extended_fuses(default value: 0x05) is the value to write tothe extended byte of the ATmega168fuses.

(4)写熔丝位的高位。bootloader.atmega328P-<BOARD>.high_fuses(default value: 0xde) is the value to write to the high byte of theATmega328 fuses.

(5)写熔丝位的低位。bootloader.atmega328P-<BOARD>.low_fuses(default value: 0xff) is the value to write to the low byte of theATmega328 fuses.

(6)给出bootloader文件的路径。bootloader.atmega328P-<BOARD>.path(default value: optiboot) is the path (relative to the Arduinoapplication directory) containing the precompiled bootloader.

(7)给出bootloader文件名。bootloader.atmega328P-<BOARD>.file(default value: optiboot_atmega328.hex) is the name ofthe file containing the precompiled bootloader code (inbootloader.path).

(8)锁定,禁止再修改相应内存空间。bootloader.atmega328P-<BOARD>.lock_bits(default value: 0x0F) is the value to write to theATmega328 lock byte to lock the bootloader section (soit doesn't get accidently overwritten when you upload asketch).

通常,arduino板在下载好了bootloader但还没有upload任何用户代码的时候,会定义一个led(pin13)一闪一闪的,以作指示。

浅谈arduino的bootloader的更多相关文章

  1. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  2. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  3. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  4. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  5. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  6. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  7. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  8. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

  9. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

随机推荐

  1. CSP-J2019 加工零件

    Background: 之前 $noip $死了,泥萌都说 \(noip SPFA\) 了,现在 \(noip\) 复活了,所以 \(SPFA\) 也复活了. (注:这里的 \(noip\) 跟 \( ...

  2. SpringBoot 处理异常的几种常见姿势

    SpringBoot 处理异常的几种常见姿势 1. 使用 @ControllerAdvice 和 @ExceptionHandler 处理全局异常 这是目前很常用的一种方式,非常推荐.测试代码中用到了 ...

  3. uniGUI之多页面框架(16)

    效果图: 左边的树 的树结点 ,通过 结点名 与 右 侧TabSheet名 一致时,显示 相关页面. 这是相关 源代码 procedure TMainForm.UniFormCreate(Sender ...

  4. Scrapy 使用 Item 封装数据、使用 Item Pipline处理数据

    1.Item 和 Field Scrapy 提供一下两个类,用户可以使用它们自定义数据类,封装爬取到的数据: (1)Item类 自定义数据类(如 BookItem)的基类 (2)Field 用来描述自 ...

  5. Laradock 如何通过 ssh 方式连接到 workspace

    用 docker-compose exec workspace bash 方式可以进入容器,但是还是在 xshell 终端连接比较方便.   在网上也没找到方法,其实可以通过密钥的方式连接.记录一下仅 ...

  6. JSON对象和字符串的收发(JS客户端用typeof()进行判断非常重要)

    Ajax前台向后台传递对象: 数据准备 将js对象或者json对象转换为json字符串在Ajax传递,在后台中再将json字符串转换为json对象,再转换为java对象或在前端和后端构造一样的数据结构 ...

  7. java学习-抽象类和接口-抽象类初体验

    今天在老师的带领下学习了抽象类(abstract)和接口(interface),总结一下今天所学的知识. 抽象类是在学习到接口时之前讲解,作为学习接口的铺垫. 下面是我今天写的例题. 一个Shape( ...

  8. Time Series_2_Multivariate_TBC!!!!

    1. Cointegration 2. Vector Autoregressive Model 3. Impulse-response Function 4. Volatility Modeling ...

  9. 玩玩负载均衡---在window与linux下配置nginx

      最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx, ...

  10. bootstrap修改数据刷新页面跳转到当前页的问题

    修改按钮的页面的方法里添加如下代码 1      var pn = $("#datatable").bootstrapTable('getOptions').pageNumber; ...