查看: 9571|回复: 11

[奈何帮我整理一下格式~]Bootloader是个啥(专指Arduino的哟~)

[复制链接]
  • TA的每日心情
    无聊
    2017-1-24 10:00
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2012-12-18 16:55 | 显示全部楼层 |阅读模式
    本帖最后由 槑小子 于 2012-12-21 22:57 编辑

    前几天把2560玩坏了,然后就送回了奈何手里,最后的结果就是Bootloader坏掉了,貌似就是我手一欠刷坏了。(其实我早就知道了~就是自己没有能力修,没有下载器呀。Arduino当下载器那个实例程序根本不靠谱。⊙﹏⊙b汗)到了奈何手里,灵巧的一刷,然后,然后就好了。自己也折腾了Bootloader好久,写点什么留下来吧。(顺便看看能不能混成个精华~)(左面的,这样太功利了,不好不好~)(左面的,因为你切开了奈何的大脑,所以他估计给不了你精华了(┬_┬))

    来模仿奈何的语气,山寨一篇不算教程的教程吧。就是介绍一下而已,太具体的我根本不懂得。

    嗯,要是只为了知道怎么刷Bootloader,就跳过什么事Bootloader这段吧。

    ——————————起飞啦——————————

    在说Bootloader以前,先来说说Arduinio的关键是个啥。

    现在假设奈何就是一块Arduino好了。(奈何不要生气哈~)是那块呢,就是UNO~嗯这样挺好。假设奈何就是UNO。那他的大脑是什么呢?就是UNO上面的“大芯片”ATMEGA328P。实际上呢,就是一个AVR单片机。(为什么不是ARM呢?因为奈何不是高富帅呀~ARM太贵了~)(左面的,直接说你不知道ARM的原理好了)然后呢,奈何的大脑有一个运算器(不然怎么执行程序呢?当然这不是重点)重点是,有人已经提前告诉好奈何要干什么了。比如已经告诉好奈何要每天送出一块板子。(嗯,这样很好)然后这个命令就存在奈何大脑里的FLASH里了。

    可是这个命令是怎么写进奈何脑子里的呢?实际上有三种办法。第一,就是把奈何的脑子撬开,把大脑取出来(就是把主控芯片焊下来),然后把奈何的脑子(主控芯片)接上编程器(是高压编程器么?不了解,应该是吧),(有点残忍)然后上电,写程序。第二种,用洗脑器(就是各种ISP下载器。ISP. In System Program),接上奈何的大脑,把程序写进。去第三种,就是把命令写在纸上,然后让奈何看看,然后奈何记住了,就一天送一块板子啦~~\(≧▽≦)/~啦啦啦。

    那么,为了不那么暴力,就是说,我们平常都用的是第三种方法给奈何下的程序。而奈何能看懂之上写的什么,并记到脑子里(写到FLASH里)的秘密,就全在Bootloader上面了。也就是这个Bootloader,让我们可爱的奈何学会了IAPIn Application Program),也就是不用撬开奈何大脑编程或者用洗脑器的办法。

    在漫谈奈何是怎么记住新的指令之前(其实Bootloader的原理并不是太懂,只是凭感受来说的。对不起各位,我会好好学习的%>_<%)先来看奈何的大脑(FLASH啦)的构造。奈何的大脑可以运算,可以记忆。当然,我们关心的是他的记忆部分。奈何的记忆部分分为FLASHEEPROM两部分。其中FLASH是奈何记忆指令的地方(记住怎么干,干什么的地方。也就是记住每天送一块板子的地方)。EEPROM是记录一些掉电以后不能忘的数据的地方。(比如奈何每天送出一块板子以后,会在EEPROM中今天的位置做上标记。这样以后,即使有人把奈何电池拆了,想让他忘了自己今天送过板子,也是不可能的事情了~)。还记得Bootloader是什么么?就是一组能让奈何理解指令的代码,Bootloader也同样是代码,所以是存在FLASH离得,所以我们讨论的重点在FLASH上,没有EEPROM什么事。(喂,那你还提他干嘛⊙﹏⊙b汗)。【重点实际上就是我们讨论的重点在FLASH上】

    奈何的大脑要记住Bootloader(如果他有的话),又要记住程序代码,怎么区分这两者呢?其实在奈何的DNA中(哈~就是AVR的熔丝啦~觉得和DNA一样,可以控制一些特性,所以就拿来比喻一下啦~对了,熔丝可不能像DNA那样的遗传哟~),有几个控制Bootloader大小的“开关”(其实是熔丝位~)还有一个控制复位向量的开关。控制大小的开关,可以设定几档Bootloader的大小。而复位向量(BOOTRST)是决定AVR复位时,是从Application区开始读取程序指令,还是从Bootloader区读取程序指令。在这里不得不说一下什么事Application区和Bootloader区。前面说了,奈何的DNA决定了Bootloader区的大小。所以奈何的机体就自觉地在大脑中留出了一块地方。那么放Bootloader的地方就是Bootloader区,放用户所想的程序指令的地方就是Application区啦~

    说回来,如果有了Bootloader并且设置好了相关的选项,那么就可以通过可以利用的任何数据接口读取Application区的程序代码,并覆盖写入自身FLASH中的Application区。这就是Bootloader的作用吧(本人认为这是本人给出的一个比较准确的定义)我们来举个例子。假设奈何已经设定好了相关的Bootloader程序。也设定了复位时指向Bootloader区,并且他的Application区已经在以前设定好了“每天送一块板子”的指令。然后呢,我觉得每天送的太少了,于是我决定改成“每天跟奈何说话的人奈何都要送他一块板子”~(好邪恶呀)。于是我先要复位一下奈何。然后奈何在复位之后就先运行已经设定好的Bootloader程序,然后我根据在Bootloader实现约定好的暗号(其实这段我的理解可能有很大问题,不过,有奈何你来帮我改么~)在满足条件的情况下发送暗号。【比如说,在Bootloader中事先设定好了,复位后的10毫秒内,对他说“奈何是高富帅”,然后Bootloader就会开启向Application区写入程序的程序,否则,就开始运行Application里原有的程序】,然后Bootloader就开始从串口(比如说)读取新的Application程序。【这么巧,奈何身上还有一个USB转串口的东西,这么巧,Arduino上面都有~
    可见,我们在下载的时候,并没有用洗脑器对奈何的大脑进行洗脑(用下载器~),而是用了一种相对温和的办法。

    很可惜,我们在设定奈何Bootloader区大小,复位向量以及里面的程序的时候,还是要用到下载器的。

    但是还是要提一点,在奈何的DNA中,有一个专门控制允不允许用ISP下载的开关(实际上是负责ISP下载使能的,置0表示允许ISP下载)(左面说的对么?求奈何明确)要是一个不小心,把ISP使能置1了,就是所说的吧芯片锁了。想想看,ISP没法使了,IAP要是没坏,也没人会想到刷Bootloader的,对吧。那就只能用最原始的办法,撬开奈何的大脑了。吧芯片卸下来,用高压编程器。这里所说的高压编程器中的高压,并不是我们所说的高压(220V什么的~)而是对于芯片来说的高压(貌似是12V吧,还是求奈何的标准说法)【一般要是把ISP锁了,那就把芯片弄下来换新的吧(要不就给OJ寄回去,让他们帮忙吧)】那么,说了那么多废话,来说点实际的吧。怎么刷Bootloader呀。

    再说怎么刷Bootloader之前,我想先说,有些时候是没有必要刷Bootloader的。因为Bootloader是很难损坏的。要是遇到问题,应该先试试换个USB口,换一根USB线,换台电脑或者重启一下。如果还不行,再来考虑是不是Bootloader的问题。

    先来说说我是怎么弄坏我2560(就是MEGA2560)的bootloader的吧。(不!要!模!仿!)

    当时拿到2560那叫一个兴奋呀(废话,奈何给大家掏的腰包)(奈何:%>_<%  T_T),然后就拿来刷程序。当时看到IDE里面带的示例程序中有一个ISP下载器的示例程序,然后就想:能不能用我的UNOISP下载器,给2560下程序。然后就动手实践了有木有%>_<%。然后呢,就这样,然后就用UNO当了下载器(后来上网发现,我的用法不对%>_<%)。然后呢,然后我的2560就被刷坏了。然后自己还很天真并且执着的用UNO不停地给我的2560Bootloader。然后呢,然后就没有然后了。就寄回去了。

    其实我的感受就是,只要板子不是次品(我觉得这个也很重要),也没有用ISP下载口(就是那个六个针的东西)(貌似有的板子是不给接出来的)【所以,平常没事千万别抽风的动那个口,特别是有的板子上有两组六个针的口的,千万别动靠USB接口近的那个】那就不会有什么关于Bootloader的问题。

    可要是真的出了问题呢?怎么办?

    ————————————机场到啦~~~降落啦————————————

    现在来讲怎么拯救亚健康的芯片(仅限于没有锁ISP的芯片)

    至于怎么让奈何的脑子恢复正常(正常是指能正常“听说读写”)。首先我们需要一个ISP下载器。这里我用的是USBASP,一个基于ATMEL单片机的ISP下载器。(它的原理以前看过,现在忘了。。。。。。)其实供大家选择的下载器有很多。像什么USNTINYISP(这个名字对么。。。。。。完全不记得了,好像是这么拼)、USBASP还有ATMEL官方的各种下载器~~~当然,本屌丝选用了USBASP~~~还是OJ内部版本~~~(奈何,这要是机密的话,我就删了~)。其实,最好的还是先打开ArduinoIDE,打开工具菜单,选择下载器。然后看看IDE支持哪些下载器。(我就在这里用USBASP作示范了,其实用什么都是大同小异,原理都是一样的)

    前面说了怎么选下载器。其实恢复Bootloader的方法很是简单。简单的到让大家失望。首先,把USBASPISP接口接到板子上的ISP口。(离主芯片最近的,不是离USB最近的!!!)如果下载器上是10针的接口,那就要么用转接线,要么用转接板(我自己搞的脑残小玩意),要么就用杜邦线一一对应的插上。

    【加图,一定想着加图】(这里是OJUSBASP下载器背面的温馨提示~~~就直接抄过来了)

    插好之后,就把下载器插到电脑上。然后在IDE里工具菜单里的下载器中选择相应的下载器(我这里选USBASP。然后再板子中选择自己板子的型号。点击烧写Bootloader就好了。


    (在想想再写吧,还是仰仗奈何给指点呀~~~奈何~~~就当扫盲了)

  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2012-12-18 17:24 | 显示全部楼层
    ISP:In System Programming  通过洗脑器(黑衣人用的那种)给我洗脑
    IAP:In Applicatin Programming 通过眼睛或者耳朵传输给我(比如UART)
    至于把我脑子取出来。。。那是很古老的下载方式了

    例子不太恰当~
    如果以上内容对你有帮助,你可以通过打赏支持作者

    该用户从未签到

    发表于 2012-12-18 18:14 | 显示全部楼层
    你已经深深的爱上了奈何蜀黍
    打赏作者鼓励一下!
  • TA的每日心情
    慵懒
    2019-4-17 21:21
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    发表于 2012-12-18 18:18 | 显示全部楼层
    脑子取出来 芯片就坏了。。。   不过,有这种方法来破解芯片,COPY程序的。
  • TA的每日心情
    开心
    2016-6-30 15:05
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2012-12-19 15:37 | 显示全部楼层
    损友啊 为何奈何脑子撬开了 损友都来顶贴了
  • TA的每日心情
    无聊
    2017-1-24 10:00
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2012-12-19 16:59 | 显示全部楼层
    奈何col 发表于 2012-12-18 17:24
    ISP:In System Programming  通过洗脑器(黑衣人用的那种)给我洗脑
    IAP:In Applicatin Programming 通过 ...

    谢谢啊~~~奈何~O(∩_∩)O谢谢

    点评

    编辑的事情,还是你自己来吧  详情 回复 发表于 2012-12-19 17:10
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2012-12-19 17:10 | 显示全部楼层
    槑小子 发表于 2012-12-19 16:59
    谢谢啊~~~奈何~O(∩_∩)O谢谢

    编辑的事情,还是你自己来吧
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    无聊
    2017-1-24 10:00
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2012-12-20 07:10 | 显示全部楼层
    奈何col 发表于 2012-12-19 17:10
    编辑的事情,还是你自己来吧

    喂。。。。。住宿生时间少呀

    点评

    我上班忙啊~  详情 回复 发表于 2012-12-20 09:56
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2012-12-20 09:56 | 显示全部楼层
    槑小子 发表于 2012-12-20 07:10
    喂。。。。。住宿生时间少呀

    我上班忙啊~
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    无聊
    2017-1-24 10:00
  • 签到天数: 10 天

    [LV.3]偶尔看看II

     楼主| 发表于 2012-12-20 12:24 | 显示全部楼层
    奈何col 发表于 2012-12-20 09:56
    我上班忙啊~

    奈何。没有精精华呀。。。
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    HDC1080+TEMT6000采集温湿度及亮度数据
    HDC1080+TEMT6000采集温湿
    wifiduino上的A0因为接了电阻,所以并不是很准,这里仅用于采集亮度变化。如果你需要
    基于机器视觉的智能分拣机械臂
    基于机器视觉的智能分拣机
    本作品是一个基于机器视觉的智能机械臂操作平台,其采用atmega32单片机作为主控制系统
    【Arduino】108种传感器模块系列实验(122)---micro:bit 开发板
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    (开源)ESP8266改装小风扇,app远程控制+天猫精灵控制
    (开源)ESP8266改装小风
    材料准备 [*]USB风扇一个 [*]ESP8266一块 [*]3.3继电器一块 拆解风扇 第一次,没有
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表