Forum: Mikrocontroller und Digitale Elektronik W5500 SPI Antwortet nicht


von Oliver .. (agent47)



Lesenswert?

Hallo Zusammen,

ich habe eine Schaltung für ein eigenes PCB entworfen und fertigen 
lassen. Nun habe ich aber das Problem das der dabei eingebaute W5500 SPI 
Ethernet Chip nicht auf SPI Anfragen antwortet.

Hardwareseitig ist ein ESP32 als Mikrocontroller verwendet. Der W5500 
hängt dabei alleine am VSPI und ist somit auch in der Arduino Software 
die Standard SPI Belegung.

Den Arduino Sketch den ich zum testen nehme, habe ich mit einem ESP32 
dev Kit und einem entsprechenden vorgefertigten W5500 Bard getestet, da 
funktioniert auch alles. Sobald ich aber die Software auf den ESP32 auf 
meiner Platine aufspiele, kommt die Fehlermeldung das keine Hardware 
vorhanden wäre.

Ich habe mal die Schaltplan Seite aus KiCAD mit angehängt. Auf dieser 
Seite gibt es noch zwei Fehler. Zum einen ist die Falsche Induktivität 
verwendet, das habe ich bereits überarbeitet. Für L1 kommt jetzt wie 
empfohlen ein Ferrit mit 120 Ohm bei 100 MHz zum Einsatz.
Des weiteren ist die Gelbe LED in Sperrichtung angeschlossen und kann 
somit nicht leuchten.

Ich habe nun schon alles mehrfach durch gemessen. Fehlerhafte Lötstellen 
halte ich aktuell für unwahrscheinlich. Zumal der W5500 Chip automatisch 
bestückt wurde.

Beim Anschluss an meinen Switch Blinkt die grüne LED unregelmäßig, was 
soweit auch normal ist. Die gelbe LED kann nicht leuchten, daher ist 
unklar wie sich das verhält. Soweit ersichtlich scheint die 
Netzwerkseite aber Grundlegend zu funktionieren.

Am Pin 18 (VBG) liegen wie im Datenblatt beschrieben 1,2V an, somit muss 
auch die Interne Spannungsversorgung in Ordnung sein.

Aus Verzweiflung habe ich nun schon das bestehende W5500 Board, welches 
ich zum Testen verwendet habe komplett mit dem Multimeter vermessen. 
Konnte dabei aber auch keine Grundlegend andere Schaltung vorfinden, als 
ich verwendet habe. Ich habe mich soweit möglich an die 
Referenzschaltung vom Hersteller gehalten. Aber leider ohne Erfolg.

Hat von euch jemand eine Idee woran das noch hängen kann?

Referenzschaltung vom Hersteller:
http://wizwiki.net/wiki/doku.php/products:w5500:refschematic

von c-hater (Gast)


Lesenswert?

Oliver K. schrieb:

> Ich habe nun schon alles mehrfach durch gemessen. Fehlerhafte Lötstellen
> halte ich aktuell für unwahrscheinlich. Zumal der W5500 Chip automatisch
> bestückt wurde.

Automatische Bestückung schützt weder vor Bestückungsfehlern noch vor 
Lötfehlern. Und solche Bastlerboards mit Stückzahl eins werden 
typischerweise auch nicht auf Funktion geprüft. Das ist dein Job, hast 
du ja auch gemacht. Und festgestellt: funktioniert nicht. Also mußt du 
jetzt nur noch den Fehler suchen.

Da du keinerlei relevanten Unterlagen gepostet hast, wirst du das 
alleine tun müssen.

von jo mei (Gast)


Lesenswert?

Oliver K. schrieb:
> Ich habe mal die Schaltplan Seite aus KiCAD mit angehängt.

Bitte vollständig. Und gleich das Layout und Aufbau dazu.

Auf dem Teil-Schaltplan kann ich keine Probleme erkennen.
Beim Aufbau kann man jede Menge Fehler machen. Nur schade
dass sich die Leute immer erst melden wenn das Kind schon
in den Brunnen gefallen ist. Weil wenn erst mal der Schalt-
plan korrekt und fertig ist "kann ja nichts mehr schiefgehen."

