Top > blog > 2012-05-29 > Arduinoのブートローダーをコンパイル

広告

Arduinoのブートローダーをコンパイル

久しぶりにArduino互換ボードを作り、ブートローダーを書き込んでArduino IDEからプログラムを書き込もうとしたら

avrdude: stk500_recv(): programmer is not responding

というエラーが出て書き込めない。
回路や半田など考えられるミスを探してみたがわからなかった。

ためしに以前作ったボード(動いていたボード)で試したが、今度は

avrdude: stk500_getsync( ): not in sync: resp=xxxx

というエラーが出てやはり書き込めない。

その以前作ったボードに再度ブートローダーを書き込んだら

avrdude: stk500_recv(): programmer is not responding

と新しいボードと同じエラーがでた。この辺でどうもハードの問題っぽくないかもと考えた。

もしかするとArduinoのバージョンが変わったためにうまくいかないのかと思い、再度ブートローダーをコンパイルした。ブートローダーのコンパイルに関しては、ここにまとめている

ところが新しくコンパイルしたブートローダーを書き込もうとするとエラーが出て書き込めない。
以前の同じブートローダーと比べてみるとサイズが2倍近くあった。

以前はちゃんとコンパイルできて、ちゃんと書き込めたのに今はできなくなっている。
ソースは変わっていないので、何かおかしい。

結局ブートローダーのコンパイルに関してはHow to: Compiling the Arduino Bootloaderに書いてある通り、ATmegaBOOT_168.cの584行目付近を

#if defined(EEPE)
               while(bit_is_set(EECR,EEPE));           //Wait for previous EEPROM writes to complete
#else
               while(bit_is_set(EECR,EEWE));           //Wait for previous EEPROM writes to complete
#endif

/*
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__)
               while(bit_is_set(EECR,EEPE));           //Wait for previous EEPROM writes to complete
#else
               while(bit_is_set(EECR,EEWE));           //Wait for previous EEPROM writes to complete
#endif
*/

と変える。これは「error: ‘EEWE’ undeclared」というエラーを出さないようにするため

そしてMakefileの52行目付近で

OPTIMIZE   = -Os
# OPTIMIZE   = -O2

と変える。これは上述したコンパイル後のhexファイルが以前のものの2倍近くになっているという問題を解決してくれる。

で、このようにコンパイルしたブートローダーを書き込むとうまく行く。

しかし、相変わらず

avrdude: stk500_recv(): programmer is not responding

というエラーが出てArduino IDEからプログラムを書き込むことができない

以前うまく行ったときとの違いはArduinoのバージョンとかavrdude関連だと思う

continue on: [Arduinoの問題]
Category: [Arduino][トラブル] - 01:33:00


広告

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Tue, 29 May 2012 01:38:25 JST (4322d)