« イーサネットのENC28J60 | トップページ | EEPROM 93C46の怪 »

2008年8月27日 (水)

Mega168インターネット開通

NIC基板の実装進む(3/11/08)
 休みをはさんで4日連続の研修講師を何とか終了し(いや、喉が涸れた)、晴れて電子工作に専念できる体になった。アートワークは、研修資料の準備の合間をぬってとうにすませてある。USB-SPIブリッジよりはるかに複雑なパターンになっているが、少しづつ半田付けが進んでいる。このチップは電源ピンが各ブロックごとに独立しており、そのグランドと電源の間単位にパスコンをつけなければならないので結構大変である。Nic_artwork

配線図に0.1μFが5ヶ並んでいるのがそれなのだが、最初、5つまとめて0.5μを買ってくるというお馬鹿なことをやった。やっとのことで搭載すべき部品はすべて半田付けが終わった。あとは信号線を引き回す工程が残るだけである。基板の穴を殆ど使い尽くし、パスコンが10個近く点在するさまは壮観である。

 嬉しくなって、家族に見せて回る。勿論、馬鹿にされる。しかし美しい。昔飛行機のソリッドモデルを木から削りだし、綺麗に塗装した模型を何度も何度も取り出しては悦に入っていたことを思い出す。それにしても安上がりな趣味だ。部品代で¥1100するかしないかである。鈴商で入手したチップビーズもきれいに基板上に乗っている。

 ソフトの方も、薄紙をはがすようにわかってきた。MACアドレスをどうするかが課題だが、内部で使う限り、あまり心配することはなさそうだ。そろそろテスト手順を具体的にする時期かもしれない。

NIC基板動く!(3/13/08)
 狭い道の離合で後ろも見ずにバックしてきた車に逆オカマを掘られ、気持ちはブルーなのだが、電子工作は絶好調である。このところ熱中してきたNIC基板のすべての配線が終わり、いよいよ動作テストの段階に来た。きのう、電源を逆にさして危うくこのあいだの二の舞になるところだったが、今度は慎重に確認し、ENC28J60をソケットに挿して通電する。

 やった!ハブのインディケータに10Base/Tのノードが接続されたことを示す橙色のLEDが点る。基板側のLEDは時々緑のアクセスLEDが点滅してパケットを拾っていることを示す。配線の間違いはなさそうだ。今度もパーフェクト。少なくとも、NICチップのENC28J60のEtherNetまわり(PHY層)は完全に動いている。Enc26j80

 いや、良くここまできた。配線技術は格段に進歩した。アートワークを完全にやっているのが誤配線をしないで済んでいる原因だろう。一段落して、これまで作ったシリアルISPアダプタから、温度ロガー、LCDドライバ、USB-SPIブリッジをテーブルの上に並べてみる。実装密度は最近のものほど高く、今度のNIC基板は自分でも惚れ惚れするほど精密な出来だ。

全部を並べると、最初に作ったISPアダプタの配線の稚拙なことA3141204_trimaが良く分かる。このときは0.16ミリのUEW線だからコンパクトにいくらでも作れるのに、DSUBピン あたりは配線の引き回しが下手で空中配線になってしまっている。いい加減な配置をした結果である。

 さて、ここからはソフトの世界に入り、次はMegaまわりのTCP/IPスタックの開発である。オプティマイズのページでは、Mega168ではほとんどアプリが乗らないということだったが、HTTPプロトコルを使ってフラッシュサイズがMega168の半分しかないMega88で、HTMLベースのコントローラがちゃんと動いている例が、少なくともウェブに2つ(日本とドイツ)掲載されている。

