Arduinoのwireless書き込みを思案中
新しく作るつもりの音用デバイスのために、Arduinoをワイヤレスで書き込めた方がいいよなぁということで、
Arduinoをxbee経由でワイヤレスにプログラム(Rob Faludiさんのページ)をみてなんでワイヤレスで書き込みができるのかちょっと調べてたのですが。
1割くらいわかた。
多分ですけど、Arduinoに書き込まれているブートローダのおかげによるところが大きい!!
流れとしては、
PC側のArduinoIDEで書き込みボタンを押すとソフトウェア的にブートモードに突入してくれて、一定のwaitタイム中(Faludiさんのサンプルの場合は5秒になってる)に新しいプログラムを書き込んであげれば、あとはこのサンプルにある通りトランジスタピンがおりてリセットがかかる。それによってブートモードから脱出して通常モード(プログラム開始位置からスタート)にかわる(というものだと思う)。
Faludiさんの回路でトランジスタでリセットの部分が追加されているのは、無線化したから。
無線でなければ、多分USB経由で物理的にリセットかけられてたんだと思う。けど、無線だから物理的にはリセット不可能なのね。
はじめはこの
int transistorPin = 12; ←(ATMega168のpb4)
ってブート突入モードのピンだと思ってたのですが、このサンプルをみる限りリセットでしかあり得なくて、
じっさいブートローダのソース(ATmegaBOOT_168.c)をみてみてもpd6ってなってるから、違う。
という推論。
あってるかどうかは、実際実験してみてからかな。
とにかくこれがあってれば、(ワイヤレス化した)Arduino Diecimilaボードを少し改良したらいけそうな気がするので、わくわくです。
とりあえずは、3v3(電源)の振れ幅で統一しないといけないだろうからまずはFaludiさんの記事通りにやってみます。
ではでは!!
P.S. Olimex のSTM32f103-STK評価ボードへのブートローダ(DFU)の移植めどがたってきた!!
追記@2008 09 11
Rob Faludiさんのページのローカル側のArduinoのリセットピンはnResetである(常識?)
コメントを投稿