Forum: Mikrocontroller und Digitale Elektronik STM32: uSD-Layout schafft nur 16 MHz


von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang befindet sich mein aktuelles Platinen-Layout für die 
Verbindung zwischen STM32F7 und uSD-Slot. Leider funktioniert das Layout 
bei einem SDMMC-Takt von 48 MHz nur mit einem konfigurierten Teiler von 
1 (was m.W. einem effektiven Teiler von 3 entspricht) zuverlässig.

Die maximale Längendifferenz der Leitungen beträgt 4,3 mm.

Wieso erreicht das Layout keinen höheren Takt? Was würdet ihr an dem 
Layout ändern? Ist die Verwendung von S-Schleifen OK? Ist die 
unterschiedliche Platzierung der Widerstände OK?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Ohne, dass ich jemals was mit einem STM32 gemacht haette: Ich wuerde 
einen kleinen Widerstand (~22 Ohm) in die Clockleitung reinbauen und die 
verschiedenen anderen Leitungen nicht ganz so dicht aufeinanderhocken 
lassen. Da ist doch viel Platz, um die Leitungen nicht so dicht an dicht 
zu verlegen.
Ein paar Block-Cs an der Versorgung werden wohl auch nicht schaden.

Gruss
WK

von Jim M. (turboj)


Lesenswert?

Ich sehe jede Menge Pullups aber keinen Abblock Kondensator an VDD.

Außerdem will man bei SD Karten die Stromversorgung unterbrechbar 
gestalten  - denn das ist die einzige Möglichkeit für einen Reset bei 
Fehlern.

Peter schrieb:
> bei einem SDMMC-Takt von 48 MHz nur mit einem konfigurierten Teiler von
> 1 (was m.W. einem effektiven Teiler von 3 entspricht)

Ohne das Manual gelesen zu haben würde ich eher einen Teiler von 2 und 
damit 24MHz vermuten. Oszi zum Ausmessen von SCLK vorhanden?

An welcher Stelle treten Probleme auf? SD Karten wollen ja erstmal mit 
100-400kHz initialisiert werden, weil sie als Open Drain aus dem POR 
kommen.

Ich sehe übrigens dem Layout nicht an ob SD oder SPI Protokoll gefahren 
wird. SPI geht nur bis 25 MHz...

von Andi (Gast)


Lesenswert?

Lagenaufbau?

Warum kuscheln sich die Leitungen so aneinander?
CAP an der VCC der SD-Card fehlt.
VCC/GND-Leitungen: warum so dünn, wie schaut die Anbindung in den 
anderen Lagen aus? Planes?

von Peter (Gast)


Lesenswert?

Jim M. schrieb:
> Ich sehe jede Menge Pullups aber keinen Abblock Kondensator an VDD.

Guter Punkt, den habe ich tatsächlich nicht.

> Ohne das Manual gelesen zu haben würde ich eher einen Teiler von 2 und
> damit 24MHz vermuten. Oszi zum Ausmessen von SCLK vorhanden?

Der Teiler läßt sich in 1er-Schritten setzen und steht jetzt auf 1, +2 
wird automatisch gemacht.

> An welcher Stelle treten Probleme auf? SD Karten wollen ja erstmal mit
> 100-400kHz initialisiert werden, weil sie als Open Drain aus dem POR
> kommen.

Das macht alles der STM32. Das Problem ist, dass bei zu hohem Takt die 
Karte nicht gemounted werden kann, d.h. f_mount() hängt ewig, weil keine 
Antwort kommt.

> Ich sehe übrigens dem Layout nicht an ob SD oder SPI Protokoll gefahren
> wird. SPI geht nur bis 25 MHz...

SD.

von Dergute W. (derguteweka)


Lesenswert?

Peter schrieb:
> Guter Punkt, den habe ich tatsächlich nicht.

Uaaaaa - dann bapp' doch mal provisorisch einen auf die Unterseite an 
die Durchkontaktierungen.

