Arduino ethernet shield and accessing SD cards

@davekw7x:

I did not have success with the Wiznet power-on reset when its reset pin was pulled up to +5 volts.

@ArJack:

maybe grounded?

No. I said that it didn't work (for me) when it is pulled up to +5 Volts, and that's what I meant to say.

Here's the deal:

When you plug the Shield into an Arduino board, the Wiznet's reset pin is connected to the Arduino's reset pin. This is pulled up to +5V through a resistor on the Arduino board.

@ArJack:

I found this interesting...

I have seen dozens of fixes posted on this forum that work for some people but not for others. That is, the value of capacitance required seemed to be fairly critical. Too little doesn't work; too much doesn't work. A value that gives satisfactory results for some people does not work for others.

I think (just a guess) that the differences may be explained by the differences in the way that power ramps up. That is, different setups will ramp up differently. My observation was that the normal auto-reset pulse on the Arduino was long enough to meet Wiznet specification.

However...

The reset must be asserted after the 3.3V power to the Wiznet reaches working value. Just adding more and more capacitance on the reset pin may eventually work on the Wiznet, but it will also eventually inhibit the auto-reset of the Arduino.

Here are some tests that I ran on the two "genuine" Arduino shields that I own. See Footnote.

The tests were performed with the Shield plugged into a "genuine" Duemilanove. I uploaded one of the Ethernet library sample sketches (the ChatServer) to the Duemilanove.

Then...

Test number 1:


1.  Connect a 10K resistor from the Wiznet reset pin to [b]+5V[/b]

2.  Connect a 10 nF capacitor from the Wiznet reset pin to GND.

3.  Isolate the Wiznet chip's reset signal from the Arduino reset by bending the reset pin on the Shield away from the Arduino connector before plugging them together.  (I didn't want to cut traces on the Shield.)

4. Power down and power up.

5. Repeat step 4 until I get really tired.

Results of test number 1:
It never powered up correctly (did not link up with my Ethernet LAN). It always required that I hit the manual reset button on the shield before I got anything. Then the operation was normal (after restarting the sketch that I was running).

Note that the way that I isolated the Shield from the Arduino means that the manual reset button on the Shield will not reset the Arduino. So if your setup doesn't work with Arduino auto-reset, this probably won't be the way to go.

Test number 2:


1.  Connect a 10K resistor from the Wiznet reset pin to [b]+3.3V[/b]

2.  Connect a 10 nF capacitor from the Wiznet reset pin to GND.

3.  Isolate the Wiznet chip's reset from the Arduino reset by bending the reset pin on the shield away from the Arduino connector before plugging them together.

4. Power down and power up.

5. Repeat step 4 until I get really tired.

Results of test number 2: It has never failed to power up correctly.

Now, I can only say that IWFMYMMV (It Works for Me, Your Mileage May Vary).

Additional notes:

I tried both tests with 100 nF capacitors; same results.

I tried both tests with the Arduino+Shield powered from USB and with power from a 9V regulated wall wart. Same results.

I tried both tests with no network connected at power up (then plugging in the Ethernet cable) and with the network connection present at power up. Same results.

Bottom line: Maybe it won't work for everybody, but this seems to be a relatively benign approach to testing:

Doesn't require cutting traces.
Doesn't require any additional ATmega output pins to perform the reset.
Doesn't require any software changes.

Regards,

Dave

Footnote:

The engineer's "rule" of finite Mathematical Induction:

If it works for n equal to 1 and it works for n equal to 2, then it works for all n.