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

7

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 aus. Warum funktioniert es nur vollständig, wenn die SD-Karte entfernt wurde? Ist das ein "Dokumentationsfehler"?

powtac
quelle
Welche Version des Schildes hast du?
Kevin Mark
Wenn Sie eine Antwort gefunden haben, sollten Sie sie @powtac posten und nicht in Ihre Frage einfügen. Beantworten Sie stattdessen Ihre eigene Frage.
Kortuk
1
@Kortuk Er sucht, wo es dokumentiert ist / warum es passiert, keine Problemumgehung.
Polar
Welches Betriebssystem verwenden Sie, @powtac?
Taco
@taco Ich benutze Win7 64 mit Arduino IDE 1.0.4
powtac

Antworten:

7

Laut der Arduino Ethernet Shield-Seite :

Da sich der W5100 und die SD-Karte den SPI-Bus teilen, kann jeweils nur einer aktiv sein. Wenn Sie beide Peripheriegeräte in Ihrem Programm verwenden, sollten die entsprechenden Bibliotheken dafür sorgen. Wenn Sie jedoch keine der Peripheriegeräte in Ihrem Programm verwenden, müssen Sie die Auswahl explizit deaktivieren. Setzen Sie dazu mit der SD-Karte Pin 4 als Ausgang und schreiben Sie ein High darauf. Stellen Sie beim W5100 den digitalen Pin 10 als hohen Ausgang ein.

Und wenn Sie die erste Version des Boards verwenden:

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

Kevin Mark
quelle
Um beide zu verwenden, müssen Sie den Status der Pins 4 und 10 bei jedem Wechsel ändern.
Anonymer Pinguin
Es scheint so. Obwohl "dies von den entsprechenden Bibliotheken erledigt werden sollte", glaube ich, dass dies automatisch mit den eingebauten Bibliotheken erfolgen sollte.
Kevin Mark
3

Sie können Fehler mit dem Code - Basis berichten hier (es sieht aus wie sie von Google Code auf Github bewegt).

Basierend auf diesem Bericht scheint es, als hätte ein Dritter die DHCP-Unterstützung hinzugefügt, daher würde ich das Problem melden, um sicherzustellen, dass es kein Fehler ist.

Es sieht so aus, als würden Sie aufgrund dieses Berichts möglicherweise eine schlechte Dokumentation verwenden .

Taco
quelle
1
Möglicherweise verwandt: github.com/arduino/Arduino/pull/1334
Kevin Mark
-1

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

Wie vermeide ich eine Verwechslung von SD-Karte und W1500 SPI auf dem Ethernet Shield?

user46609
quelle
1
Dies eher im Sinne eines Kommentars und einer Link-Antwort, die hier verpönt ist. Wenn Sie einen Beitrag leisten möchten, veröffentlichen Sie weitere Informationen und geben Sie natürlich eine Namensnennung an.
Platzhalter