0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Arduinoからバイナリファイルをダウンロードする

Posted at

Arduinoからバイナリファイルをダウンロードする

AVRDUDE

Microchip社製AVRマイクロコントローラー用アップロード/ダウンロードツール、だそうです。
https://github.com/avrdudes/avrdude

ダウンロード

今回はWindowsで作業するためにビルド済みWindows版を持ってきます。
https://github.com/avrdudes/avrdude/releases

  • x64用はこれ
    • avrdude-v7.3-windows-x64.zip

展開

適当な場所に展開しておきます。(今回は C:\avrdude に展開します)

使用方法

詳細は AVRDUDE documentation を読みましょう。

ダウンロードしてみる

まずArduinoをUSBケーブルでPCと繋いでおきます。
今回はCOM5で接続されています。

移動してファイルがそろっているか確認します。

C:\>cd c:\avrdude
C:\avrdude>dir /b
avrdude.conf
avrdude.exe
avrdude.pdb

接続はCOM5、対象のボードは前回使用したELEGOO MEGA 2560です。

AVIDUDE Intoroductionによると

Wiring boards (e.g. Arduino Mega 2560 Rev3) are supported, utilizing STK500 V2.x protocol, but a simple DTR/RTS toggle to set the boards into programming mode. The programmer type is “wiring”.

ということなのでMega2560はwiringを指定するとよいようです。

avrdude -p m2560 -c wiring -P COM5 -U flash:r:"c:\avrdude\test1.bin":r

こんな感じでダウンロードが進みます。

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e9801 (probably m2560)

avrdude: processing -U flash:r:c:\avrdude\test1.bin:r
avrdude: reading flash memory ...
Reading | ################################################## | 100% 33.56 s
avrdude: writing output file c:\avrdude\test1.bin

avrdude done.  Thank you.

ダウンロードしたバイナリを覗いてみる

c:\avrdude\test1.bin にRaw Binaryでダウンロードされたファイルをちょっと覗いてみることにしましょう。
といってもそのままではヘックスコードなので16進数の羅列です。
16進数を2進数に置き換えてCPU命令セットと突き合わせるのは大変なので、逆アセンブルを仕掛けます。

AVR-GCC/OBJDUMP

AVRに対応したGCCに付随するobjdumpを使います。
Windows環境で構築すると大変なのでLinux環境としてUbuntu on WSLを使用します。

インストール

Ubuntuではコンパイル済みバイナリがありますのでapt-getでインストールします。

sudo apt-get install gcc-avr

インストールが終わったら念のため場所を確認しておきます。

puipui@poepoeyo:~$ which avr-gcc
/usr/bin/avr-gcc

puipui@poepoeyo:~$ ls /usr/bin/avr-*
/usr/bin/avr-addr2line  /usr/bin/avr-elfedit    /usr/bin/avr-gcc-ranlib  /usr/bin/avr-nm       /usr/bin/avr-strings
/usr/bin/avr-ar         /usr/bin/avr-g++        /usr/bin/avr-gcov        /usr/bin/avr-objcopy  /usr/bin/avr-strip
/usr/bin/avr-as         /usr/bin/avr-gcc        /usr/bin/avr-gcov-tool   /usr/bin/avr-objdump
/usr/bin/avr-c++        /usr/bin/avr-gcc-5.4.0  /usr/bin/avr-gprof       /usr/bin/avr-ranlib
/usr/bin/avr-c++filt    /usr/bin/avr-gcc-ar     /usr/bin/avr-ld          /usr/bin/avr-readelf
/usr/bin/avr-cpp        /usr/bin/avr-gcc-nm     /usr/bin/avr-ld.bfd      /usr/bin/avr-size

バイナリファイルをダウンロードした場所に移動します。

cd /mnt/c/avrdude

avr-objdumpで逆アセンブルします。CPU命令セットがどれかわからないので今回は適当に107を指定してありますが、Aruinoでは25あたりがよくつかわれるようです。

avr-objdump -D -m avr:107 -b binary test1.bin > test1.txt

これでtest1.txtに逆アセンブリしたコードが出力されます。
(こんな感じ)

test1.bin:     file format binary

Disassembly of section .data:

00000000 <.data>:
       0:	0c 94 28 01 	jmp	0x250	;  0x250
       4:	0c 94 59 01 	jmp	0x2b2	;  0x2b2
       8:	0c 94 59 01 	jmp	0x2b2	;  0x2b2
       c:	0c 94 59 01 	jmp	0x2b2	;  0x2b2
      10:	0c 94 59 01 	jmp	0x2b2	;  0x2b2
      14:	0c 94 59 01 	jmp	0x2b2	;  0x2b2
(中略)
     148:	00 00       	nop
     14a:	21 00       	.word	0x0021	; ????
     14c:	24 00       	.word	0x0024	; ????
     14e:	27 00       	.word	0x0027	; ????
     150:	2a 00       	.word	0x002a	; ????
     152:	2d 00       	.word	0x002d	; ????
     154:	30 00       	.word	0x0030	; ????
     156:	33 00       	.word	0x0033	; ????
     158:	01 01       	movw	r0, r2
     15a:	00 00       	nop
(中略)
     250:	11 24       	eor	r1, r1
     252:	1f be       	out	0x3f, r1	; 63
     254:	cf ef       	ldi	r28, 0xFF	; 255
     256:	d1 e2       	ldi	r29, 0x21	; 33
     258:	de bf       	out	0x3e, r29	; 62
     25a:	cd bf       	out	0x3d, r28	; 61
     25c:	00 e0       	ldi	r16, 0x00	; 0
     25e:	0c bf       	out	0x3c, r16	; 60
     260:	23 e0       	ldi	r18, 0x03	; 3
     262:	a4 e2       	ldi	r26, 0x24	; 36
     264:	b2 e0       	ldi	r27, 0x02	; 2
     266:	01 c0       	rjmp	.+2      	;  0x26a
     268:	1d 92       	st	X+, r1

初手アドレス0x250にJMPしてますね。0x250からはメモリ格納命令が続くので変数やら定数やらをまず格納するみたいですが、前回のソースコードを見比べるとずいぶん動きが違うのがわかると思います。(そもそもアドレス00000000から始まるのかどうかわかりませんが。。。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?