Ethernet.begin() funktioniert nur mit entfernter SD-Karte - warum?

Wenn ich diesen Code auf meinem W5100 Ethernet Shield ausführe :

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

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

Es funktioniert nur, wenn die SD-Karte aus dem Schild entfernt wurde!


Ich habe Tage gebraucht, um diesen Fehler zu finden. Wenn die SD-Karte installiert ist, funktioniert nur das vollständige Start-Setup :

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

Die offizielle Dokumentation vonEthernet.begin() sagt nichts über dieses Problem. Warum funktioniert es nur vollständig, wenn die SD-Karte entfernt wird? Ist das ein "Dokumentationsfehler"?

Welche Version des Schildes hast du?
Wenn Sie eine Antwort gefunden haben, sollten Sie sie unter @powtac posten und nicht in Ihre Frage einfügen. Geben Sie stattdessen eine Antwort auf Ihre eigene Frage.
@Kortuk Er sucht danach, wo es dokumentiert ist / warum es passiert, keine Problemumgehung.
Welches Betriebssystem verwendest du, @powtac?
@taco Ich verwende Win7 64 mit Arduino IDE 1.0.4

Antworten (3)

Laut der Arduino Ethernet Shield-Seite :

Beachten Sie, dass, da der W5100 und die SD-Karte den SPI-Bus teilen, nur einer gleichzeitig aktiv sein kann. Wenn Sie beide Peripheriegeräte in Ihrem Programm verwenden, sollte dies von den entsprechenden Bibliotheken erledigt werden. Wenn Sie jedoch eines der Peripheriegeräte in Ihrem Programm nicht verwenden, müssen Sie es explizit abwählen. Dazu mit der SD-Karte Pin 4 als Ausgang setzen und ein High schreiben. Stellen Sie für den W5100 den digitalen Pin 10 als High-Ausgang ein.

Und wenn Sie die erste Version des Boards verwenden:

Die ursprüngliche Version des Schildes enthielt einen SD-Kartensteckplatz in voller Größe; dies wird nicht unterstützt.

Um beide zu verwenden, müssen Sie also bei jedem Umschalten den Status der Pins 4 und 10 ändern?
Es scheint so. Obwohl "dies sollte von den entsprechenden Bibliotheken erledigt werden" lässt mich glauben, dass dies automatisch mit den eingebauten Bibliotheken geschehen sollte.

Sie können Fehler mit der Codebasis hier melden (es sieht so aus, als ob sie von Google-Code zu Github verschoben wurden).

Basierend auf diesem Bericht klingt es so, als hätte ein Drittanbieter die DHCP-Unterstützung hinzugefügt, also würde ich das Problem melden, um sicherzustellen, dass es sich nicht um einen Fehler handelt.

Basierend auf diesem Bericht sieht es so aus, als ob Sie möglicherweise eine schlechte Dokumentation verwenden .

Möglicherweise verwandt: github.com/arduino/Arduino/pull/1334

Kevin Mark hat eine sehr gute Antwort gegeben, warum Ihr Ethernet-Schild nicht mit SD funktioniert. Hier ist die Antwort, was zu tun ist, damit es funktioniert.

Wie vermeidet man eine Verwechslung von SD-Karte und W1500 SPI auf dem Ethernet Shield?

Dies eher im Sinne einer Kommentar- und Linkantwort, die hier verpönt ist. Wenn Sie beitragen möchten, posten Sie weitere Informationen und geben Sie natürlich die Namensnennung an.