Gruss
WK

von Peter (Gast)


Lesenswert?

Andi schrieb:
> Lagenaufbau?
>
> Warum kuscheln sich die Leitungen so aneinander?

Da ist halt noch mehr Zeug auf der Platine. Ich habe das nur weg 
gemacht, damit es nicht zu sehr verwirrt.

> CAP an der VCC der SD-Card fehlt.

Ja.

> VCC/GND-Leitungen: warum so dünn, wie schaut die Anbindung in den
> anderen Lagen aus? Planes?

Ja, kann ich dicker machen. Die Leitungen zum STM32 kann ich wegen dem 
nötigen Abstand zu anderen Leitungen nicht dicker machen, und ich habe 
(fast) überall die gleiche Stärke verwendet.

Was meinst Du mit Anbindung an andere Lagen?  Vdd und Vss sind in den 
inneren Lagen, daher die Vias. Insgesamt sind es 4 Layer.

von Andi (Gast)


Lesenswert?

Peter schrieb:
> Was meinst Du mit Anbindung an andere Lagen?  Vdd und Vss sind in den
> inneren Lagen, daher die Vias. Insgesamt sind es 4 Layer.

Warum fährst du dann mit der VDD Leitung erst einen halben km bevor du 
mit einem Via abtauchst?

von Andi (Gast)


Lesenswert?

Peter schrieb:

> Da ist halt noch mehr Zeug auf der Platine. Ich habe das nur weg
> gemacht, damit es nicht zu sehr verwirrt.

Und die anderen kuscheln auch so lieb herum?
Zeig mal alle Leitungen...

von Peter (Gast)


Lesenswert?

Andi schrieb:
> Warum fährst du dann mit der VDD Leitung erst einen halben km bevor du
> mit einem Via abtauchst?

Weil da andere (Bus-)Leitung queren und ich erst da hinten ein Via rein 
bekomme. Ist ja auch nicht wirklich ein Problem, oder?

von Olaf (Gast)


Lesenswert?

Kein Schaltplan? ---> doof

kein vollstaendiges Layout --> doppelt doof

kein Oszi ohne Pigtail an die Clockleitung gehalten --> auch doof

keine vernuenftige Abblockung --> ganz doof

naehe der Leiterbahnen, eher unkritisch. Das sollte SPI schon abkoennen. 
Ueber vernuenftigen Busabschluss nachdenken. Wenn du 48Mhz clockspeed 
willst dann muss deine Schaltung fuer 300Mhz gut sein.


Olaf

von Karl (Gast)


Lesenswert?

Peter schrieb:
> Da ist halt noch mehr Zeug auf der Platine. Ich habe das nur weg
> gemacht, damit es nicht zu sehr verwirrt.

Mit anderen Worten: Das Bild ist völlig nutzlos.

von Peter (Gast)


Lesenswert?

Andi schrieb:
> Und die anderen kuscheln auch so lieb herum?
> Zeig mal alle Leitungen...

Wenn Du meinst, dass die weiter auseinander müssen, dann kann ich das 
Layout natürlich dahingehend ändern.

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Bitte sehr ...

von OMG (Gast)


Lesenswert?

Peter schrieb:
> Bitte sehr ...

Diese Schlangenlinien sind völlig für die Katz. Das macht man
um wirklich hochfrequente Signale differentiell führen möchte
um deren +- Flanken nicht gegeneinander zu verschieben.

von Designer (Gast)


Lesenswert?

Peter schrieb:
> Bitte sehr ...

Poste doch noch die Boardfiles. Sonst müssen wir Bildersuche machen 
anstatt die Leitungen im Editor zu verfolgen...

von Johannes S. (Gast)


Lesenswert?

Woher weiß man denn das es nicht an der Software liegt?

von Test (Gast)


Lesenswert?

