Arduinoから現在のプログラムを読み取る方法


14

Arduinoブートローダーといくつかのプログラムで既にプログラムされたATmega2560を備えたArduino PCBを購入しました。私はスケッチを持っていますが、それをいじる前に、コントローラーにある現在のバイナリをバックアップしたいと思います。ほとんどのArduinosと同様に、TX0とRX0に接続されたUSBシリアルコンバーターを使用してPCに接続され、ISPインターフェイスはありません。

どうやらArduinoブートローダーに読み取るためのコードがありますが、Arduino IDEにはメニュー項目がないため、どのツールを使用してアクセスするのかわかりません。

Arduinoからプログラムを読み取るには、どのソフトウェアが必要ですか?


ブートローダーで読み取り用のコードを見つけ、質問を編集しました。
AndreKR

これはあなたの質問ではありませんが、arduinoスケッチを.HEXファイルとしてエクスポートできます。
ウランリース

回答:


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
プログラマーはおそらくstk500ではなくarduinoであることに注意してください。
パウロ・ネベス

なぜ4 -vが必要なのですか?
ピーターモーテンセン

AVRDUDEのドキュメントから「2.1オプションの説明」「... -v冗長出力を有効にします。 詳細な-vオプションを使用すると、冗長レベルが高くなります。
Peter Mortensen

これは受け入れられた答えであるはずです。
Caterpillaraoz

はい!pro microブートローダーは、私のpro microクローンでは動作しませんでした。動作中のプロマイクロクローンからフラッシュをダンプし、ブートローダーが必要なものに保存しました。ISP(Linux)のようArduinoの使用-ダンプを:./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

avrdudeスレッドを使用したBackup AVRは質問に答えますか?基本的に、保護ヒューズが設定されていない限り、AVRからすべてのメモリを読み取ることができます。

これは、私がATtinyとATmegaに使用するセットアップです。

示されたボード上:

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

どのピンを使用するかは、コントローラーのデータシートを参照してください。インターネットには、Arduinoを使用したAVRのプログラミングについて書いているウェブサイトがかなりあります。例:http : //hlt.media.mit.edu/?p=1229


そのために2つ目のarduinoが必要ですよね?持っていません。
-AndreKR

1
これは2つのArduinoメソッドです、はい。
ジッピー

そして、写真では少しわかりにくいですが、ターゲットのArduinoで使用されているピンはTX0とRX0でもありませんか?
-AndreKR

いいえ、TXおよびRXはICPには使用されません。回答を少し更新しました。
ジッピー

まあ、あなたは私の質問のすべてのポイントを逃したと思う、おそらく私がそれに悪いタイトルを与えたからだ。質問全体を言い換えました。
AndreKR

3

Arduinoブートローダーのソースコードを見る限り、そこからすべてのメモリを「ダンプ」する方法はありません。ブートローダーは、一度に1つのメモリバイトをダンプできる「モニター」モードをサポートします。ただし、ソースコードのコメントに従って、「/ *ブートブロックサイズの制約により、ATmega128を使用する場合にのみモニター関数がコンパイルされます* /」

そのため、ISPを使用したり、ブートローダーを変更したり、スケッチをアップロードしたくない場合は、運が悪いと思います。


701行目で始まるセクションを参照していましたelse if(ch=='t') {
アンドレKR

良い点-それを見なかった。
RJR

2

そのためのメニューオプションがあると思いましたが、今は見つかりません。ISPプログラマーがいる場合、AVR Studioを使用してメモリイメージをチップから読み取り、HEXファイルに保存することができます。これにより、同じ方法で復元できます。

編集

あなたのコメントに応えて-それは簡単です!それを引き出すには、2つの図に相当する情報を同化する必要があります。1つはArduino / ATMega2560ピンマッピングです。

enter image description here

2番目は、ISPヘッダー/ AVRピンマッピングです。

enter image description here

これらの2つの写真で武装すると、それを接続する方法を確認できるはずです。

  • 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ファイルを読み取ることができるはずです。さらにガイダンスが必要な場合はお知らせください。


私はドラゴンを持っていますが、ドラゴンのどのピンがArduinoのシリアルインターフェースに接続するのかわかりません。
-AndreKR

@AndreKR詳細については私の編集された答えを参照してください
-vicatcu

私の質問で述べたように、もちろんISPを使用してプログラムを読む方法を知っています。私が知りたいのは、シリアルインターフェイス(TX0およびRX0)を使用してそれを行う方法です。これは、Arduinoの世界でコントローラーにプログラムをアップロードするのと同じ方法です。
-AndreKR

@AndreKR私は混乱しています...あなたはドラゴンを持っています、なぜあなたは通常の方法でプログラムを読みたくないのですか?「シリアルインターフェース」に接続するピンがわからないというコメントを誤解しました
vicatcu

私が持っているPCBにはISPヘッダーがありません。ただし、シリアルインターフェイスとArduinoブートローダーがあります。そうすれば、プログラムはArduinoの世界にアップロードされ、どうやら同じ方法でダウンロードできるようです。
AndreKR
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.