Bei der Kombination ESP32 und W5500 fürchte ich prinzipiell
die anspruchsvolle Stromaufnahme wenn sonst keine offensich-
lichen Fehler vorliegen.

von Oliver .. (agent47)


Lesenswert?

In welchem Format könnt ihr das am besten Verarbeiten? (PDF, Bild, KiCAD 
Projekt, Gerber File). Spätestens die Platine wird als Bild nicht mehr 
so vorteilhaft lesbar.

Die Stromversorgung muss beim ESP32 definitiv stabil und Leistungsfähig 
sein. In meinem Fall habe ich einen LM2596 im Einsatz der mit 24V 
gespeist wird. Aber auch mit einem Labornetzteil (liefert bis 3A) gibt 
es keine Änderung.

Die Platine an Sich ist nicht optimal konstruiert. Das war auch von 
Anfang an als Test gedacht und auch Fehler suchen und beheben zu können. 
Nur bin ich jetzt an dem Punkt das ich den Fehler nicht finden kann.
Ich habe mich dabei auch etwas vertan. Da ich versucht habe die Platine 
schon passend für das vorgesehene Gehäuse zu fertigen. Dafür aber auf 
Messpunkte verzichtet habe.

von jo mei (Gast)


Lesenswert?

Oliver K. schrieb:
> Spätestens die Platine wird als Bild nicht mehr
> so vorteilhaft lesbar.

Doch doch, einfach grosses PNG Format wählen. Oder PDF. Bei
Bildformaten beim Hochladen keine Bildgrössen-Reduzierung zulassen.

von Oliver .. (agent47)


Angehängte Dateien:

Lesenswert?

Anbei die Dokumente.

Grundlegende Idee ist es einen ESP32 mit einem FRAM (SPI), einer RTC 
(I2C, DS3231), einer USB UART Bridge (CP2102N) und dem W5500 (SPI) 
Netzwerkchip aus zu statten.

Probleme gibt es aktuell generell noch viele.

- Der FRAM funktioniert nicht (ich vermute aber es liegt an den Billigen 
Chips die ich von eBay in China bestellt habe)
- Der CP2102N funktioniert nicht (die Shotty Dioden sind die Falschen 
und der RST Pin ist nicht belegt)
- Der W5500 Netzwerkchip funktioniert nicht (das hier besprochene Thema)

Aktuell funktioniert lediglich die RTC am I2C Bus ohne Probleme.
Der FRAM hängt am HSPI Bus, der auch auf Pins heraus geführt wird und 
auf einer weiteren Platinen fortgeführt wird. Der W5500 hängt am VSPI 
Bus.

: Bearbeitet durch User
von Spess53 (Gast)


Lesenswert?

Hi

Wieso ist dir der INT-Ausgang vom W5500 nicht angeschlossen?

MfG Spess

von Oliver .. (agent47)


Lesenswert?

Das ist einfach aus der Referenzschaltung übernommen. Dort wird der auch 
nur per Pull Up auf VCC gezogen.
Bisher habe ich den Eingang auch noch nie benötigt.

von Sebastian W. (wangnick)


Lesenswert?

Hi Oliver,

Oliver K. schrieb:
> Nun habe ich aber das Problem das der dabei eingebaute W5500 SPI
> Ethernet Chip nicht auf SPI Anfragen antwortet.

Kannst du die SPI-Kommunikation aufzeichnen?

LG, Sebastian

von Oliver .. (agent47)


Lesenswert?

Aktuell kann ich das nicht unabhängig messen.

Ich habe zwar dafür einen Bus Pirate (v4) bestellt, der ist aber erst 
vor ein paar Tagen aus Fernost eingetroffen. Somit bin ich davon noch 
ein Stück weit weg, den Controller auch effektiv verwenden zu können.

von Thomas K. (joshua314)


Lesenswert?

Guten Tag Oliver,
ein paar Dinge die mir aufgefallen sind.


1. Dein Layout ist elektrisch gesehen nicht das schönste ...
   Deine C's sind nicht dort wo diese hingehören.
   "Short as possible to Pin"

