La FoneraのGPIOでAVRに書き込む
La Foneraは安価なWiFiルータですが、自分でプログラムを作って動かすことのできる、小さな無線デバイスでもあります。
シリアルポートや5本の未使用GPIOがあり、情報はネットに出回っていますから、何かハードウェアを接続して値を取ったり制御したりもできます。
そこにAVRなどのマイクロコントローラをつなげれば、ADコンバータやPWM、多くのIOポートなど、さらに用途を広げることもできます。
AVRから見ると、Foneraはシリアルインターフェース付きの安価なWiFiカードとも言えます。
さて、FoneraとAVRを接続するなら、AVRへのファームウェアの書き込み(プログラミング)も、Foneraからできないでしょうか?
AVRのプログラミングは、シリアル方式(ISP)を使えば4本のIO (SCK,MISO,MOSI,RESET) だけでできます。FoneraのGPIOは5本ありますから十分です。(さらにSSピンを接続すれば、実行時にハードウェアSPIで通信することもできます)
AVRのデータシートを読むと、ISPプログラミングの手順は、さほど難しくないことがわかります。
というわけで、Foneraで動くAVRライタ fonasp を作成しました。
このようなコマンドラインでPCから書き込みできます。
ssh root@fonera /jffs/fonasp - < firmware.bin
(このFoneraはDD-WRTに入れ替えSSHとJFFSを有効にしてあります)
このプログラムではカーネルモードのドライバを使わず、ユーザスペースから直接ハードウェアのレジスタを読み書きすることで、高速にbit-bangingを行っています。
詳細およびダウンロードはこのページからどうぞ。
GPIOにぶら下がっているコンデンサは除去します。 | |
シリアルポートヘッダの未使用ピンにGPIOを接続して、AVRボードと接続しやすくしました。 |