3Dプリンタ(5) GEN6にMarlin 1.1.0-RC7を書き込む
- カテゴリ: 3Dプリンタ
- 投稿日時: 2016/08/15(月) 11:46:15
前回のエントリに間違いがありましたのでその訂正から。
ファームウェアのバックアップを取るつもりがコマンドを間違えてブートローダともどもきれいさっぱり消えてしまったと書きましたが、 3DStuffmaker の GEN6、どうやらブートローダは元々書いてないようです。
ブートローダは必須だと思い込んでおりました。そんなことはないのですね。USB接続したPCでファームウェアを書き換えるのであればブートローダがないとどうにもならないわけですが、この製品は意図的にそうしていないので、そもそもブートローダがないようなのですわ。
さて、新しいファームウェアはオリジナルと同様、 Marlin を採用することにしました。githubで公開されています。
Marlin 3D Printer Firmware
https://github.com/MarlinFirmware/Marlin
現在の安定版は 1.0.2-1 ですが、最新のRC版を入れましょう。
Marlin 1.1.0-RC7をGen6に書き込むためにはいくつかのハードルがありました。
まず、Marlin 1.1.0-RC7はArduinoIDE1.5以前に対応していません。コンパイルするためには必然的に1.6を使わないとなりません。
一方、Gen6はArduino1.6のボードリストに出てきません。Gen6に搭載されているAVRマイコンはATmega644Pで、ArduinoではなくSanguinoと呼ばれるものです。余談ですが米国Pololu製モータードライバがビルドインされたものをSanguinololuというようですね。
さて、Arduinoの統合開発環境であるArduinoIDEの現在のバージョンは1.6.9です。Sanguinoを扱えるようにするためにはこちらの情報が役に立ちました。
Dust's RepRap
better way to install Sanguino in Arduino 1.6.4
ホントもう書いてあるとおりです。
ファイル > 環境設定
下の方にある「追加のボードマネージャのURL」に
https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json
と入力しOK
ツール > ボード > ボードマネージャ
下の方にある「Sanguino by Kristian Sloth Lauszus」を選択してインストール
これで完了です。
書き込みできない…
ボードマネージャーから sanguino を選択しインストールすると、ファイルの実体はとてもわかりにくいところにインストールされています。
C:\Users\YOU\AppData\Local\Arduino15\packages\Sanguino
あ、もちろんYOUってのはあなたのアカウントですよ。日本語のアカウントでは多分だめでしょうね。
で、ブートローダーのバイナリは、ファイルサイズの小さい optiboot_atmega644p.hex ってのを使います。
前回の記事のとおり書き込み装置に avrispmkII を選択してやればすんなりと書き込みできます。
なおロックビットとヒューズバイトは
low_fuses=0xFF
high_fuses=0xDE
extended_fuses=0xFD
unlock_bits=0x3F
lock_bits=0x0F
としました。これは
C:\Users\YOU\AppData\Local\Arduino15\packages\Sanguino\hardware\avr\1.0.0
の boards.txt にそう書いてあったため。JTAG Interface を有効にすると必要な入出力を別の機能に割り振られてしまうためうまく動かなくなるらしいので注意。
ロックビットとヒューズバイトを簡単に計算してくれる サイト もあります。自分がなにをしようとしているか検証するにはよいかも。
ちなみにAVRマイコンの日本語解説サイトでありがちなので笑っちゃうんですが、Fuse のことをフューズって表記するの、違和感ありません? 日本語ならヒューズでしょ。
さて、ブートローダーも無事書き込みできたので、外付けISPは取り外してGen6のUSBポートとPCをつないで、ArduinoIDEから直接ファームウェアの書き込みができるはず。
…ですが。
だめですね。つながりません。
こんな感じのエラーメッセージを吐いております。
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x94
とか
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x03
とか。
ヒューズバイトが間違ってるとか、そんなとこなんだろーなとは思うのだけど、いやもう面倒くさいだけなんで、コンパイルはArduinoIDE1.6.9で、書き込みは古いavrdude 5.xで行うことにします。
Avrdude 5.x
Avrdude 5.11 はArduino1.0.2に付属していますが、旧バージョンのAvrdudeのためだけにArduino1.0.2をインストールするのは面白くないです。よって単体で探しました。
本家はここですが、実行可能なバイナリは見つかりません。もちろんソースファイルは置いてあるので自分でコンパイルすればよいのですが、さすがにコンパイラは持ってません。
で、Avrdude 5.6の実行ファイルがこちらにあったので利用させていただくことにします。
avrdude-GUI (yuki-lab.jp Version)
http://yuki-lab.jp/hw/avrdude-GUI/
中ほどにある「ダウンロード」から下記をダウンロード。
avrdude.exe Version 5.6 binary (with USBasp software control of ISP speed patch)
インストーラーはないので、解凍して適当なフォルダに展開します。
意外に思われるかもしれませんが、何でもかんでも Program Filesフォルダへ入れるのが好きなので
C:\Program Files\avrdude-5.6
へ入れましたよ。
ArduinoIDEの設定
スケッチ > 検証・コンパイルでhexファイルをつくるところまではArduinoIDEでやります。初期設定だとhexファイルはすぐに消されてしまうので、消えないようにします。
参考にしたのはこちら。
滴了庵日録
ArduinoのHEXファイルを残す方法
preference.txt の末尾に一行追加して作業用フォルダを指定すると。
build.path=c:\work\Arduino
書き込み用バッチファイル
Avrdude5.6でhexファイルを書き込むのにいちいち面倒なのでバッチファイルをつくりました。
cd c:\work\Arduino
"C:\Program Files\avrdude-5.6\avrdude"
-C "C:\Program Files\avrdude-5.6\avrdude.conf"
-c avrispmkII -p m644p -P usb -B 8 -u -e
-U flash:w:Marlin.ino.hex -v -v -v
これでやっと自在にファームウェア書き込みができる環境が整いました。長かったなぁ。
もっと良いやり方があると思いますが、これが目的ではないので深追いするのはやめます。
コメント
この記事へのコメントはありません