如何从Arduino读取当前程序?


14

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

显然,可以在Arduino引导加载程序中读取代码,但是由于Arduino IDE中没有菜单项,因此我不知道使用哪种工具来访问它。

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


在引导加载程序中找到要读取的代码,已编辑问题。
AndreKR 2012年

这个重要的问题是您的问题,但是您可以将arduino草图导出为.HEX文件。
铀李斯

Answers:


1

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


11

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

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

1
请注意,适用的程序员可能是arduino,而不是stk500。
Paulo Neves

为什么需要四个-vS?
Peter Mortensen

AVRDUDE文档中,“ 2.1选项说明”“ ... -v启用详细输出。 更多-v选项可提高详细程度。
Peter Mortensen

这应该是公认的答案。
Caterpillaraoz

是!专业微型引导程序在我的专业微型克隆上不起作用。我从工作正常的微型克隆中转储了闪存,并保存到需要引导加载程序的闪存中。使用一个Arduino作为ISP(Linux版) -转储:./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:r:"/tmp/dump.bin":r -P /dev/ttyUSB0; 写:./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:w:"/tmp/dump.bin":r -P /dev/ttyUSB0; 验证:./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:v:"/tmp/dump.bin":r -P /dev/ttyUSB0
b_laoshi

7

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

是我用于ATtiny和ATmega的设置。

在显示的板上:

  • 11 = MOSI
  • 12 = MISO
  • 13 = SCLK

请参阅控制器的数据表,以使用确切的引脚。互联网上有很多网站都在写有关使用Arduino编程AVR的信息,例如:http : //hlt.media.mit.edu/?p=1229


我需要第二个arduino,对吗?我没有一个。
AndreKR 2012年

1
这是两种Arduino方法,是的。
jippie 2012年

而且,尽管在图中很难看到,但目标Arduino上使用的引脚也不是TX0和RX0,不是吗?
AndreKR 2012年

否,ICP不使用TX和RX。更新了答案。
jippie 2012年

好吧,我想您错过了我的问题的全部重点,可能是因为我给它打了一个不好的标题。我改了整个问题。
AndreKR 2012年

3

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

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


我指的是从701行开始的部分else if(ch=='t') {
AndreKR 2012年

好点-没看到。
RJR 2012年

2

我以为有一个菜单选项,但现在找不到。如果您有ISP程序员,则可以使用AVR Studio从芯片上读取内存映像并将其保存在HEX文件中,这将使您可以通过相同的方式对其进行还原。

编辑

根据您的评论-很简单!您需要吸收两个图表的相关信息才能实现。第一个是Arduino / ATMega2560引脚映射。

在此处输入图片说明

第二个是ISP标头/ AVR引脚映射:

在此处输入图片说明

有了这两张图片,您应该能够看到如何进行连接。

  • 用电线将DIG50连接到Dragon ISP插头引脚1
  • 从VCC到Dragon ISP接头针脚2布线
  • 将电线从DIG52连接到Dragon ISP插头引脚3
  • 用电线将DIG51连接到Dragon ISP插头的针脚4
  • 从RESET到Dragon ISP排针5线
  • 从GND到Dragon ISP排针6线

有了这些文件之后,您应该能够使用AVR Studio从芯片上读取Hex文件-如果您需要更多指导,请告诉我。


我有一个Dragon,但是我不知道Dragon上的哪些引脚可以连接到Arduino的串行接口。
AndreKR 2012年

@AndreKR有关更多信息,请参见我的修改后答案
vicatcu 2012年

正如我的问题所述,我当然知道如何使用ISP读取程序。我想知道的是如何使用串行接口(TX0和RX0)进行操作-与将程序上载到Arduino世界中的控制器的方式相同。
AndreKR 2012年

@AndreKR我很困惑...你有一条龙,为什么你不想以正常的方式阅读程序-我误解了你关于不知道哪些引脚连接到“串行接口”的评论
vicatcu

我的PCB没有ISP接头。但是,它具有串行接口和Arduino引导程序。这样,程序就可以在Arduino世界中上载,并且显然可以用相同的方式下载。
AndreKR 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.