2. Wenn der W5500 nicht will
   liegt es meist am Quarz.
   GAAAAANNNNNZZZ wichtig.  25MHz Grundton-Quarz.
   Kein 25MHz dritte Oberwelle.
   Und messen mit Oszi .. ist nicht !!
   Denn das belastet die Schaltung so stark, dass nix mehr geht.

3. Hab ich mir den CP2102 angeschaut. Der kann auch nicht funktionieren.
   Die Stromversorgung ist eine Mischung aus 5V und 3V3.
   Ohne Richtigen Bezug zu VBUS(USB) und der Reset ist bei dieser 
Mischung
   auch nicht beschalten.
   Wenn du REGIN mit 5V versorgst,
   dann ist VDD  der Ausgang, der 3V3 liefert.
   Also den richtigen Modus wählen. Eigenversorgt Fremdversorgt (5V)
   3V3 über eigebauten Regler   oder Extern.


Gruß Thomas
ca. 150x  W5x00 auf verschiedenen eigenen Platinen verbaut
ca. 600   CP2102 auf Serien Produkt verbaut

: Bearbeitet durch User
von Oliver .. (agent47)


Lesenswert?

Hallo Thomas,

das die Platine elektrisch gesehen nicht umwerfend ist, ist mir 
mittlerweile auch klar. Dazu kommen noch ein paar Konstruktive Fehler. 
Zum Beispiel war es keine gute Idee den Netzwerkanschluss nach innen zu 
drehen. In der nächsten Version nehme ich einen Vertikalen, die sind mit 
Transformator nur sehr selten und teuer.

Die Kondensatoren sind doch schon sehr nah an den jeweiligen VCC Pins. 
Aber es ist wahrscheinlich besser beim platzieren gleich als erstes die 
Kondensatoren am optimalen Platz neben die IC's zu pflanzen. Bei der 
Platine habe ich das erst später gemacht.

Als Quarz habe ich einen 25 MHz Standard Quarz verwendet. So wie es 
meiner Meinung nach auch auf den vorgefertigten Board der Fall ist.
Was muss ich da speziell beachten?
Ich vermute auch das es nicht so clever war den Quarz so weit weg vom 
Chip zu setzen und die Leitungen über VIA's zu führen.

Beispiel für den verwendeten Quarz: 
https://www.reichelt.de/standardquarz-grundton-16-000000-mhz-16-0000-hc49u-s-p32852.html?PROVID=2788&gclid=EAIaIQobChMI1oC-jcLG7gIVGqd3Ch3oKwBIEAYYASABEgI13fD_BwE

Gekauft habe ich den allerdings über eBay in China, weil Reichelt keine 
25 MHz in der Bauform hat.

Den CP2102 habe ich hier auch irgendwie mit dem 2102N verwechselt. Daher 
scheint auch die Schaltung nicht wirklich zu passen. Mittlerweile habe 
ich das ganze im Entwurf für die verbesserte Platine durch einen CP2104 
ersetzt. Der CP2102N ist bei JLCPCB ja auch noch ein Extendet Part und 
kostet 3 € Rüstkosten, der CP2102 und CP2104 ist ein Standard Part und 
damit schon einmal wesentlich günstiger.


Allgemein habe ich bisher zwar schon einige Platinen entworfen und 
fertigen lassen. Bisher aber nie in dem Umfang und nur ohne Bestückung. 
Ich selbst bin zwar Elektrotechniker, aber weniger für Platinen und 
Elektronik, sondern für Industrielle Automatisierungstechnik. Die 
Platinen sind für mich eher ein Hobby.

von Spess53 (Gast)


Lesenswert?

Hi

>Das ist einfach aus der Referenzschaltung übernommen. Dort wird der auch
>nur per Pull Up auf VCC gezogen.
>Bisher habe ich den Eingang auch noch nie benötigt.

Ich habe vor 8..10 Jahren mal Treiber für W5100 und W5200  in Assembler 
geschrieben. Durch die Verwendung von INTn hat man einen recht schnellen 
Zugriff auf die Veränderten Register. Und so unterschiedlich ist der 
W5500 nun auch nicht.

MfG Spess

von Oliver .. (agent47)


Lesenswert?

Um den Quarz aus zu schliesen kann ich höchstens mal einen aus den 
fertigen Boards auslöten. Die müssen ja funktionieren.

