2016年10月11日

AVRISP-MKII Clone Programmer Projectのコンパイル

LUFA AVRISP MKII Clone Programmer Projectのコンパイル手順を示す。
例としてAT90USB162の場合を示しているが、適宜使用するマイコン(ATmega32u2等)に読み替えて頂ければ宜しいかと思われる。

■検証環境


・Microsoft Windows10 version 1607 build 14393.223
・Atmel avr8 gnu toolchain Ver.3.5.4.91
・MSYS GNU Make Ver.3.82.90
・Doxygen Ver.1.8.12 Windows x64
・自作AVRISP mkII clone board(AT90USB162)→AVRISP mkII cloneの製作

■AVR toolchainをダウンロード


AVR toolchain

Atmel AVR Toolchain for Windows[atmel.com]

執筆時点では avr8-gnu-toolchain-installer-3.5.4.91-win32.any.x86.exe であった。

インストールが終了したら、
C:\avr8-gnu-toolchain\bin
を環境変数のPATHに追加する。
Windowsスタートメニューを右クリック→システム→システムの詳細設定→詳細設定タブ→環境変数→ユーザー環境変数でPATHを選択→編集→新規で追加できる。
(パスはインストール先に応じて適宜変更の事)


■MinGWをインストール


MinGW

今どきの流行はMSYS2なのかもしれないが、慣れているのでMinGWを導入する。
MinGW | Minimalist GNU for Windows[mingw.org]

mingw-get-setup.exeをダウンロードして実行。

MinGW_Installation_Manager_Setup_Tool

パッケージマネージャが起動するのでインストールする項目を選択。

MinGW_Installation_Manager

項目としては
・mingw32-base (基本ツール)
・mingw32-gcc-g++ (C++ 言語コンパイラー )
・msys-base (bash grepなどのツール)
の3つにチェックを入れたら Installation→Apply Changes で導入開始。

C:\MinGW\msys\1.0\bin
C:\MinGW\bin
を環境変数のPATHに追加する。
(パスはインストール先に応じて適宜変更の事)


■GitHubからソースコードを入手


LUFA Library Copyright(C)でおなじみのDean Cameraさんからソースコードを貰って来る。
GitHub - abcminiuser/lufa: LUFA - the Lightweight USB Framework for AVRs.[github.com]

github lufa

ログインしていれば右側に緑色のボタンでClone or download と表示されるので押す。
Download Zipを選択すると、Zipでファイル一式を落とせる。
色々同梱されているが、ここで必要なのはLUFAとProjectsのAVRISP-MKIIである。


■makefileの編集


Zipファイルを展開したら、Projects\AVRISP-MKII の makefile をテキストエディタで開いて下記の箇所を編集。
(メモ帳だと改行コードが崩れるので宜しくない、notepad++等のテキストエディタを導入する)

MCU = at90usb1287
ARCH = AVR8
BOARD = USBKEY
F_CPU = 8000000



MCU = at90usb162
ARCH = AVR8
BOARD = USBTINYMKII
F_CPU = 16000000

に変更。


■コマンドプロンプトの起動


エクスプローラで Projects\AVRISP-MKII フォルダに移動して、ファイル→コマンドプロンプトを開く→コマンドプロンプトを開く
でコマンドプロンプトを起動する。


■コンパイル


mingw32-make と入力するとコンパイルが始まる。
make

--
C:\temp\lufa\Projects\AVRISP-MKII>mingw32-make
[INFO] : Begin compilation of project \AVRISP-MKII"...

avr-gcc (AVR_8_bit_GNU_Toolchain_3.5.4_1709) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[LNK] : Linking object files into \AVRISP-MKII.elf"
avr-gcc obj/AVRISP-MKII.o obj/AVRISPDescriptors.o obj/V2Protocol.o obj/V2ProtocolParams.o obj/ISPProtocol.o obj/ISPTarget.o obj/XPROGProtocol.o obj/XPROGTarget.o obj/XMEGANVM.o obj/TINYNVM.o obj/HIDParser.o obj/Device_AVR8.o obj/EndpointStream_AVR8.o obj/Endpoint_AVR8.o obj/Host_AVR8.o obj/PipeStream_AVR8.o obj/Pipe_AVR8.o obj/USBController_AVR8.o obj/USBInterrupt_AVR8.o obj/ConfigDescriptors.o obj/DeviceStandardReq.o obj/Events.o obj/HostStandardReq.o obj/USBTask.o -o AVRISP-MKII.elf -lm -Wl,-Map=AVRISP-MKII.map,--cref -Wl,--gc-sections -Wl,--relax -mmcu=at90usb162
[OBJCPY] : Extracting HEX file data from \AVRISP-MKII.elf"
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature AVRISP-MKII.elf AVRISP-MKII.hex
[OBJCPY] : Extracting EEP file data from \AVRISP-MKII.elf"
avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings AVRISP-MKII.elf AVRISP-MKII.eep || exit 0
[OBJCPY] : Extracting BIN file data from \AVRISP-MKII.elf"
avr-objcopy -O binary -R .eeprom -R .fuse -R .lock -R .signature AVRISP-MKII.elf AVRISP-MKII.bin
[OBJDMP] : Extracting LSS file data from \AVRISP-MKII.elf"
avr-objdump -h -d -S -z AVRISP-MKII.elf > AVRISP-MKII.lss
[NM] : Extracting SYM file data from \AVRISP-MKII.elf"
avr-nm -n AVRISP-MKII.elf > AVRISP-MKII.sym
[SIZE] : Determining size of \AVRISP-MKII.elf"

