微控制器引导加载程序的目的是什么?

电器工程 微控制器 图片 avr 引导加载程序
2022-01-30 21:50:30

据我了解,对于普通的单片机(如AVR、PIC),一般有两种对其闪存进行编程的方法。

  1. 使用程序员:在线串行编程(或一些变体?)
  2. 某种形式的引导加载程序,外部设备与之通信,最终允许微控制器闪存自己的存储器。

当然,使用引导加载程序必须有一个很好的理由,否则它目前的广泛使用会很奇怪。我只是似乎还没有完全掌握它。

程序员很贵吗?但是,有Arduinos(ATmega 微控制器)可以用作程序员一个额外 IC 的成本是否足以保证使用引导加载程序?如果我没记错的话,最新的 Arduinos 完全摆脱了 FTDI 芯片,取而代之的是一个 ATmega 处理器,该处理器执行 USB 到串行接口。例如,肯定可以将编程器的功能集成到这个IC上吗?

或者以 PIC 微控制器为例。我见过一种叫做JDM 程序员的东西。如果像这样的东西,几乎没有活动组件,可以对 PIC 进行编程,那么,

  1. 为什么要使用引导加载程序?
  2. 相对复杂得多的PICkit的目的是什么(除了稳健性)?调试能力?
4个回答

引导加载程序的主要目的是允许通过默认硬件接口以外的接口更新固件。例如,这允许通过应用程序用于其自身目的的通信通道进行更新,这意味着您可以进行远程系统内更新,而无需在远程站点进行物理干预。

一旦你拥有了这种能力,你就需要零额外的硬件,这使得它成为经常性成本最低的方法,这就是像 Arduino 这样的业余爱好者系统使用它的原因。它还提供了少量的营销锁定,因为现在您需要购买已经编程到其中的引导加载程序的 AVR 芯片。

在某些情况下,引导加载程序不会增加太多价值。你是对的,如果你有几块板,你当然可以连接程序员并再次刷新代码。如果你是一个有几块板的爱好者,或者你有一个小制作,你可以这样做。

在物理连接程序员不太实用的情况下,引导加载程序更有意义。例如,已经部署的成品就是这些场景之一

通常,当您拥有电子产品时,您不会暴露“调试”或“编程”端口。您的产品上只有以太网、串行、RS485、CAN 或无线。

另外,如果您已经售出/部署了数十个甚至数百个,并且您有固件更新怎么办?

无需一一打开外壳、连接编程器、编程、关闭产品外壳等,您只需使用当前产品的现有接口之一对其进行编程。

当您使用以太网或任何类型的无线“连接”设备时,情况会更好。如果您将无线模块放入您的任何产品中,您可以使用该无线通信与引导加载程序来更新代码,这样您就可以同时更新多个设备而无需触摸它们。

如果您的设备连接到互联网,它就会成为您梦寐以求的功能。这样一来,您只需单击一下即可更新所有内容的固件,因为您的手机会获得更新。

对于业余爱好者来说,使用引导加载程序可能没有多大意义,但从您实际销售设备的业务角度来看,它非常有意义,因为它可以节省时间,增加流程的便利性,并且如果您的用户与您的设备,您不必仅仅为了固件更新而向他们出售编程器(或者让他们购买编程器)。如果您的设备功能相同但使用不同的微控制器怎么办?您必须确定谁拥有什么才能发送或出售正确的程序员,这将成为一场噩梦!

取而代之的是,您只需在其上放置一个 USB 端口,并且所有内容都对用户隐藏,每个人都知道如何将 USB 连接到 PC,将一个文件复制到其中并将其附加到另一台设备,但没有普通用户知道到底是什么是 P&E 调试器、PICKit 或 Segger J-Link。

抱歉,如果这有点令人困惑,英语不是我的语言,也许编辑是一团糟,但我希望你能明白。

干杯!!

引导加载程序的主要目的是:

  • 从存储/网络中检索程序并加载它。

靠近处理单元的快速存储量可能非常有限,并且您要运行的程序可能因板而异,或者您可能想要更改板上的程序。引导加载程序是一个通用程序,它知道如何从存储位置加载自定义软件并将其馈送到处理单元。

高级引导加载程序可以执行以下操作:

  • 自测
  • 网络启动
  • 加载附加固件
  • ...

除了所有其他很好的答案之外,还有一个原因,至少对于商业产品而言:在生产编程之后,大多数芯片都有一个选项集来保护它们不读取数据。

根据 MCU 的不同,这个读出保护选项实际上可以禁用硬件编程器连接(如 SWD 或 JTAG)。如果您没有完成引导加载程序,则无法重新编程设备。

然后你最终在市场上得到了 10k 个带有错误软件的单元,这对本质上是几个月编码的事情造成了巨大的损失。