如何从 Arduino 读取当前程序?

电器工程 Arduino
2022-01-17 21:41:05

我购买了一个带有ATmega2560的 Arduino PCB ,已经使用 Arduino 引导加载程序和一些程序进行了编程。我确实有草图,但在摆弄它之前,我想备份控制器中的当前二进制文件。与大多数 Arduino 一样,它使用连接到 TX0 和 RX0 的 USB 转串口转换器连接到 PC,并且没有ISP接口。

显然,Arduino bootloader 中有用于读取的代码,但我不知道使用哪个工具来访问它,因为 Arduino IDE 中没有菜单项。

我需要什么软件才能从 Arduino 读取程序?

4个回答

我使用以下命令从 Duemillenova 转储了 ATMega328P 的内存:

avrdude -C avrdude.conf -v -v -v -v -p atmega328p -c stk500 -U flash:r:"c:/arduino.hex":r -P\\.\COM2 -b57600

带有 avrdude线程的Backup AVR 是否回答了您的问题?基本上,只要未设置保护保险丝,您就可以从 AVR 读取所有内存。

是我用于 ATtiny 和 ATmega 的设置。

在显示的板上:

  • 11 = 莫西
  • 12 = 味噌
  • 13 = SCLK

请参阅控制器的数据表,具体使用哪个引脚。互联网上有很多关于使用 Arduino 编程 AVR 的网站,例如:http ://hlt.media.mit.edu/?p=1229

据我从Arduino 引导加载程序源代码中可以看出,没有办法从中“转储”所有内存。引导加载程序确实支持“监控”模式,该模式允许您一次转储一个内存字节。但是,根据源代码注释“/* 监控功能将仅在使用 ATmega128 时编译,由于引导块大小限制 */”

因此,如果您不想使用 ISP、更改引导加载程序或上传草图来执行此操作,我想您很不走运。

Arduino 引导加载程序是原始 STK500 协议 (1.x)的变体。字符“t”(ASCII 0x74)是“读取页面”命令。因此,也许可以使用AVRDUDE通过引导加载程序通过串行端口将程序拉出……但我认为最多需要一些花哨的时间才能将其拉出。