SSブログ

Arduinoで大嵌り、と言うかAVR ISP markⅡなんだけれど [ATmarquino Arduino]

今日はデジカメを持って行かれてしまったので、携帯のカメラですまん。
K3300018.JPG
K3300019.JPG
いや、嵌った、はまった。丸々二日間は嵌った。
オリジナルのボード(以降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って評判と違って随分難しいのですね。丸々二日もはまるとは。





Making Things Talk -Arduinoで作る「会話」するモノたち

Making Things Talk -Arduinoで作る「会話」するモノたち

  • 作者: Tom Igoe
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/11/17
  • メディア: 大型本



nice!(0)  コメント(5)  トラックバック(0) 

nice! 0

コメント 5

Sim

こんにちは。たしか、オリジナルのブートローダは16MHz用にコンパイルされていたと思います。もしかすると、20MHzだとうまくいかない部分があるのかもしれません。

by Sim (2009-03-08 22:50) 

hamayan

ええ勿論、ATmarquino用に20MHzバージョンのブートローダーも作って試しています。
lilypad用の8MHz版とかも試しています。

と言いますか、ブートローダーの書き込みには周波数はあまり関係無いのですけれどね。

by hamayan (2009-03-08 22:59) 

Sim

すみません。寝ぼけてました。なんか、とんちんかんなこと書いちゃいました><

無事、動作されたようで、おめでとうございます。

by Sim (2009-03-09 00:05) 

Chuck

私も同じ問題に突き当たりました。
私の場合、原因は AVR Studio のバグでした。Version 4.16 ではブートローダを書けないようです。4.16 SP1 で直っています。
すでに解決済みかもしれませんが。

by Chuck (2009-08-23 20:35) 

hamayan

AVR Studioの問題でしたか。
情報有難うございます。
早速バージョンアップしてみます。

by hamayan (2009-08-24 08:55) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。