Also meiner Erfahrung nach ziehen SD-Karten bis 1A peak, ohne größere 
Pufferkapazitäten gibt es je nach Karte Probleme.

Hast du mal andere Karten probiert? Welchem Standard folgt deiner Karte 
oder soll sie folgen. Kannst du ein Timingproblem ausschließen?

Kannst du ein Oszillogramm von Clock vs. Daten machen? (Kurze Massefeder 
oder besser active probe)

Wie sieht die Versorgungslage aus? Durchgehend oder Flickenteppich? Wie 
sieht die Masselage aus? Liegt die Masselage direkt unter den 
SDIO-Leitungen?

Für SDIO sind 50R mit 100mil Längentoleranz vorgesehen. Für Clock vs. 
Daten+Cmd wird immer wieder die 2:1 Daumenregel für den Abstand genannt. 
https://www.cypress.com/file/298691/download

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Bei mir funktioniert ein STM32F407VG mit 33,6 MHz (mehr kann er dank 
Silicon-Bug nicht) über eine wilde fliegende Verdrahtung mit einer 
µSD-Karte. Ich halte ein Layout-Problem daher für unwahrscheinlich. Hast 
du die Driver Strength (DSR Register) und den High Speed Mode (CMD6) 
eingestellt?

von Johannes S. (Gast)


Lesenswert?

und wird DMA verwendet? Meine Erfahrung mit dem Lesen/Schreiben der 
Fifodaten war, das Polling zu langsam ist und Fifo over/underrun Fehler 
auftraten. Mit DMA passiert das nicht.

von Peter (Gast)


Lesenswert?

OMG schrieb:
> Diese Schlangenlinien sind völlig für die Katz. Das macht man
> um wirklich hochfrequente Signale differentiell führen möchte
> um deren +- Flanken nicht gegeneinander zu verschieben.

Die S-Linien sollen die Länge der Leiterbahn erhöhen, damit alle 
ungefähr gleich lang sind.

von Peter (Gast)


Lesenswert?

Johannes S. schrieb:
> und wird DMA verwendet? Meine Erfahrung mit dem Lesen/Schreiben der
> Fifodaten war, das Polling zu langsam ist und Fifo over/underrun Fehler
> auftraten. Mit DMA passiert das nicht.

Ja.

von Peter (Gast)


Lesenswert?

Niklas G. schrieb:
> Hast
> du die Driver Strength (DSR Register) und den High Speed Mode (CMD6)
> eingestellt?

Das finde ich beides nicht in der Referenz. Die CMDs fangen erst bei 
Nummer 23 an. Und ist DSR ein allgemeines oder ein SDMMC/SDIO-Register?

In CubeMX lassen sich nur wenige Dinge konfigurieren, dort habe ich 
insb. HW Flow Control und Clock Power Save deaktiviert.

von Peter (Gast)


Lesenswert?

Test schrieb:
> Hast du mal andere Karten probiert? Welchem Standard folgt deiner Karte
> oder soll sie folgen. Kannst du ein Timingproblem ausschließen?

Ich habe drei verschiedene Karten ausprobiert, darunter eine Samsung 
Pro, alle SDHC. Welchen Standard meinst Du?

> Kannst du ein Oszillogramm von Clock vs. Daten machen? (Kurze Massefeder
> oder besser active probe)

Ja, kann aber ein wenig dauern.

> Wie sieht die Versorgungslage aus? Durchgehend oder Flickenteppich? Wie
> sieht die Masselage aus? Liegt die Masselage direkt unter den
> SDIO-Leitungen?

Durchgehend, und ja (wie auch Vdd).

von Peter (Gast)


Lesenswert?

Johannes S. schrieb:
> Woher weiß man denn das es nicht an der Software liegt?

Weiß man leider nicht. :-) Aber ein besseres Beispiel wurde ja genannt.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Peter schrieb:
> Das finde ich beides nicht in der Referenz.

