Velocidad de transmisión del Arduino Ethernet Shield

Kane12:
¿Por qué la frecuecia del SPI no es de 16 MHz? No entiendo porque tiene que ser de 2 MHz cuando los dos pueden trabajar a 16 MHz.

Excelente pregunta. Hay dos motivos por los cuales el reloj general (16 MHz en la mayoría de micros AVR) no es usado como señal de reloj para SPI (SCK):

Así esta configurado por hardware. El controlador SPI en realidad sí parte de la señal general de reloj (la generada por el oscilador externo); excepto que de por medio tiene algo llamado "prescaler", un contador interno utilizado para dividir la frecuencia (con un divisor de potencia 2), retrasando en la salida, el tiempo transcurrido entre conmutaciones.
El controlador SPI de un microcontrolador AVR (también presente en el Arduino Mega) tiene un prescaler cuya división mínima es de 2. Así es, me había equivocado en esa parte; por lo tanto, la frecuencia máxima sería de 8 MHz (de hecho, hasta dentro de la librería SD es lo que se define como "full speed" o "velocidad máxima"); otorgando así una velocidad "bruta" de 125 KB/s. Quizá pienses que sea un mal diseño, pero lo que no sabes es que es se debe a la compensación de la capacitancia e inductancia parásitas (ambos distorsionan una señal digital), y al siguiente motivo.

Carece de DMA. Recuerda que sin este, el CPU debe atender el evento de recepción que ocurre por cada byte (8 bits). Si la señal del reloj general estuviera conectada al del SPI, el CPU estaría "distrayéndose" (más exactamente "siendo interrumpido") cada 8 ciclos. Por si me lo preguntaras, esa frecuencia es tan excesiva que casi no tendría tiempo para ejecutar el resto del programa.
Aunque bueno, no es gran pérdida si se usa SPI.transfer(), ya que esta función es bloqueante de todos modos; pero si el uso del controlador SPI se hiciera "manualmente", sí podría ser un problema.

A 16 MHz, había mencionado que SPI tiene una velocidad de 125 KB/s; sin embargo había dicho que era un valor bruto ya que en la práctica, con tanto código adicional (sobrecargo), un valor más realista sería 100 KB/s o incluso menos. Por lo tanto pondría más o menos 95 KB/s como "máximo absoluto". Con el código de la librería que maneja el dispositivo más los posibles tiempos de espera que entorpezcan una transmisión continua, la velocidad efectiva se reduce aún más (usualmente a 70 KB/s en el mejor de los casos).
Con DMA, aparte de poderse transferir múltiples bytes sin intervención del CPU; en grandes bloques la velocidad efectiva podría acercarse mucho más a los 125 KB/s (de nuevo, a menos que el "esclavo" SPI introduzca retrasos intencionalmente).

En fin, una prueba de por qué el mismo Arduino es el cuello de botella de tu proyecto; aunque se cambie a un micro más veloz y todo, se llegará al punto en que el cuello de botella termina siendo el mismo módulo Ethernet y/o SD. Si se alcanzara dicho punto, no habría más remedio que reemplazar por un SBC o un PC.