ドイツ(http://tuxgraphics.org/electronics/200611/article06111.shtml)
日本(http://www.kannet.ne.jp/tomaru/kenkyuushithu/hardware/webac/webac.htm)

 どうも3つともオリジナルはSCU(サンタクララ大学)の人の書いたこのNICチップのドライバーソース(http://hubbard.engr.scu.edu/embedded/avr/avrlib/docs/html/)をモディファイしているようで、上位のTCPスタックを絞りこんで小さくしているようだ。 しかし、どこかのソースを落としてきて、コンパイルしました。入れました。動きました、では、どうも面白くない。といってスクラッチからNICチップのドライバを書いていくパワーもないし、あまり意味もない。

 とりあえず、NICチップのドライバレベルは皆さんと同じように利用させてもらって、上位レベルを自作してみようと思う。UARTを使って色々なコマンドを送り反応を見たいのだが、どのレベルで切り分けるのが面白いのかまだわからない。もう少し調べる必要がある。

HTTPサーバーが動いた!(3/17/08)
 完成したNIC基板がPHY層(電気物理層)まで動いていることは、確認された。次はファームウエアのソースである。インターネットを通じて電気機器を制御するシステムの回路図の中では、ドイツのWebのものが、一番簡単そうなので、ソフトウエアもこれをベースにすることにする。サイトからソースをダウンロードし、試しにAVRstudioに入れてコンパイルしてみたら、これがあっさり通ってしまったのである。

 こういう海外のソースは、コンパイルしてみるとコンパイラ環境の違いで色々エラーが出るものである。まあ、エラーをなくそうと手を入れている間にソースの中身も理解できるというメリットもあるが、コンパイルが通っても動かないというケースが多い。

 本当はNICのSPIインタフェースのドライバーから作るのが筋だけれど、全体のコンパイルが余りにも簡単に通ったので、ホスト(Mega168)との接続も彼の回路と同じにして動かしてみたい欲望にかられ、止めることが出来なくなった。

 もっとも回路図は少し変更した。オリジナルはすべて3.3Vベースだが、ホストを5Vにして、Mega168のクロックを20Mhzにした。これは、オプティマイズの言うSPIインタフェースを8~10Mhzの範囲で動かせ(マイクロチップ社のERRATA情報による)という指示で、SPIのクロックをこの範囲で動かすにはMega168では5Vにして2倍の16MHz以上のクロックが必要だからである。この時点では、日本のオプティマイズの方を信用していた。ENC28J60は5Vトレラントなのでとりあえず直結しても大丈夫なはずだ。

 NIC基板の配線に比べればホストとの接続は気が抜けるほど簡単でブレッドボード上にすぐ完成した。ファームウエアはデバッグ用にUARTを組み込んでもフラッシュサイズは4 キロバイトあるかないかである。勢い込んでLANケーブル、デバッグ用にUSBシリアル変換モジュールで標準UARTをつないで電源をいれてみる。ISP-UARTが一番簡単だが、SPIインタフェースはこのISPを使うのでデバグには使えない。

 しかし、最初は動かなかった。UARTを入れてメッセージを出させると、初期化は出来ているものの全くパケットを拾っていない。たまに受け取るが、自分宛ではないので無視している。pingをPCコンソールから打つと、一瞬LEDがつくので下位レベルは動いているようだが、本当にNIC(ENC28J60)がまともに動作しているかは確認することが出来ない。SPIドライバも作っていないので、何から手をつけて良いのか見当がつかない。この日も夜中の2時をすぎたので作業をやめる。

 次の日、事務所に出て、仕事を早々に片付け、pingの仕組みをあらためて勉強した。NICとMegaとのやりとりがあれば、MegaはIPアドレスをNICを通してPCに返しているはずである。つまりARPが動いているかどうか調べる必要がある。調べてみたらUNIXだけでなく、WinXPにもARPコマンドがあって、PCのARPテーブルが出ることがわかった。帰宅して早速テストすることにする。

 pingは全く受け付けていないことがわかった。では何故、LEDが点いたのか、わからない。ネットワーク関係の調査はこれくらいにして、基本的なことから始めることにする。ソースのENC28J60のバージョンコードを出力させる関数が見つかったので、それを動かしてみる。00が表示され、ENC28J60はやはり動いていないようだ。

 やれやれ、始めからやり直しか。待てよ。3VならNIC基板で作っている。NICのコマンドのドライバーを作り始める前に、ドイツのWebの回路図のとおり動かしてみて動かなかったらソフトの準備をしよう。ブレッドボードをいじって回路図のとおり、MegaのVccをNIC基板の3.3Vから供給するようにし、クリスタルを取り外し、クロックピンにNICのクロックラインを接続する。少し配線変更が必要だったが、ものの1時間もかからない。これでMega168は25Mhzの半分のクロック12.5Mhzで動き、SPIはまたその半分で動くはずだ。

 MicroChip社のエラータのturn around(回避法)のところに「SPIを8~10MHz以外で動かすときは、ENC28J60のクロックと同期させること」という説明を事務所で読み、急にこのドイツの回路に信憑性があるように感じたのも、この回路図にこだわった理由でもある。

 はやる気持ちを押さえてスタートさせる。PCのデバッグ画面にバージョンコードが04と表示される。うむ、前とは違う。うまく動いている予感がする。急いでブラウザーを立ち上げ、NICのIPアドレスを打ち込む。Lan

 動いた!Webの情報の通りの画面(といっても文字だけだが)が出た。クリッカブルになっているSWITCHの文字の上をマウスでクリックする。見事、テスト用のLEDが点灯した。遂にGataro研の組み込みコンピューターがインターネットと会話した瞬間である。UARTにも自分宛のパケットを受けとったというメッセージが並ぶ。早速ソースをいじって画面のクレジットの表示を換えてみる。ちゃんと換わる。当たり前のことだけど無性に嬉しい。妻に報告するが当然のこと予想通り何の反応もなし。娘だけが少し喜んでくれた。「で、これでプリンタの電源入るのね」と画面のスイッチを押しそうになって、あわてて事情を説明する。

 動いてしまったので、ちょっと予定が変わったが、メモリサイズがまだ、1/4のわずか4キロバイトに留まっているので、この先が楽しみだ。メモリが128キロあるMega128が¥1000程度で、このあいだTQFP64ピンの変換基板も手に入れたので(送料が価格の半分近くだったけど)、これを使えば相当のことができそうだ。

|

« イーサネットのENC28J60 | トップページ | EEPROM 93C46の怪 »

AVR」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: Mega168インターネット開通:

« イーサネットのENC28J60 | トップページ | EEPROM 93C46の怪 »