Das DSR ist in Kapitel 6.5 der SD-Spezifikation zu finden. Das High 
Speed Aktivieren in 4.3.10.3.

Peter schrieb:
> Die CMDs fangen erst bei
> Nummer 23 an.

Und wie initialisierst du dann deine Karte, so ganz ohne CMD8? :-D

Peter schrieb:
> Und ist DSR ein allgemeines oder ein SDMMC/SDIO-Register?

Ein Register auf der SD-Karte natürlich.

Peter schrieb:
> In CubeMX lassen sich nur wenige Dinge konfigurieren

Ich hab das selbst kodiert, kA wie das mit CubeMX geht.

von Peter (Gast)


Lesenswert?

Niklas G. schrieb:
> Das DSR ist in Kapitel 6.5 der SD-Spezifikation zu finden. Das High
> Speed Aktivieren in 4.3.10.3.
> ...
> Ich hab das selbst kodiert, kA wie das mit CubeMX geht.

Verstehe. Aber der ganze Kram wird ja von den STM32-Bibliotheken 
gemacht. Ob gut oder schlecht weiß ich jetzt nicht, aber ich würde da 
ungern rumfummeln.

Der Tipp mit dem Abblockkondensator, plus der anderen Hinweise, hilft 
mir schon weiter.

Am Ende habe ich sowieso nur die Wahl zwischen 48 Mhz und 24 Mhz (oder 
weniger), da die 48 Mhz aus anderen Gründen gesetzt sind.

von OMG (Gast)


Lesenswert?

Peter schrieb:
> Die S-Linien sollen die Länge der Leiterbahn erhöhen, damit alle
> ungefähr gleich lang sind.

Nicht einmal meine Aussage hast du verstanden. Es ist nicht
relevent dass die Leitungen nicht gleich lang sind.

Lass dir dein Leiterplatten-Layout auch von CubeMX generieren,
da kann wenigstens nichts schief gehen und du musst nicht
anfangen zu denken.

von Andi (Gast)


Lesenswert?

OMG schrieb:
> Diese Schlangenlinien sind völlig für die Katz. Das macht man
> um wirklich hochfrequente Signale differentiell führen möchte
> um deren +- Flanken nicht gegeneinander zu verschieben.

Nö, das macht man auch bei single-ended Systemen. Nämlich immer genau 
dann wenn Signale an einer Clock-Flanke übernommen und daher zu diesem 
Zeitpunkt valide sein müssen.

von OMG (Gast)


Lesenswert?

Andi schrieb:
> Nö, das macht man auch bei single-ended Systemen. Nämlich immer genau
> dann wenn Signale an einer Clock-Flanke übernommen und daher zu diesem
> Zeitpunkt valide sein müssen.

Nö. Denn wenn diese Datenübernahme flanken-empfindlich ist
dann ist der SPI Mode falsch eingestellt. Üblicherweise hat
man bei SPI etwa +- eine halbe bis eine Periode Zeit Daten
zu übernehmen.

So einen Schlängel-Käse hab ich bei SPI noch nie gesehen.

Das soll man bei 400MHz DDR machen aber nicht bei 48MHz SPI.

von Auch Karl, ein anderer (Gast)


Lesenswert?

OMG schrieb:
> Nö.

Wlkikiv.
Sdio != Spi.

von OMG (Gast)


Lesenswert?

Auch Karl, ein anderer schrieb:
> Sdio != Spi.

Und dort ist die "Flankentoleranz" dann im Picosekunden-Bereich?

Na Super!

von Haster (Gast)


Lesenswert?

OMG schrieb:

> So einen Schlängel-Käse hab ich bei SPI noch nie gesehen.

Das Problem bei deinen Aussage ist, dass du nicht sachlich argumentieren 
kannst und zudem auch noch gerne andere anpöbelst. Vielleicht kommst du 
wieder auf dieses Forum zurück, wenn du gelernt hast dich wie ein 
Erwachsener zu benehmen.

