CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

パケット受信テスト

PCから適当なIPアドレスPINGを打つとRxインジケータが点滅するので
ハード的にLANコントローラまでパケットが来ているのは間違いないのですが、
コントローラ内のリングバッファに受信データが入ってきません。

そこでマニュアルのNE2000互換レジスタの説明を良く読んでみると、
RCR(受信コンフィギュレーションレジスタ)にパケットの受入れの制御がありました。
ここが0であるため自局アドレスとブロードキャストアドレスしか受けないように
フィルタがかかっていたようです。
現状、ARPのモジュールをリンクしていないのでPINGでボードのIPアドレスを指定してもMACアドレスが解決しないのかなと。
←ネットワークプログラミングは初心者なので説明が間違っているかもしれません。

そこでRCRのD5ビットを1で初期化したところ、バッファにデータが入ってくるようになりました。

while(1){
if(ether_input()){
s+=rxpacket.packetsize;
lcdctr(0,0);
lcd_printf("packet=%5d",++i);
lcdctr(0x40,0);
lcd_printf("size =%5d",s);
}
}

このプログラムは受信したデータをデータリンク層から取り出してパケット個数と
総サイズをLCDに表示するものです
これを走らせておいてネットワーク上のPCから「適当なIPアドレスに」PINGを打つと
長さ40バイト(ICMPヘッダ8+テストデータ32byte)のパケットが4回、計160バイトの
データが受信されました。
もちろんPC側ではすべてのパッケトがタイムアウトになります。