Arduinoで大嵌り、と言うかAVR ISP markⅡなんだけれど [ATmarquino Arduino]
今日はデジカメを持って行かれてしまったので、携帯のカメラですまん。
いや、嵌った、はまった。丸々二日間は嵌った。
オリジナルのボード(以降ATmarquino)を組んで、AVR StudioとWinAVR、それにArduino IDEの最新版をダウンロードして、いざブートローダーをAVR ISP markⅡで書き込み。Arduino IDEからブリンクをアップロード、、、エラーで返って来てしまいます、、、なぜだ!。
回路を確認しても問題無いし、パターンを確認しても問題無いし。
ヒューズビットの設定が間違っているのかと思い、マニュアルを読み直し、AVR本も読み直してみたり、でも何をやってもIDEからのアップロードに失敗します。
普通にAVR STUDIOからC言語で組んだプログラムをAVR ISPで書き込む分にはちゃんと動いているし、UARTのエコーバックプログラムもちゃんと動くのでCPUクロックの設定も問題無い。
なぜだー???。
しょうがないので一番上の写真の様にブレッドボードに最低限の回路を組んで、ブートローダーはIDEに同梱されている物を使ってやってみましたが、これも同じ状況です。
「そう言えばブートローダーを書き込むと何処かのLEDがチカチカするんだよな」と言う訳でLEDをPB5に接続、、、ISP中は点滅するけれど、それ以降は無し。
「ArduinoのIDEとはUART経由で通信するのだから、TXピンは通常VCC近い電圧が出ている筈だよな」と言う訳でここにもLEDを接続、、、消灯しっ放し。
駄目だこれは、ブートローダー自体が動いていないじゃん。
AVR ISPでフラッシュROMの内容を読み出してみると、見事に全部FFで埋まっていますOTL。
何故書けない?。
Arduino IDEに付属しているブートローダーのHEXファイルは以下の様に始まります。
つまりアドレスで3800(16進)番地からデータを書き始めます。別にHEXファイルとしては問題ない様に思えます。
AVR STUDIOで普通にアプリケーションを作成した場合は0番地から開始されます。例えば以下の様にね。
つまり動く、動かないの違いはHEXファイルに書かれている番地が何処からスタートするのか?に依存している?。
そこで先程読み出した、全部FFで埋まっているHEXファイルと、Arduino IDEに付属している標準のHEXファイルを合体させてみました。以下の様にですね。
で、これをAVR ISPで書き込んで、もう一度読み直してみると、無事3800(16進)以降にもコードらしき物が残っています。
勿論ブートローダーを書き込んだ直後にPB5に接続したLEDも点滅を開始しています。
Arduino IDEからブリンクをアップロードすると、これもLEDが点滅、、、ってブートローダーの時と区別が付かないので、周期を早くしてアップロードが成功している事も確認できましt。
よかった!、これでArduinoへの第一歩が踏み出せました。
ちなみに20MHzのセラロックを使った時のヒューズビットのメモ(makefileに書いた物を抜粋)
※しかしArduinoって評判と違って随分難しいのですね。丸々二日もはまるとは。
オリジナルのボード(以降ATmarquino)を組んで、AVR StudioとWinAVR、それにArduino IDEの最新版をダウンロードして、いざブートローダーをAVR ISP markⅡで書き込み。Arduino IDEからブリンクをアップロード、、、エラーで返って来てしまいます、、、なぜだ!。
回路を確認しても問題無いし、パターンを確認しても問題無いし。
ヒューズビットの設定が間違っているのかと思い、マニュアルを読み直し、AVR本も読み直してみたり、でも何をやってもIDEからのアップロードに失敗します。
普通にAVR STUDIOからC言語で組んだプログラムをAVR ISPで書き込む分にはちゃんと動いているし、UARTのエコーバックプログラムもちゃんと動くのでCPUクロックの設定も問題無い。
なぜだー???。
しょうがないので一番上の写真の様にブレッドボードに最低限の回路を組んで、ブートローダーはIDEに同梱されている物を使ってやってみましたが、これも同じ状況です。
「そう言えばブートローダーを書き込むと何処かのLEDがチカチカするんだよな」と言う訳でLEDをPB5に接続、、、ISP中は点滅するけれど、それ以降は無し。
「ArduinoのIDEとはUART経由で通信するのだから、TXピンは通常VCC近い電圧が出ている筈だよな」と言う訳でここにもLEDを接続、、、消灯しっ放し。
駄目だこれは、ブートローダー自体が動いていないじゃん。
AVR ISPでフラッシュROMの内容を読み出してみると、見事に全部FFで埋まっていますOTL。
何故書けない?。
Arduino IDEに付属しているブートローダーのHEXファイルは以下の様に始まります。
:103800000C94341C0C94511C0C94511C0C94511CA1 :103810000C94511C0C94511C0C94511C0C94511C74 :103820000C94511C0C94511C0C94511C0C94511C64
つまりアドレスで3800(16進)番地からデータを書き始めます。別にHEXファイルとしては問題ない様に思えます。
AVR STUDIOで普通にアプリケーションを作成した場合は0番地から開始されます。例えば以下の様にね。
:100000000C9434000C9451000C9451000C94510049 :100010000C9451000C9451000C9451000C9451001C :100020000C9451000C9451000C9451000C9451000C
つまり動く、動かないの違いはHEXファイルに書かれている番地が何処からスタートするのか?に依存している?。
そこで先程読み出した、全部FFで埋まっているHEXファイルと、Arduino IDEに付属している標準のHEXファイルを合体させてみました。以下の様にですね。
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 :10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 :10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 飛んで3800(16進)近辺 :1037F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 :103800000C94341C0C94511C0C94511C0C94511CA1 :103810000C94511C0C94511C0C94511C0C94511C74
で、これをAVR ISPで書き込んで、もう一度読み直してみると、無事3800(16進)以降にもコードらしき物が残っています。
勿論ブートローダーを書き込んだ直後にPB5に接続したLEDも点滅を開始しています。
Arduino IDEからブリンクをアップロードすると、これもLEDが点滅、、、ってブートローダーの時と区別が付かないので、周期を早くしてアップロードが成功している事も確認できましt。
よかった!、これでArduinoへの第一歩が踏み出せました。
ちなみに20MHzのセラロックを使った時のヒューズビットのメモ(makefileに書いた物を抜粋)
atmarquino: TARGET = atmarquino atmarquino: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' atmarquino: AVR_FREQ = 20000000L atmarquino: $(PROGRAM)_atmarquino.hex atmarquino_isp: atmarquino atmarquino_isp: TARGET = atmarquino atmarquino_isp: HFUSE = DF atmarquino_isp: LFUSE = D6 atmarquino_isp: EFUSE = F8 atmarquino_isp: isp
※しかしArduinoって評判と違って随分難しいのですね。丸々二日もはまるとは。
AVRマイコン・リファレンス・ブック―AVRのCPUアーキテクチャ、豊富な内蔵周辺機能を詳細解説 (マイコン活用シリーズ)
- 作者: 山根 彰
- 出版社/メーカー: CQ出版
- 発売日: 2006/03
- メディア: 単行本
Making Things Talk -Arduinoで作る「会話」するモノたち
- 作者: Tom Igoe
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/11/17
- メディア: 大型本
2009-03-08 15:40
nice!(0)
コメント(5)
トラックバック(0)
こんにちは。たしか、オリジナルのブートローダは16MHz用にコンパイルされていたと思います。もしかすると、20MHzだとうまくいかない部分があるのかもしれません。
by Sim (2009-03-08 22:50)
ええ勿論、ATmarquino用に20MHzバージョンのブートローダーも作って試しています。
lilypad用の8MHz版とかも試しています。
と言いますか、ブートローダーの書き込みには周波数はあまり関係無いのですけれどね。
by hamayan (2009-03-08 22:59)
すみません。寝ぼけてました。なんか、とんちんかんなこと書いちゃいました><
無事、動作されたようで、おめでとうございます。
by Sim (2009-03-09 00:05)
私も同じ問題に突き当たりました。
私の場合、原因は AVR Studio のバグでした。Version 4.16 ではブートローダを書けないようです。4.16 SP1 で直っています。
すでに解決済みかもしれませんが。
by Chuck (2009-08-23 20:35)
AVR Studioの問題でしたか。
情報有難うございます。
早速バージョンアップしてみます。
by hamayan (2009-08-24 08:55)