von -gb- (Gast)


Lesenswert?

Völlig egal ob es schlängelt oder nicht, es sollte in beiden Fällen 
funktionieren. Wenn die Leitungen durch Schlängelungen ähnlich lang 
werden sollte nichts schlechter werden.

von Viktor B. (coldlogic)


Lesenswert?

Es wäre vielleicht gar nicht so verkehrt, die Leitungen etwas weiter 
voneinander zu verlegen und im besten Fall noch gut angebundene 
(Via-Zaun o.Ä.) GND-Leitungen dazwischen zu verlegen, auf jeden Fall um 
die Clk rum. Das Nonplusultra wäre natürlich eine Verlegung auf einer 
der inneren Lagen mit Abschirmung durch GND oben, unten und von den 
Seiten. Ansonsten wäre es ggf. interessant, mit einem 
Spektrumanalysator/SDR zu prüfen, ob der Bus bei 48 MHz Takt viel 
aussendet - die in die Radiowellen gesteckte Energie steht dem Bus nicht 
mehr zur Verfügung

von Niklas G. (erlkoenig) Benutzerseite



Lesenswert?

Also wenn das mit so einer Konstruktion bei 33 MHz klappt, klappt das 
auch mit einem etwas krummen PCB-Layout...

von Andi (Gast)


Lesenswert?

OMG schrieb:
> Andi schrieb:
>> Nö, das macht man auch bei single-ended Systemen. Nämlich immer genau
>> dann wenn Signale an einer Clock-Flanke übernommen und daher zu diesem
>> Zeitpunkt valide sein müssen.
>
> Nö. Denn wenn diese Datenübernahme flanken-empfindlich ist
> dann ist der SPI Mode falsch eingestellt. Üblicherweise hat
> man bei SPI etwa +- eine halbe bis eine Periode Zeit Daten
> zu übernehmen.

In deinem Originalposting hast du nichts von SPI geschrieben sondern 
allgemein nur von differentiellen Leitungen. Und das war falsch, weil es 
eben auch für synchrone parallele Busse gilt.

> So einen Schlängel-Käse hab ich bei SPI noch nie gesehen.
>
> Das soll man bei 400MHz DDR machen aber nicht bei 48MHz SPI.

Einspruch:
Bei DDR soll man es nicht machen, man muss.
Bei SPI kann man es durchaus machen, dient aber nicht der 
Funktionalität.

von Andi (Gast)


Lesenswert?

Viktor B. schrieb:
> und im besten Fall noch gut angebundene
> (Via-Zaun o.Ä.) GND-Leitungen dazwischen zu verlegen, auf jeden Fall um
> die Clk rum.
> Das Nonplusultra wäre natürlich eine Verlegung auf einer
> der inneren Lagen mit Abschirmung durch GND oben, unten und von den
> Seiten.

Na geh, was soll das denn bringen, hallo ... SPI! ...?
Den Abstand der CLK zu den benachbarten Leitungen auf das 5-fache der 
Leiterbahnbreite erhöhen und gut ist es.
Eine durchgehende GND-Plane darunter vorausgesetzt.


Ansonsten wäre es ggf. interessant, mit einem
> Spektrumanalysator/SDR zu prüfen, ob der Bus bei 48 MHz Takt viel
> aussendet - die in die Radiowellen gesteckte Energie steht dem Bus nicht
> mehr zur Verfügung

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Andi schrieb:
> Bei SPI kann man es durchaus machen, dient aber nicht der
> Funktionalität.

Andi schrieb:
> Na geh, was soll das denn bringen, hallo ... SPI! ...?

Das ist kein SPI, sondern der SD-bus, manchmal auch fälschlich SDIO oder 
SDMMC genannt.

: Bearbeitet durch User
von Andi (Gast)


Lesenswert?

Sorry beim vorigen Posting zu früh gesendet...

