Hallo! Ich habe hier folgendes Problem: Auf einer kleinen Platine habe ich einen SD-Kartenslot. Die Platine schließe ich über ein Flachbandkabel an das ansteuernde Gerät an. Mit einem kurzen Kabel geht das auch ohne Probleme. Nehme ich ein längeres Kabel, so bricht die Übertragung von Dateien nach kurzer Zeit ab. Ich habe mir die Signale mit einem Oszi angesehen und kann keinen Unterschied bei verschiedenen Kabellängen erkennen. Trotzdem tritt das genannte Phänomen auf. Jetzt bin ich auf der Suche nach Möglichkeiten, um das Problem zu beheben. Was kann man da machen? Vielen Dank!
Leider sind die Angaben recht dürftig, da hilft nur raten. > kurzen Kabel... > längeres Kabel... mm, m, km? > kann keinen Unterschied bei verschiedenen Kabellängen erkennen. Wie und wo gemessen? Flankensteilheit? Wie sehen die Signale in der zeitlichen Relation aus? > Was kann man da machen? Screenshot vom Oszi posten.
Hast Du an der offenen Leitung gemessen? Hast Du schon mal davon gehört, dass in langen Leitungen Signal reflektiert werden? Da können Abschlusswiderstände Wunder bewirken.
Mit einem 7,6 cm langen Kabel geht es, mit einem 21 cm Kabel, das ist die Länge die gebraucht wird, geht es nicht mehr. Als Anhang Screenshots der Dat_0 Leitung der SD-Karte. Gelb wurde auf der SD-Platine gemessen, Blau auf dem Mainboard. Verwendet habe ich dafür das 21 cm Kabel. Auf dem unteren Screenshot habe ich mal die Anstiegszeit für das Blaue Signal markiert. Sie liegt bei ca. 42ns (10% - 90%).
OK aus dem Artikel entnehme ich, dass ich bei eine Anstiegszeit von 42ns erst ab einer Länge von über einem Meter eine Terminierung brauchen würde. Kann natürlich sein, dass ein anderes Signal schneller ansteigt, das werde ich nochmal prüfen, vor allem das Clock Signal. Bei dem Flachbandkabel handelt es sich um ein 14-poliges. Belegung: 1 n/c 2 n/c 3 n/c 4 n/c 5 CD# 6 WP# 7 DAT1 8 DAT0 9 CLK 10 CMD 11 DAT3 12 DAT2 13 GND 14 3V3
1 n/c 2 n/c 3 n/c 4 n/c Verschenkte Leitungen, wie schrecklich. Da hätte man wunderbar einen Schirm um CLK mit bauen können.
14 Leitungen, sinnvoller wäre das gewesen: 01 GND 02 CD# 03 GND 04 WP# 05 GND 06 DAT1 07 GND 08 DAT0 09 GND 10 CLK 11 GND 12 CMD 13 GND 14 DAT3 15 GND 16 DAT2 17 GND 18 3V3 19 GND 20 (eine Seite komplett ac-Masse) Ob GND oder +UB ist egal, da beide wechselspannungsmäßig Masse sind..
Naja die Leitung und die Belegung waren vorgegeben, von daher... Zurück zum Problem: Was kann man machen um es zu lösen? Ich denke es liegt an der Kabellänge aber welche Möglichkeiten hat man jetzt?
> Als Anhang Screenshots der Dat_0 Leitung der SD-Karte. Was fuer eine Bandbreite hat dein Oszi? ICh glaub das beluegt dich naemlich. :-D > Ich denke es liegt an der Kabellänge aber welche Möglichkeiten > hat man jetzt? Vernuenftige Bustreiber auf beiden Seiten des Kabel und eine Terminierung. > Naja die Leitung und die Belegung waren vorgegeben, von daher... Wenn mein Chef mit so einem Unsinn ankommt erklaere ich dem das physikalische Gesetze fuer jeden gelten. Ausserdem wuerde ich dir dringenst raten CRC einzuschalten. Alles andere unqualifizierter Murks! Olaf
200 MHz, sollte also nicht gelogen haben... Dafür bräuchte man bidirektionale Treiber und ich habe bisher noch keine entsprechenden gefunden. Falls jemand einen kennt immer her damit ;) Das mit dem CRC verstehe ich nicht so ganz, CRC-Codes werden bei einem Filetransfer automatisch vom Betriebssystem geprüft afaik, da kann ich nichts ein- und ausschalten ;)
@Torben K. (torben) >das werde ich nochmal prüfen, vor allem das Clock Signal. Gute Idee. >Bei dem Flachbandkabel handelt es sich um ein 14-poliges. Belegung: Und nur EINE Masse? Mach es wie im Artikel Empfohlen. Leg die restlichen 4 Adern auf Masse, aber VERTEILT über das Kabel. Eine Masse direkt neben CLK. Und an BEIDEN Enden die Massen mit der Schaltungsmasse verbinden. MFG Falk
@Torben K. (torben) >200 MHz, sollte also nicht gelogen haben... Hoffentlich nciht die 20MHz Bandbegrenzung drin gehabt. Wie gemessen? Mit welchem Tastkopf? Ein AVR hat ca. 5ns Anstigeszeit. >Dafür bräuchte man bidirektionale Treiber Braucht man bei 20cm noch nicht. MFG Falk
Nein Begrenzung war nicht drin. Gemessen mit einem kapazitiven Tastkopf. Ich denke für die Datenleitungen, die in beide Richtungen arbeiten, braucht man auch bidirektionale Treiber oder mache ich da jetzt einen Denkfehler?
@Torben K. (torben) >Nein Begrenzung war nicht drin. Gemessen mit einem kapazitiven Tastkopf. ??? Was soll das sein? Meisnt du einen passiven 10:1 Tastkopf? >Ich denke für die Datenleitungen, die in beide Richtungen arbeiten, >braucht man auch bidirektionale Treiber Sicher, die sind aber wahrscheinlich nicht das Problem. ICh tippe auf den Takt und die Steuersignale. MFG Falk
Ja ein passiver Tastkopf, 1:1 in diesem Fall. Wenn du da richtig liegst wären keine bidirektionalen Treiber nötig, stimmt. Die Anstiegszeit des Taktsignals sieht ähnlich wie die des Signals aus.
Die simpelste Lösung ist eine Schere. Wenn noch genug Kabel zum Üben da ist, dann schneidet wenige cm ab und probiert nochmals. Begründung: anderer Wellenwiderstand hat mir schon mehrfach geholfen!
@Torben K. (torben) >Ja ein passiver Tastkopf, 1:1 in diesem Fall. ;-) Wusste ich's doch. Den kannst du getrost für schnelle Messungen vergessen! Der hat so um die 150pF EIngangskapazität und 15 MHz Bandbreite, je nach Typ. Du MUSST mit einem GUTEN 10:1 Tastkopf messen, mind. 250MHz Bandbreite, KURZE Masseverbindung per Ground Sping http://www.mikrocontroller.net/attachment/27280/groundspring.png >Die Anstiegszeit des Taktsignals sieht ähnlich wie die des Signals aus. Du misst die Anstiegszeit des Tastkopfes ;-) MFG Falk
@ oszi40 (Gast) >Die simpelste Lösung ist eine Schere. Wenn noch genug Kabel zum Üben da >ist, dann schneidet wenige cm ab und probiert nochmals. >Begründung: anderer Wellenwiderstand hat mir schon mehrfach geholfen! Dumm nur, dass der längenunabhängig ist ;-) MfG Falk
>Ja ein passiver Tastkopf, 1:1 in diesem Fall.
Prima, also schön die hohe Kapazität vom Tastkopfkabel mit
drangehängt ;) Nimm mal 10:1 das ist besser.
> 200 MHz, sollte also nicht gelogen haben... Wenn das 200Mhz sind dann sollte dein Signal aber gut sein. Andererseits glaube ich nicht das es bei 20cm Kabel ohne Terminierung noch gut sein kann. Entweder dein Tastkopf ist murks, zum Beispiel zu langes Massekabel, oder dein Ossi beluegt dich weil die Fehler nur manchmal auftreten und du nur einen Singleshot siehst. Programmier dir eine Testroutine die immer 0xaa auf die Datenleitung ausgibt, trigger auf CF und schau dir Daten und Clk gleichzeitig an. Und kneif das Massekabel am Tastkopf ab bis es nur noch 1cm lang ist. :-) > Ich denke für die Datenleitungen, die in beide Richtungen arbeiten, SD hat keine biderektionalen Datenleitungen. Es gibt aber unidirektionale in beiden Richtungen. > Das mit dem CRC verstehe ich nicht so ganz, CRC-Codes werden bei einem SD werden ja an Microcontroller normalerweise im SPI-Mode angesprochen und da ist per default CRC ausgeschaltet. Das solltest du einschalten weil es bei so langen Kabeln immer mal vorkommen kann das mal ein Datenblock beschaedigt wird, selbst wenn das nur einmal im Monat ist. > ICh tippe auf den Takt und die Steuersignale. Am schlimmsten ist der Takt, da ja die Signale mit seinen Flanken uebernommen werden. Wuerde ich also mindestens terminieren. Und dazu muss auf beiden seiten des Taktes eine Leitung mit GND/Vcc sein weil sonst die Annahme das die Leitung 100Ohm haben koennte nicht stimmt. Aber vorher sollte man erstmal die Messtechnik optimieren damit man sehen kann wie schlecht das Taktsignal ist, dann hat man auch ein AHA-Erlebnis wenn es danach gut aussieht. Olaf
So mit 10:1 sieht das ganze schon anders aus. Mir war nicht bewußt dass die Bandbreite mit dem Tastverhältnis geändert wird, wieder was gelernt ;) Da sehe ich eine Anstiegszeit von 3,2 ns und ich denke die wird immer noch höher sein als die tatsächliche, da ich ja nur ein 200 MHz Oszi zur Verfügung habe. Ich werde es mal mit einer Terminierung versuchen.
>das ganze schon anders aus.
Poste mal noch ein Foto als Vergleich
Hat funktioniert, mit Terminierung gehen die Übertragungen. Ich weiß zwar nicht ob die Terminierung optimal ist, da ich den Innenwiderstand der GPIOs nicht kenne, aber ich bin mal von 50 Ohm ausgegangen und habe noch 100 Ohm in die Leitung gemacht, für engenommene 150 Ohm des Flachbandkabels - und siehe da - es geht. Als Anhang noch die neue Aufnahme der Anstiegsgeschwindigkeit für alle interessierten.
Der Überschwinger ist entweder eine falsch angeschlossene Masseleitung oder ein Hinweis auf eine falsche Terminierung. Ist der Screenshot jetzt mit oder ohne Terminierung? Wo gemessen? Aber insgesamt: man hat schon schlimmere Signale gesehen.
Leg mal je 50 Ohm in die Signalleitungen. Und zwar zwischen Treiberbaustein und Leitung. Das hilft immer ganz gut.
Lothar Miller wrote: > Der Überschwinger ist entweder eine falsch angeschlossene Masseleitung > oder ein Hinweis auf eine falsche Terminierung. Ich habe leider keinen Tastkopf mit einer extrem kurzen Masseleitung, von daher kann ich nichts ausschließen. > Ist der Screenshot jetzt mit oder ohne Terminierung? > Wo gemessen? Der ist noch ohne Terminierung am Ende des 21cm Kabels
> Der ist noch ohne Terminierung am Ende des 21cm Kabels. Ja, dann könnte eine Terminierung helfen. Als kleines Beispiel aus der Praxis im Anhang ein Bild einer Busleitung (AD0) zu einem SJA1000, Länge ca 20cm, ohne Serienwiderstand Und ....
... das Ganze mit einem 100 Ohm Serienwiderstand. Schön, nicht? EDIT: Der SJA1000 hat in beiden Fällen funktioniert. Ist eben ein zäher Sack ;-)
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.