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?
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
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...
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?
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.
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
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.
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?
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...
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?
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
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.
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.
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.
Peter schrieb: > Bitte sehr ... Poste doch noch die Boardfiles. Sonst müssen wir Bildersuche machen anstatt die Leitungen im Editor zu verfolgen...
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
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?
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
Auch Karl, ein anderer schrieb: > Sdio != Spi. Und dort ist die "Flankentoleranz" dann im Picosekunden-Bereich? Na Super!
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.
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.
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
Also wenn das mit so einer Konstruktion bei 33 MHz klappt, klappt das auch mit einem etwas krummen PCB-Layout...
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.
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
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
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.
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...
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.