avr-size --mcu=at90usb162 --format=avr AVRISP-MKII.elf
AVR Memory Usage
----------------
Device: at90usb162

Program: 9924 bytes (60.6% Full)
(.text + .data + .bootloader)

Data: 117 bytes (22.9% Full)
(.data + .bss + .noinit)

EEPROM: 2 bytes (0.4% Full)
(.eeprom)


[INFO] : Finished building project \AVRISP-MKII".
--

AVRISP-MKII.hexが出力されている事を確認する。

■ドキュメント生成


Doxygenでドキュメントを出力する。
Windowsバイナリもちゃんと提供されている。
GUIは不要なので、32-bit doxygen binary in a zip をダウンロードする。
Doxygen: Downloads[stack.nl]

適当なフォルダに展開したら PATHを追加しておく。
実行はプロジェクトフォルダでdoxygenと入力する。

C:\temp\lufa\Projects\AVRISP-MKII\doxygen

Documentation\htmlが生成される。

index.htmlを開くとプロジェクトのドキュメントを閲覧できる。
ISPやPDI、TPI接続のピン配置もまとめられているので一度目を通しておいたほうがよい。

■FLIPでボードに書き込み


Atmelから書き込みソフトをダウンロードする。
FLIP[atmel.com]

執筆時点では、Flip Installer - 3.4.7.112.exeであった。

Device Selection
Device→SelectでAT90USB162を選択

Settings Communications USB
Settings→Communication→USBを選択

File→Load HEX File..でhexファイルを選択。

Runで書き込み。

基板上のLEDが点滅する。
Verify PASSの表示がでればOK。

Start Appricationで書き込まれたプログラムが実行される。
ここで再起動を要求されるがしなくてもよいと思う。

HBWジャンパを外してUSBを抜き刺しするとAVRISPとなり、HBWジャンパを付けるとAT90USB162になる。
ジャンパ付けても変わらない場合は基板上のリセットボタンを押すと多分変更される。


■ドライバ導入


AVRISP MKII
始めて書き込みを行った場合はlibusb32のドライバが当たっていないと思われるのでデバイスマネージャで[?]が出る。以下3つの手順のうちどれかを参考にドライバを導入する。

1.libusb-win32(これが一番まっとう)
libusb-win32 download | SourceForge.net[sourceforge.net]
ただし署名なしのドライバなのでWindows10での導入には色々と手順が必要。
・BIOSでUEFIのセキュアブートを解除
・設定→更新とセキュリティ→回復→PCの起動をカスタマイズする→再起動する→トラブルシューティング→詳細オプション→スタートアップ設定→再起動
・スタートアップ設定の起動オプション、7)ドライバー署名の強制を無効にする を選択して起動
起動後は未署名のドライバも導入出来るようになっている。

Driver inf wizard
libusb-win32-bin-1.2.6.0\bin の inf-wizard.exe を実行。

Driver inf wizard
AVRISP mkIIを選択し、Nextを押す。

Driver inf wizard
これでinf及びcatファイルを生成され、Install Nowでドライバが導入される。

2.Githubのlufaのドライバ
AVRISP-MKIIのソースコードにWindowsドライバも付属しているように見える。
Lufa AVRISP MKII Windows Driver
これを使って良いのだろうか?

Lufa AVRISP MKII Windows Driver
署名付きなので再起動は不要。

3.olimexのドライバ
AVR-ISP-MK2 - Open Source Hardware Board[olimex.com]
市販のAVRISP MKIIクローンとして有名な物。
回路が同じだから拝借してみると使えた。あまりお行儀はよくない。
これも署名付きなので再起動は不要。


■書き込みテスト


LチカのサンプルプログラムBlinkを書いてみる。
なお、サンプルスケッチのpinModeを1から3に変更している。
これはATtiny85のデジタルアウト3にLEDを接続している為である。

void setup() {
// initialize digital pin 3 as an output.
pinMode(3, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
digitalWrite(3, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(3, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}


■書き込みテスト動画


Arduino IDE 1.6.12 で上記スケッチをコンパイル、AVRISP MKII clone boardを使用してATtiny85に書き込むとLEDが点滅する。




■参考


使用したSource codeとCompile済みファイルを7zip形式で上げておく。
AT90USB1287@8MHz, AT90USB162@16MHz, ATmega32u2@16MHz, ATmega32u4@16MHzのhexである。
 sz.png AVRISPMKIICloneProgrammer.7z
[license]LUFA Library Copyright(C)Dean Camera, 2016.
[SHA256]0fba33dc1d4375650e99b79a8f63ab45b55fb5b7341c79ee8f29c868aa2bc34e
virustotalでウイルスチェック済み。
 

【関連記事】
AVRISP mkII cloneの製作
ATTiny書き込み用8Pin子基板の製作
AVRISP mkII cloneを3.3V化
 
2016/10/11 23:59 | カテゴリ: 特殊工作部