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

(このFoneraDD-WRTに入れ替えSSHとJFFSを有効にしてあります)

このプログラムではカーネルモードのドライバを使わず、ユーザスペースから直接ハードウェアのレジスタを読み書きすることで、高速にbit-bangingを行っています。

詳細およびダウンロードはこのページからどうぞ。

GPIOにぶら下がっているコンデンサは除去します。
シリアルポートヘッダの未使用ピンにGPIOを接続して、AVRボードと接続しやすくしました。