von Sebastian W. (wangnick)


Lesenswert?

Oliver .. schrieb:
> Aktuell kann ich das nicht unabhängig messen.
>
> Ich habe zwar dafür einen Bus Pirate (v4) bestellt, der ist aber erst
> vor ein paar Tagen aus Fernost eingetroffen. Somit bin ich davon noch
> ein Stück weit weg, den Controller auch effektiv verwenden zu können.

Oszilloskop? Und dann zumindest mal das Reset-Kommando fangen?

LG, Sebastian

von Oliver .. (agent47)


Lesenswert?

Ein Oszilloskop habe ich noch nicht zur Verfügung und die Mittelklasse 
Multimeter sind dafür um welten zu langsam.

Ich habe den Oszillator jetzt zum probieren jetzt die Oszillatoren 
zwischen meinem Board und dem Funktionierenden Board getauscht. Der 
Stand ist aber unverändert. Das Standard Board geht mit meinem 
Oszillator, aber meine Schaltung nicht mit dem Oszillator vom Standard 
Board.

von Thomas K. (joshua314)


Lesenswert?

Oliver .. schrieb:
> Beispiel für den verwendeten Quarz:
> 
https://www.reichelt.de/standardquarz-grundton-16-000000-mhz-16-0000-hc49u-s-p32852.html?PROVID=2788&gclid=EAIaIQobChMI1oC-jcLG7gIVGqd3Ch3oKwBIEAYYASABEgI13fD_BwE

Ja das wäre der richtige    Grundton.  China Teil...  mhh  keine Ahnung.
Ist aber ein absolut Muss(Grundton).

Kondensatoren sollen immer so nah wie möglich an den Pins sein.

Sende mir einmal ein PM. Dann können ich mehr machen.

Gruß Thomas

von Oliver .. (agent47)


Lesenswert?

Aktuell ist der Stand nun das der W5500 an sich funktionieren muss. Da 
die Kommunikation auf der Netzwerk Seite genau das macht was sie soll. 
Die Status LEDs blinken wenn Broadcast nachrichten kommen. Somit muss 
auch der Oszillator funktionieren.

Das Layout auf dem PCB ist alles andere als Optimal, aber erst einmal 
nicht die Ursache für mein Problem.

Das vorliegende Problem muss direkt mit dem SPI Bus zu tuen haben. Da 
ich da aktuell nicht weiter rein schauen kann, habe ich einen 
entsprechenden Logic Analyzer bestellt um die Kommunikation mitlesen zu 
können. Der kommt aber erst gegen ende der Woche.

: Bearbeitet durch User
von Oliver .. (agent47)


Angehängte Dateien:

Lesenswert?

Der Logic Analyzer ist da und bringt etwas Licht ins dunkle. Der Lösung 
bin ich dadurch aber noch nicht wirklich näher gekommen.

Ich habe jetzt zweit Testfälle jeweils auf dem Steckbrett und dem PCB 
gemessen. Die Steckbrett Schaltung funktioniert, die Schaltung auf dem 
PCB nicht.

Fall 1:

Link Status Abfrage über die Ethernet Libary der Arduino IDE. Auf dem 
Bild "steckbrett.png" ist zu sehen das er 4 Byte sendet und jeweils eine 
Antwort bekommt. Die Antwort ist richtiger weise das kein Netzwerkkabel 
angeschlossen ist.
Den selbe Sketch auf dem ESP auf dem PCB ergibt die Bytefolge vom Bild 
"pcb.png.
Wie zu sehen ist wird schon auf MOSI etwas ganz anderes gesendet und 
darauf scheint der W5500 nicht zu antworten.

Fall 2:

Ich habe die Bytefolge aus Bild "steckbrett.png". Einfach ohne die 
Ethernet Libary, direkt mit der SPI Libary an den W5500 gesendet (0x00, 
0x2E, 0x00, 0x00):
Wie zu erwarten war bekomme ich auch auf dem Steckbrett die selbe 
Antwort wie mit Ethernet Libary (Bild "steckbrett_1.png").
Auf dem PCB wird jetzt auch die Bytefolge wie erwartet auf MOSI 
gesendet, jedoch kommt über MISO keine Antwort (immer nur 0xFF).


