Arduino Uno Rev.3を使ってJapaninoのBootloaderを書き込む

みなさん（？）初めまして。
こんな誰も読まなさそうな投稿を見に来てくださりありがとうございますm(_ _)m

初めて[^1]ということもあり、色々とお見苦しい点があると思うので、何かありましたら遠慮なくコメントで教えて下さいまし。

記事の内容はタイトルそのまんまで、偉大なる参照元である**「[Arduino UNO Rev.3 で AVRISP mkII クローンを作る](http://make.kosakalab.com/make/electronic-work/avrisp-mk2/uno-r3_avrisp-mk2/)」[^2]と「[Atmel Studio 6.0とAVRISPmk2でoptibootをJapaninoに書き込む](http://www.nina.jp/server/arduino/optiboot/optiboot.html)」を組み合わせただけ。**
組み合わせた手順を紹介しているサイトが見つからなかったので投稿しました。

#経緯
2010年に学研から発売されてすぐにJapaninoを買ったもののなぜかスケッチを書き込むことができなくて、ドライバを変えてみたりboads.txtを編集してみたりしたけど書き込めないままだったから５年以上放ったらかしてたけど気になり続けていた
　　　　　　　　↓
ブートローダを書き込み直すしかないか…
　　　　　　　　↓
AVRISPmkII持ってないけどArduino Unoなら持ってる
　　　　　　　　↓
Arduinoを使ってArduinoのブートローダを書き込む記事があった事を思い出した
　　　　　　　　↓
Japaninoでも出来るんじゃないか？
　　　　　　　　↓
　　　　　　　**出来た**

#必要な環境
- Windowsを搭載したデスクトップPC（仮想マシン上のWindowsでも可能らしい）
筆者はWindows10 Pro 1703 64bitで作業しました

- Arduino Uno Rev.3に付いている
  - ATmega16U2（USB-シリアル変換IC）
  - ATmega328P-PU（AVRマイコン）

#必要な準備
- Flipツール（ATmega16U2にDFUでプログラムを書き込むツール）を[ここ](https://www.microchip.com/developmenttools/ProductDetails/flip)からダウンロードしインストールしておく
（JREの有無によってダウンロードするファイルが異なります）

- AVRISP mkII クローンファームウェア`(ATmega16U2に書き込むことでAVRISP mkIIのように使えるようになるファームウェア)`を[ここ](http://make.kosakalab.com/archives/AVRISP-MKII_ATmega16u2.zip)からダウンロードし解凍しておく
hexファイル（書き込むファームウェア）が生成されればOK
>上記のファームウェアがうまく働かない場合は[AVRISP-MKII_130303.zip](http://make.kosakalab.com/archives/AVRISP-MKII_130303.zip)をご利用ください。
解凍するとAVRISP-MKII_130303_toggle_driver.hexが生成されます。

- ブートローダを書き込むだけには余りにも巨大なAtmel Studioを[**ここ**](https://www.microchip.com/mplab/avr-support/atmel-studio-7#Contentplaceholder1_C018_Col00)からダウンロードしインストールを開始する
なお少しでも軽くするために「Select Architecture」の画面では**「AVR 8-bit MCU」のみチェックすれば良い**（AVRISPmkIIはAVR 8-bit MCUだから）
Visual Studio → Atmel Studio → AVRISPmkIIのドライバの順にインストールされます。
ドライバのインストール時にダイアログが表示された場合は「インストール」を選択します。
インストールには時間がかかるので次の作業に進みましょう。

- ArduinoとJapaninoを接続するための線を用意しておく
一般的なジャンパ線があればそれがベストだけれどちゃんと通電すればなんでもいい（ぉぃ

- Arduino UNOの基板上にはJP2があり（無い場合は未検証）、矢印で示した箇所だけを使うことになる[^3]のでピンを付けてもいいのであれば（元々あるハンダを吸い取り）2.54mmピッチのピンヘッダをハンダ付けする
筆者のArduinoは借り物だったのでハンダ付けはせず、書き込み時にジャンパ線を接触させ続けることで対応しました。
![JP2](https://qiita-image-store.s3.amazonaws.com/0/171520/49332947-6750-7333-00c5-31e318434876.png)

- **JapaninoのICSP端子を使ってArduinoと接続する場合は**2.54mmピッチのピンヘッダをハンダ付けする
ICSP端子を**使わないで**接続する場合はピンアサインを参考に接続してください。

#手順
1. Arduino UNOのATmega328Pを取り外す（任意）
取り外さなくても成功するらしいが念のため。
取り外さなかった場合に間違えて上書きしちゃったら[ここ](http://qiita.com/isop/items/7b1a63ea81664fd5beec)や[ここ](http://www.dorapro.co.jp/engineerblog/?p=760)を参考に書き込み直す。
**とても取り外しにくい**のでマイコンもソケットも傷つけないように。取り外したら安全な場所に保管しておく。<br><br>

1. ATmega16U2にファームウェアを書き込んでAVRISP mkII化させる
    1. 図のようにATmega16U2のICSPの5番ピン6番ピンをショートした状態でUSBコネクタを挿しパソコンと接続します。  
    ![DFUモードで起動させる](https://qiita-image-store.s3.amazonaws.com/0/171520/a1a6fe48-b5dc-b4b2-fcb0-071aea47d673.jpeg)
    1. ピンのショートを解除するとATmega16U2がDFUモードで起動します。
    1. USBデバイス「Atmel Corp IOUSBHostDevice」(または，ATmega16U2 DFU)が現れます。  
    デバイスドライバが要求される場合はC:\Program Files\Atmel\Flip 3.4.7\usb\を指定してドライバをインストールします。
    1. Flipツールを起動して、AVRISP mkII クローンファームウェアを書込みます。
        1. ATmega16U2を選択します。
        1. USB接続でオープンします。
        1. AVRISP-MKII_Atmega16u2.hexをロードします。
        1. Runボタンをクリックして書き込みます。
        1. （Flipツールを終了し）USBコネクタを抜きパソコンと切り離します。
        1. 再度USBコネクタを接続するとUSBデバイスAVRISP mkIIが出現します。  
        1. デバイスマネージャで出現したAVRISP mkIIがJungo（又はJungo Connectivity）の下に表示されていて正常に認識されていることを確認します。  
        ![デバイスマネージャに出現したAVRISP mkII](https://qiita-image-store.s3.amazonaws.com/0/171520/00ae749a-7f55-3c49-fd10-fe415ac36911.jpeg)
        1. エラーになっている場合は、右クリックして「ドライバーソフトウェアの更新」をクリックし「ドライバーソフトウェアの最新版を自動検索します」をクリックすることでドライバがインストールされます。  
        <div align="center">
        ![ドライバエラー](http://www.nina.jp/server/arduino/optiboot/bootloader01.png)  
        `エラーになっている`<br><br>
        ![ドライバの更新画面](http://www.nina.jp/server/arduino/optiboot/bootloader02.png)  
        `ドライバをインストールする`
        </div>  

1. AVRISP mkII化したArduino UNOとJapaninoを下図のようにISPモードで接続します。
![ISPモードで接続する場合のArduino UNO側のピンアサイン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171520/eecdd921-f887-ee49-3499-0d71d47c8e91.png)
`TXとの配線のみ不要です`  
![AVRISP mkIIのピンアサイン](https://ehbtj.com/wp/wp-content/uploads/2014/02/AVRISP-mkII-PinMapping.jpg)<br>
![japaninoのICSP端子との接続](http://www.nina.jp/server/arduino/optiboot/bootloader04.png)<br><br>

1. Atmel Studioを起動して、Japaninoにブートローダを書き込みます。

    1. Tools ＞ Device Programingをクリックします。
    1. Toolは「AVRISP mkII」、Deviceは「ATmega168」、Interfaceは「ISP」を選択して、「Apply」ボタンをクリックします。
    1. [Japanino特設サイト](http://otonanokagaku.net/japanino/)からダウンロードしたIDE（多分このページを見ている方は既にダウンロード済みでしょう）に付属のブートローダを使います。  
    左メニューの「Memories」をクリックし、「Flash」で書き込むブートローダを選択します。  
    場所は「arduino-0018\hardware\arduino\bootloaders\lilypad\LilyPadBOOT_168.hex」です。  
    ブートローダを選択したら、「Program」ボタンでJapaninoに書き込みます。
    1. FUSEビットを設定するために左メニューの「Fuses」をクリックします。  
    **EXTENDEDに「0x00」**、**HIGHに「0xDD」**、**LOWに「0xE6」**を入力して「Program」ボタンをクリックします。  
    これで水晶発振子を使用する[^4]設定になります。
    1. LOCKビットを設定するために左メニューの「Lock bits」をクリックします。  
    LOCKBITに「0x0F」を入力して、「Program」ボタンをクリックします。

これでJapaninoへのブートローダの書き込みは終了です。

#おまけ
- Japanino特設サイトからダウンロード出来るIDEは発売時から更新されていないし、残念ながら今後も更新されそうにありません。  
でも「[知らないとソン!? Arduinoの小ネタ色々](http://100year.cocolog-nifty.com/blog/2014/07/arduino-544e.html)」によると…

    >実は最新Arduino IDEでも「ツール」→「マイコンボード」→「**Arduino Pro or Pro Mini (3.3V, 8MHz) w/ ATmega168**」もしくは「**Liliypad Arduino w/ ATmega168**」を選べば使えます。
　専用IDEと同様に「マイコンボード」のリストに「Japanino」を表示させて選択出来る様にしたい方は、[Japanino_サポートファイル「japanino_.zip」](http://100year.cocolog-nifty.com/blog/files/japanino_.zip)をダウンロードして解凍し、スケッチフォルダに「**hardware**」フォルダを作って、その中に解凍した「**Japanino**」フォルダを置いて下さい。
　USBシリアル変換チップのドライバもメーカーサイトから最新版をダウンロードした方が良い様です。[CP210x USB - UART ブリッジ VCP ドライバ](https://jp.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)

    ※実際に上記設定で書き込み出来ました

- AVRISP mkIIのドライバには、Atmel Studioで使えるドライバとArduino IDE（avrdude）で使えるドライバがあって、それぞれのドライバはもう一方では使えません。
でも、[windows10でAVRISP MKIIを使う方法](http://qiita.com/yoshihiroo/items/70357cfc3a266f1970be)で説明されているフィルタドライバを使うことで、両方のドライバが共存できます。

以上、お役に立てば幸いです。
ご意見、ご感想などありましたらコメントをしていただけるとありがたいです。

[^1]: 筆者はGoogle先生に導かれてQiitaの投稿を見たことは数え切れないほどあるが、投稿するのは今回が初めてである。まぁ誰にでも初めてはあるさ。君の初めては僕が貰っ（殴
[^2]: ファイル及び画像の著作権は[参照元サイト](https://make.kosakalab.com/web-archives/quotation/)に帰属します。&copy; Kimio Kosaka 2017
[^3]: 書き込む対象がJapaninoの場合はISPモードでの書き込みなのでRESETに必要な1箇所しか接続しない。ピンをハンダ付けする場合は安定性のために２本以上のセットを付けたほうが良いです。
[^4]: 「[**Japaninoの忘れ物2：外部発振モードにしてJapaninoをフルに使いこなそう！**](http://d.hatena.ne.jp/OkibiWorksLabo/20100612)」にも書いてありますが、Japaninoには水晶発振子が付いているにも関わらず、なんとデフォルトで**使い物にならないほど誤差が大きい**内部発振設定になっているのです！
      ちなみに、内部CR発振を使いたい場合は**LOWを「0xE2」**に変えるだけです。