[En-Nut-Discussion] changes in nicrtl driver

Stephen Noftall stephenn at lcsaudio.com
Thu Jul 1 23:38:10 CEST 2004


Harald Kipp wrote:
> The FUDUP bit is now on...but how to proof that it's
> really doing full duplex?

Hi Harald;

I have look at this fairly extensively. There are a few references on 
the net about the FUDUP problem in general.

It seems that the RTL8019AS chip is an old chip, and does not autodetect 
  the network properly (or at all). So the problem comes about when 
hooked to a switch that autodetects (10Base-T or 100Base-T, and even 
1000Base-T). When a switch tries to negotiate with the RTL8019AS, it 
fails, as the RTL8019AS does not negotiate properly. The switch then 
will fall back to where it is suppose to be: 10Base-T, NON DUPLEX.

In the standard Ethernut setup, the FUDUP bit will be set. So how would 
it work? The switch will be in non-duplex, yet ethernut is in full duplex?

While Ethernut might seem to be in full duplex, it will still process 
packets that are received on it's transmit lines. So the switch will 
still be able to communicate with Ethernut. But the problem is that the 
RTL8019AS will still think it is in full duplex, and not do the special 
timing needed to prevent collisions. So there will be a significant 
number of collisions on the single line, depending on traffic.

Now some switches will get confused by this, and basically drop whole 
packets. Depending on the protocol (TCP vs UDP), this could either make 
the communication unreliable (UDP), or just make it really slow (TCP).

There are 2 ways that I know to fix this. One is to just 'upgrade' to 
the LAN91C111. This is what I did, and I am really appreciative of this 
project Harald, as it came up with a simple recompile! Very very impressive!

The other way is to fake the FUDUP to be off, so that the RTL8019AS 
thinks it is in half duplex mode. While it is in half duplex, it should 
behave properly, and hardly ever have collisions with the switch. But I 
haven't tested this option out. To get it to be off, you need to 
simulate the EEPROM.

Good luck!

Stephen Noftall



More information about the En-Nut-Discussion mailing list