Viktor B. schrieb:
> Ansonsten wäre es ggf. interessant, mit einem
> Spektrumanalysator/SDR zu prüfen, ob der Bus bei 48 MHz Takt viel
> aussendet - die in die Radiowellen gesteckte Energie steht dem Bus nicht
> mehr zur Verfügung

Du übertreibst gerne? ;)
Einfach messen ob das was an den Signalen anliegt 'sauber' ist.
Mit echten Verlusten auf Grund von Abstrahlung ist nicht wirklich zu 
rechnen. Wohl aber mit Über- und Unterschwingen an den Flanken -> das 
sind in der Regel bei SPI&Co die störenden Faktoren dabei.

von Andi (Gast)


Lesenswert?

Niklas G. schrieb:
> Das ist kein SPI, sondern der SD-bus, manchmal auch fälschlich SDIO oder
> SDMMC genannt.

Ja, sorry, gilt hier aber genauso...

von Chris (Gast)


Lesenswert?

Niklas G. schrieb:
> Also wenn das mit so einer Konstruktion bei 33 MHz klappt, klappt das
> auch mit einem etwas krummen PCB-Layout...

Kann ich zustimmen. Etwas überspitzt würde ich sagen, dass bei 48 MHz so 
ziemlich jede Anbindung der Karte funktionieren würde, selbst mit 
Laborklemmen (zumindest für den Versuchsaufbau). Als wir mal ne 
Krokoklemme am Spektrumanalysator vermessen haben, wurde deren Einfluss 
auch erst ab ~200 MHz sichtbar ;)

Die fehlenden Pufferkondensatoren sehe ich kritischer, die 
obligatorischen 100 nF und dann noch mindestens 20 uF dürfen es gerne 
sein.

Wird während der Karteninitialisierung überhaupt irgendwas erkannt? 
Zeile für Zeile durchsteppen im Debugmodus.

Verwendest du zufällig die HAL-Funktionen? Da gibt es in Kombination mit 
alten SD-Karten (also SD V1.x und nicht SDHC) einen Bug. Siehe z.B. 
hier: 
https://community.st.com/s/question/0D50X0000AU3ZBFSQ3/there-is-still-a-bug-in-hal-sd-driver-code

von Chris (Gast)


Lesenswert?

Peter schrieb:
> unterschiedliche Platzierung der Widerstände OK?

Bei "echten" HF-Signalen würde man die Widerstandspads wirklich direkt 
auf die Leitung legen. In dem gezeigtem Layout gehen so kleine 
Stichleitungen weg, das ist nicht optimal (bei wirklich hohen 
Frequenzen). In deinem Fall aber egal

von Peter (Gast)


Lesenswert?

Chris schrieb:
> Niklas G. schrieb:
>> Also wenn das mit so einer Konstruktion bei 33 MHz klappt, klappt das
>> auch mit einem etwas krummen PCB-Layout...
>
> Kann ich zustimmen.

Das ist mal eine Ansage, mit der ich etwas anfangen kann!

> Die fehlenden Pufferkondensatoren sehe ich kritischer, die
> obligatorischen 100 nF und dann noch mindestens 20 uF dürfen es gerne
> sein.

OK, wird gemacht.

> Wird während der Karteninitialisierung überhaupt irgendwas erkannt?
> Zeile für Zeile durchsteppen im Debugmodus.

Kurz gesagt, es wird auf ein ACK gewartet, was nicht kommt.

> Verwendest du zufällig die HAL-Funktionen? Da gibt es in Kombination mit
> alten SD-Karten (also SD V1.x und nicht SDHC) einen Bug.

Ja, ist aber SDHC.

> Bei "echten" HF-Signalen würde man die Widerstandspads wirklich direkt
> auf die Leitung legen. In dem gezeigtem Layout gehen so kleine
> Stichleitungen weg, das ist nicht optimal (bei wirklich hohen
> Frequenzen). In deinem Fall aber egal

OK, danke.

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.