Ethernet.begin() solo funciona con la tarjeta SD extraída, ¿por qué?

Cuando ejecuto este código en mi W5100 Ethernet Shield :

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  

void setup() {
  Ethernet.begin(mac);
}

¡ Solo funciona cuando se extrajo la tarjeta SD del escudo!


Me tomó días encontrar este error. Con la tarjeta SD instalada, solo funciona la configuración inicial completa :

Ethernet.begin(mac, ip, dns, gateway, subnet); 

La documentación oficial deEthernet.begin() no dice nada sobre este problema. ¿Por qué solo funciona completamente con la tarjeta SD extraída? ¿Es esto un "error de documentación"?

¿Qué versión del escudo tienes?
Si encontró una respuesta, debe publicarla @powtac, no ponerla en su pregunta. En su lugar, responde a tu propia pregunta.
@Kortuk Está buscando dónde está documentado / por qué sucede, no una solución.
¿Qué sistema operativo estás usando, @powtac?
@taco Estoy usando Win7 64 con Arduino IDE 1.0.4

Respuestas (3)

De acuerdo con la página Arduino Ethernet Shield :

Tenga en cuenta que debido a que el W5100 y la tarjeta SD comparten el bus SPI, solo uno puede estar activo a la vez. Si está utilizando ambos periféricos en su programa, las bibliotecas correspondientes deben encargarse de esto. Sin embargo, si no está utilizando uno de los periféricos en su programa, deberá deseleccionarlo explícitamente. Para hacer esto con la tarjeta SD, configure el pin 4 como salida y escríbale un alto. Para el W5100, configure el pin digital 10 como salida alta.

Y si estás usando la primera versión de la placa:

La revisión original del escudo contenía una ranura para tarjeta SD de tamaño completo; esto no es compatible.

Entonces, para usar ambos, ¿debe cambiar el estado de los pines 4 y 10 cada vez que cambia?
Parece que sí. Aunque "esto debería ser atendido por las bibliotecas correspondientes", me hace creer que debería hacerse automáticamente con las bibliotecas integradas.

Puede informar errores con el código base aquí (parece que se movieron del código de Google a Github).

Según este informe , parece que un tercero agregó la compatibilidad con DHCP, por lo que informaría el problema para asegurarme de que no se trata de un error.

Según este informe , parece que está utilizando una documentación incorrecta .

Posiblemente relacionado: github.com/arduino/Arduino/pull/1334

Kevin Mark respondió muy bien por qué su escudo de ethernet no funciona con SD. Aquí está la respuesta de qué hacer para que funcione.

¿Cómo evitar la confusión entre la tarjeta SD y W1500 SPI en Ethernet Shield?

Esto más en la línea de un comentario y una respuesta de solo enlace que está mal visto aquí. Si desea contribuir, publique más información y, por supuesto, dé atribución.