STM32: uSD-Layout schafft nur 16 MHz

Gast #6214447
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?
Angehängte Dateien:
#6214483
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
#6214491
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...
Gast #6214512
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.
Gast #6214516
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.
Gast #6214576
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
Gast #6214621
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
Gast #6214693
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.
Gast #6214720
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.
Gast #6214724
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).
Persönliche Seite #6214741
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.
Gast #6214767
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.
Gast #6214796
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.
Gast #6215013
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.
Gast #6215112
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.
Gast #6215126
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.
#6215244
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
Gast #6215304
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.
Gast #6215317
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
Gast #6215328
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.
Gast #6215556
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
Gast #6215560
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
Gast #6215709
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren