Forum: Mikrocontroller und Digitale Elektronik MEGA2560 und W5500 SPI


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Wolfram F. (mega-hz)


Lesenswert?

Hallo,

ich habe eine PCB mit dem Atmega2560 und dem Ethernet Chip W5500
entwickelt. Nun ist es ja so, daß der 2560 mit 5V und der W5500 mit 3.3V 
versorgt werden.
Laut Datenblatt des W5500 soll dieser 5V tolerante IOs haben und bis 
5.5V(Absolute Maximum Ratings) aushalten können.
Ich habe den SPI Bus direkt vom µC zum W5500 angeschlossen, also 5V 
Pegel.
Die Schaltung funktioniert ohne Probleme.

{Bei einem der billigen TFT Displays lief anfangs nix, bis ich MOSI,SCK 
und CS mit Spannungsteilern (1K0/1K8) versehen hatte.}

Meine Frage nun:
Hat jemand schonmal Probleme bekommen wenn die SPI nicht 3.3V sondern 5V 
Pegel hat? (nur i.V. mit dem W5500 und 5VµC!)

von Sebastian (Gast)


Lesenswert?

Wolfram F. schrieb:
> Hallo,
> ich habe eine PCB mit dem Atmega2560 und dem Ethernet Chip W5500
> entwickelt. Nun ist es ja so, daß der 2560 mit 5V und der W5500 mit 3.3V
> versorgt werden.
> Laut Datenblatt des W5500 soll dieser 5V tolerante IOs haben und bis
> 5.5V(Absolute Maximum Ratings) aushalten können.
> Ich habe den SPI Bus direkt vom µC zum W5500 angeschlossen, also 5V
> Pegel.
> Die Schaltung funktioniert ohne Probleme.
> {Bei einem der billigen TFT Displays lief anfangs nix, bis ich MOSI,SCK
> und CS mit Spannungsteilern (1K0/1K8) versehen hatte.}
> Meine Frage nun:
> Hat jemand schonmal Probleme bekommen wenn die SPI nicht 3.3V sondern 5V
> Pegel hat? (nur i.V. mit dem W5500 und 5VµC!)

Kann funktionieren, ist aber nicht durch die Datenblätter garantiert (uC 
LOW output max 0.9V - W5500 LOW input max 0.8V, W5500 HIGH output min 
2,4V - uC HIGH input min 0.6VCC = 3V).

Auch beachten: VCC W5500 max 3.6V.

LG, Sebastian

von jo mei (Gast)


Lesenswert?

Wolfram F. schrieb:
> Laut Datenblatt des W5500 soll dieser 5V tolerante IOs haben und bis
> 5.5V(Absolute Maximum Ratings) aushalten können.

Tun sie auch, auch nach meinen Erfahrungen. Die Designer der
verschiedenen W5x00 Module sehen zwar auf der Seite der 5V
zum Chip (SCLK, MOSI, CS) immer noch Buffer vom Typ 74LVC125
vor (das muss man sich erklären!), das dient aber dazu eine
eventuell angeschlossene SD Karte zu schützen. Die MISO
Ausgänge der W5x00 Module und SD Karten (die ja 3.3V sind)
gehen immer "blank" direkt auf den 5V Megaxxxx Controller.

Wolfram F. schrieb:
> Hat jemand schonmal Probleme bekommen wenn die SPI nicht 3.3V sondern 5V
> Pegel hat?

Ich nicht, und ich habe schon einiges mit den W5500 Modulen im
Zusammenspiel mit Mega328p und Mega2560 gemacht. Siehe

Beitrag "Re: TCP Server ATmega328"

Besonders das Kombi-Modul (3. Foto, Arduino 328p und W5500) macht
es auch nicht anders, d.h. 3.3V MISO geht auf den 5V Mega328p.

Hier eines meiner Testaufbauten mit Arduino Mega2560 mit dem ich
sowohl mit W5100 als auch mit W5500 Modulen arbeite:

Beitrag "Re: TCP Server ATmega328"

Wolfram F. schrieb:
> {Bei einem der billigen TFT Displays lief anfangs nix, bis ich MOSI,SCK
> und CS mit Spannungsteilern (1K0/1K8) versehen hatte.}

Ja bei den Displays ist alles anders, wir haben da auch schlechte
Erfahrungen gemacht. Obwohl 5V Toleranz angepriesen wird.

Sebastian schrieb:
> W5500 HIGH output min
> 2,4V - uC HIGH input min 0.6VCC = 3V).

So hab ich auch lang argumentiert, und rechnerisch klappt es
demnach also nicht wenn man alle Specs pingelig einhalten möchte.
Aber die Praxis (wo meist keine Extrem-Toleranzen ausgefahren
werden) zeigt dass es meist problemlos funktioniert.

von Wolfram F. (mega-hz)


Angehängte Dateien:

Lesenswert?

Na dann bin ich ja beruhigt und werde SPI so lassen.
Ich hoffe daß die bestellte RJ45 Buchse mit integrierten Übertrager bald 
kommt, solange kann ich noch nicht richtig testen.
Was mich noch etwas stutzig macht:
Da die Buchse noch fehlt, müsste da nicht beim Beispiel-Sketch eine
Fehlermeldung "Ethernet cable is not connected" kommen?
1
  
2
  if (Ethernet.hardwareStatus() == EthernetNoHardware) 
3
  {
4
    Serial.print(F("NO Ethernet Hardware!\n"));   
5
  }
6
  if (Ethernet.linkStatus() == LinkOFF) 
7
  {
8
    Serial.print(F("Ethernet cable is not connected.\n"));   
9
  }
10
    Serial.println(Ethernet.localIP());

es kommt die vorher eingestellte IP-Adresse.

"Denkt" der W5500 ohne angeschlossenem Übertrager vielleicht, er hat 
eine Verbindung? Oder ist der Schaltplan nicht korrekt?

von jo mei (Gast)


Lesenswert?

Wolfram F. schrieb:
> es kommt die vorher eingestellte IP-Adresse

Was sollte die Software auch sonst machen wenn sie keine andere
IP Adresse von aussen bekommt (bekommen kann)?

Wolfram F. schrieb:
> "Denkt" der W5500 ohne angeschlossenem Übertrager vielleicht, er hat
> eine Verbindung?

Was die Arduino-Software im Einzelnen macht weiss ich auch nicht,
ich schreibe meine Treiber selbst nach meinen Bedürfnissen.

Wolfram F. schrieb:
> Oder ist der Schaltplan nicht korrekt?

Das herauszufinden ist dir selbst überlassen. Du kannst deinen
Schaltplan ja ganz einfach mit den Referenz-Designs vergleichen.
Die Schaltpläne der verschiedenen Module sind ja frei verfügbar.

von jo mei (Gast)


Lesenswert?

Wolfram F. schrieb:
> Die Schaltung funktioniert ohne Probleme.

Wolfram F. schrieb:
> Da die Buchse noch fehlt, müsste da nicht beim Beispiel-Sketch eine
> Fehlermeldung "Ethernet cable is not connected" kommen?

Ich sehe da eine gewisse Diskrepanz zwischen deinen beiden
Aussagen. Wie kannst du behaupten "funktioniert ohne Probleme"
wenn du noch kein einziges Byte bzw. Paket übertragen hast?

Bleibt zu hoffen dass du in deinem Layout deines Designs auch
alles richtig gemacht hast.

von Wolfram F. (mega-hz)


Lesenswert?

das bezog sich auf den SPI Bus und das grundsätzliche Ansprechen des 
Chips.

von jo mei (Gast)


Lesenswert?

Wolfram F. schrieb:
> das bezog sich auf den SPI Bus und das grundsätzliche Ansprechen des
> Chips.

Wolfram F. schrieb:
> Die Schaltung funktioniert ohne Probleme.

Wenn du sonst auch so genau mit deinen Annahmen bist dann kann
ja fast nichts mehr schiefgehen.
Der SPI Bus funktioniert erst dann korrekt wenn du Millionen
von Bytes fehlerfrei übertragen hast.

Viele Leute schreiben ein Byte in ein Register, lesen das
Register zurück und freuen sich einmal dass sie genau das zurück-
bekommen was sie geschrieben haben.

Ein richtiger Härtetest auf Heimlabor-Basis sollte zumindest
einen LoopBack Test über mehrere Millionen Bytes in verschiedenen
Werte-Kombinationen durchführen und keine Fehler finden.

von Wolfram F. (mega-hz)


Lesenswert?

Stimmt. Dann muss ich mich in Geduld wälzen und auf die RJ45 Buchse 
warten und dann ausgiebig testen.
Danke erstmal !

: Bearbeitet durch User
von jo mei (Gast)


Lesenswert?

Wolfram F. schrieb:
> Stimmt.

Ja.

Wolfram F. schrieb:
> Dann muss ich mich in Geduld wälzen und auf die RJ45 Buchs
> warten .....

Nein.

Denn einen LoopBack Test kann man auch ohne RJ45 Buchse
durchführen. Aber du bist insofern im Nachteil dass du dir
die Arduino-Library erst anschauen und erweitern müsstest.
Denn einfach so mal auf das SPI Datenregister des Mega2560
schreiben und lesen hilft nicht. Daher sage ich mal voraus
dass du diesen Test nicht machen wirst, denn du hast dir
mit Verwendung der Arduino-Library das Leben schon mal
(sehr) leicht gemacht. Im Schweisse seines Angesichts
programmieren ist anders ....

von Peter D. (peda)


Lesenswert?

Mit dem DMM im Diodenbereich kann man testen, ob zwischen dem IO-Pin und 
VCC eine Schutzdiode ist.
Bei 5V toleranten Eingängen ist keine solche Schutzdiode vorhanden, 
sondern eine Z-Diode gegen GND.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.