My problem sounds exactly like this one, which never got an answer:
I have an Arduino Uno R3, and an Ethernet Shield W5200. The sketch is a basic Ethernet-Serial chat sketch, modified for the W5200 library, with a couple of simple modifications I made regarding which characters get echoed to where. The sketch works fine when powered by a USB cable connected to my computer's USB port (e.g. right after uploading the sketch to the board). But when powering the Arduino with a USB cable connected to e.g. an iPhone charger, no dice. The board appears to power up, but the Ethernet library does not initialize properly, the Ethernet Shield lights (4 lights) come on steady but do not blink as they did before, and the board does not respond to any inputs.
I checked voltages in the two scenarios, and there were some differences:
Vcc: when powered by the computer's USB port: initially 4.7 V, then after a few seconds 4.6 V, then after a few more seconds (when the Ethernet Shield finishes initializing) about 4.0 V. (This seems low, but the board works fine at this voltage.)
But when powered by the DC iPhone charger: voltage constant at 5.01 V. (I surmise that the W5200 chip never got selected and powered up, and is not drawing current)
The chip select (digital pin 10) for the Ethernet Shield board also has slightly different voltages in the two scenarios: about 2.2 V when powered by the computer USB port, and 1.6 V when powered by the wall charger. (I would have thought this should be closer to 0 V when it is asserted, i.e. "low" as opposed to "high"...)
The other obvious difference I noticed is that when connected to computer USB, the main yellow "L" LED on the R3 board does 3 rapid blinks at startup, then after a few seconds, another 3 rapid blinks. But when powered by the DC wall charger, the first 3 blinks are there, but not the second 3.
I am fairly baffled. Of course there could be things happening on that USB cable that I can't see, since the computer is able to communice over it and the DC wall charger isn't (well, less so, anyway). Are either the Serial or Ethernet libraries expecting the device on the other end of the USB cable to do anything specific?