浅谈arduino的bootloader

本文深入讲解了Arduino板上的Bootloader作用及其烧录过程,通过比喻将其比作电脑的Windows操作系统,用户代码则如同运行其上的应用程序。介绍了使用usbtinyisp下载器恢复Bootloader的方法,以及在Arduino IDE中通过“Burnbootloader”菜单项进行烧录的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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)一闪一闪的,以作指示。

转载于:https://www.cnblogs.com/anandexuechengzhangzhilu/p/10719808.html

### Arduino 引导加载程序信息与编程指南 #### 什么是引导加载程序? 引导加载程序(Bootloader)是一个小型的软件,通常存储在微控制器的闪存中特定位置。当Arduino启动时,会先执行这段代码。其主要功能是从串口读取新的固件并将其写入到微控制器的闪存中[^1]。 对于Arduino Uno这样的板子,默认情况下已经预装了一个官方提供的Optiboot引导加载程序。这允许用户通过USB端口轻松地上载新草图而无需外部硬件编程器。 #### 如何烧录引导加载程序? 如果需要重新安装或更新引导加载程序,则可以利用另一块配置好作为ISP (In System Programmer) 的Arduino来完成此操作。具体过程如下: - 打开IDE中的`文件 -> 示例 -> 11.Arduino ISP -> ArduinoISP`项目; - 编译并通过已知正常工作的Arduino上传该素描至目标板上充当ISP的角色; - 将充当ISP角色的Arduino与待刷写的Arduino按照指定方式连接起来; - 返回IDE,在工具菜单下设置正确的开发板型号以及端口号; - 使用命令行工具如avrdude或者借助于Arduino IDE内置的功能来进行实际的烧录工作; 值得注意的是,在某些情形之下可能会遇到错误提示比如:“recipe for target 'flash' failed”,这类问题往往是因为Makefile配置当或者是权限足等原因造成的[^3]。 为了确保能够成功地向MCU内部Flash区域写入数据,建议确认所有接线无误,并且拥有足够的管理员权限去访问相应的COM端口资源。 ```bash sudo avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 19200 -U flash:w:optiboot_atmega328.hex:i ``` 上述命令展示了如何使用AvrDude命令行工具配合Linux下的TTY设备节点实现对AtMega328P芯片的标准Hex文件进行烧录的例子。 #### USB Serial 接口的作用 一旦正确设置了引导加载程序之后,就可以利用USB转UART桥接到计算机上的虚拟串行端口来进行后续的应用层通信了。这种机制使得开发者能够在依赖额外硬件的情况下方便快捷地发送指令给单片机平台并且获取返回的信息流[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值