Daraus ergeben sich nur wieder neue Fragen. Zum einen warum sendet die 
Libary verschiedene Anfragen auf dem Gleiche Controller (beides ESP32). 
Die Wichtigste Frage ist aber warum antwortet der W5500 auf dem PCB 
nicht, auch wenn er die richtige Anfrage bekommt?

von Oliver .. (agent47)


Lesenswert?

Ich habe nun noch einmal einiges an Energie in die Fehlersuche gesteckt. 
Leider ist der Grund für die ausbleibenden Antworten nicht zu finden. 
Die Anfragen lassen sich mit dem Logic Analyzer Nachvollzienen und 
werden auf fertigen W5500 Boards auch mit Antworten belohnt. Auch mit 
dem Oszillosop ist nichts außergewöhnliches fest zu stellen (Signalform 
nicht Grundlegend anders als bei fertigen Boards).

Da nun klar war, das ich so einige Design Fehler auf dem PCB habe und 
diese nicht nur beim Netzwerkchip. Habe ich mich dazu entschieden ein 
neues Board zu fertigen und mit entsprechenden Messpunkten aus zu 
statten. Dabei wollte ich mich natürlich so weit wie möglich an die 
vorher verletzten Design Richtlinien halten.

Das Board kam nun vor etwa zwei Wochen. Nach intensiven Tests aller 
Komponenten, funktioniert nun (fast) alles.
Der W5500 ist Einsatzbereit und hat auch kaum fehlerhafte Pakete zu 
verzeichnen. Den CP2102N habe ich durch einen CP2104 ersetzt, dieser 
funktioniert nun auch Einwandfrei. Den FRAM habe ich nun direkt vom 
Platinenhersteller mit auflöten lassen, auch hier funktioniert nun 
alles. Die FRAM die ich einzeln aus China bestellt habe, sind wohl 
defekt oder Fälschungen.

Bis auf einen kleinen Fehler den ich schnell finden und beheben konnte, 
funktioniert nun alles.

Zusammenfassend möchte ich mich auch noch einmal bei euch bedanken. Ich 
habt nicht unerheblich zum finden der Fehler beigetragen.

: Bearbeitet durch User
von jo mei (Gast)


Lesenswert?

Oliver .. schrieb:
> und hat auch kaum fehlerhafte Pakete zu verzeichnen

Bei solch einer Aussage klingeln bei mir die Alarmglocken.

Wie stellst du "fehlerhafte Pakete" fest? Wie ist das zu verstehen?

Fehler auf der Netzwerk-Ebene werden ja vom internen TCP korrekt
abgehandelt sodass der User nichts davon mitkriegt.

Wenn du aber Fehler bei der SPI-Übertragung findest dann wär's
schlimm ...

von Oliver .. (agent47)


Lesenswert?

jo mei schrieb:
> Wie stellst du "fehlerhafte Pakete" fest? Wie ist das zu verstehen?

Auf TCP/IP Ebene. Im SPI ist mir noch nichts derartikes aufgefallen, 
daher habe ich da noch nicht weiter geschaut.

von jo mei (Gast)


Lesenswert?

Oliver .. schrieb:
> Auf TCP/IP Ebene.

Das versteh ich eben nicht. Vom W5500 bzw. der TCP-Implementierung
bekommt man ein Paket oder man bekommt keines. Wenn man ein Paket
sendet dann kommt es entweder beim Empfänger an oder nicht, aber
in beiden Fällen (Recive oder Transmit) bekommt man keine fehler-
haften Pakete zugestellt. Ist ja auch der tiefere Sinn von TCP.
Im übrigen gibt es ja nicht wirklich Pakete sondern eher zu-
fällig zusammengesetzte Paket-Schnipsel. TCP ist ein Stream.

Oliver .. schrieb:
> und hat auch kaum fehlerhafte Pakete zu verzeichnen.

Kannst du das nochmal näher erklären? Vielleicht hast du die
Daten-Fragmentierung von TCP noch nicht richtig verstanden, denn
Paketierung auf User-Ebene findet ja nicht statt.

Nochmal: TCP ist ein Stream.

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.