Jul 19, 2006

AVR uIP on ATmega128

Optimize氏のSPIイーサネットモジュールを入手したので、遊んでみた。
まずはお手本どおりmega168でやってみたものの、メモリが少なすぎて面白くないので、買ったまま放置してあったmega128にメモリ増設をして再挑戦。
ベースをuIP0.6からuIP0.9に変更し、Webサーバのサンプルを動作させることが目標。
uIPの使い方自体が非常に簡単なのと、すでにENC28J60のドライバがあるので、ビルドはすんなりと出来た。
しかし、ブラウザからアクセスしてみると応答なし。pingの応答はあるので、動作しているはず。
仕方がないので、Wireshark(旧ethereal)にてパケットキャプチャとデバッグコードを埋め込んでシリアルポートからモニタリングを実施。
perlスクリプトからリクエストを投げて実験してみると、パケットサイズが240バイト位までであれば応答を返すことが判明。それ以上だと、ACKすら返さないので、送信側が再送を繰り返していた。
結局はenc28j60.hに定義してあったMAX_FRAMELEN(イーサネットフレーム長)が300に設定されていることが原因。これを1518に設定することで解決。
さて、これで何を作るかな。
Posted at 23:38 in embedded