Hallo ich habe grad eine kleine Platine zusammengelötet und versucht damit eine SD-Karte auszulesen. Eigentlich nichts besonderes. Der Aufbau war mir klar, die Bibliothek dazu läuft schon auf einem anderen Board einwandfrei... Aber nun funktioniert nichts. Ich kann einfach die Karte nicht "Initialisieren". Die Ausgänge des Controllers sind mittels Spannugnsteiler(680 Ohm, 475 Ohm) auf ca 3,3 Volt runter (was schon auf der alten Platine gut lief) und MISO ist direkt am Pin des µCers. Leider hatte ich diesmal keinen Spannungswandler zur Hand und daher ist auch VCC der Karte mittels Spannungsteiler auf ca. 3,3V genähert. Um genau zu sein auf 3,5V. Die Karte an sich sollte ja bis 3,6V aushalten. Aber wie gesagt tut sich garnichts. Woran kann das liegen. Das einzige, was an der Platine anders ist, ist VCC der Karte. Liegts wirklich daran??? Ach ja, als Karte verwende ich gerade eine 1GB UltraII. Hatte nichts einfacheres zur Hand.
Spannuungsteiler für die Versorgung?? Klappt niemals. Spendier einen 3,3V-Regler.
Was funktioniert genau nicht? Schaltplan? Warum nimmst nicht einfach einen 3,3V Regler und behebst die Spannungsteilerproblematik? Wenn sich die beiden Schaltungen nur in der Versorgung der SD-Karte unterscheiden, dann liegt es genau da dran.
Naja, es besteht ja noch die Möglichkeit, dass ich im Quellcode Mist gebaut habe. Man weiß sowas ja nie. (Zumindest ich nicht ;)
> Naja, es besteht ja noch die Möglichkeit, dass ich im Quellcode Mist > gebaut habe. Und das soll jemand ohne den Quellcode diagnostizieren?
@Gast Naja, ich bin einfach davon ausgegangen, da ich die Bib schon in einem anderen Projekt im Einsatz hatte und als erstes natrülich auch bei deren Konfiguration nach Fehlern suchte, dass der Fehler zu 99% in der Schaltung liegt. Daher auch meine Frage. Aber hier dann ein Codeschnippsel:
1 | int main (void) |
2 | {
|
3 | wdt_enable(WDTO_1S); |
4 | uart0_init(); |
5 | uart0_puts("initialisiere Hardware"); |
6 | init_hardware(); |
7 | |
8 | char *inbuff = malloc(20*sizeof(char)); |
9 | |
10 | uart0_puts("Lese SD-Karte"); |
11 | |
12 | MMC_IO_Init(); |
13 | |
14 | if(GetDriveInformation() != F_ERROR){ |
15 | uart0_puts("...SD erfolgereich"); |
16 | if(Chdir("/") == F_ERROR){ |
17 | Fopen("muster01.csv",F_READ); |
18 | Fread(inbuff,20); |
19 | Fclose(); |
20 | }
|
21 | uart0_putcn(inbuff,20); |
22 | }
|
23 | else
|
24 | {
|
25 | uart0_puts("...nicht erfolgreich"); |
26 | }
|
27 | |
28 | uart0_puts("betrete Endlosschleife"); |
29 | while(1) |
30 | {
|
31 | wdt_reset(); |
32 | }
|
33 | return 1; |
34 | }
|
> Verdammt. Warum nicht? Was passiert da dann?
BELASTETER Spannungsteiler?!
;-)
im Moment, wo du was an der Karte tust (Schreiben, lesen) brauchst du so 50...100mA. Und nun schau mal, was dein Spannungsteiler hergibt. Und falls er das schafft - wieviel Spannung ist dann noch da? Kurz: das ist Murks und funktioniert nicht.
ein paar Dioden in Reihe - anstelle des Widerstand's nach + ,würden es zur Not auch erst mal tun. Als Dauerlösung aber auch nicht zu empfehlen. Sascha
Hallo, mal schnell eine Frage wegen der SD-Karten Spannungsversorgung. Ich will auf einem Board, wo ein LPC2468 sitzt, einen SD-Kartenslot vorsehen. Der Mikrocontoller erlaubt ja über den MCIPWR-Pin das ein- und ausschalten der Spannungsversorgung der SD-Karte; genau sowas möchte ich auch in meinem Gerät einbauen - es soll so viel Strom wie möglich gespart werden. Also - der SD-Karte den Saft abdrehen, wenn sie nicht gebraucht wird. Jetzt die Frage: Darf ich die 3.3 Volt, die die Karte braucht, mit einem PNP-Transistor schalten? Ich dachte mir das in etwa so wie im Bild. Über dem Transistor gehen dann ja ein paar mV verloren, die dazu auch noch abhängig vom Stromverbrauch der Karte sind - und die Frage ist, ob es so noch funktioniert, oder ob man das besser anders macht. Warum ich gerade diese Transistoren nehme: weil ich die grade da habe. Warum der Basiswiderstand vom NPN 4k7 ist: ich benutze eh ein Widerstandsnetzwerk da irgendwo in der Nähe, wo noch diese 4k7 frei sind. Gruss
Die paar mV über die CE-Strecke, auch wenn sie marginal lastabhängig sind, jucken die Card nicht. Dimensionierung geht auch OK. Gruß Frank
Die sauberste Lösung wäre ein Regler mit Shutdown, z.B. LP2951. Die einfache Basterlösung wäre ein Spannungsteiler der vom µC Ein/ausgeschaltet wird, und dann ein N-Darlington Transistor (oder komplementär Darlington) dahinter.
Frank, danke. Ich habe es grade eben simuliert, mit einem angenommenen Laststrom von 300 mA. Dann kommen noch gut 3.1 V raus. Das reicht für die SD-Karte oder? Ulrich, der LP2951 kann 100 mA. Reicht das? Ich meine irgendwo gelesen zu haben, dass einzelne Spitzen auch > 100 mA sein können.
Die Spezifikation (zumindest eine von Kingmax) sagt 2,7..3,6V "Voltage range for operation". Stromspitzen/Transienten werden gepuffert, die 300mA sind hoch angesetzt, also alles in Butter und wird so in der Art bei einem Produkt von uns eingesetzt. Gruß Frank
Hallo Frank, super Sache, vielen Dank! Genau so baue ich es jetzt auch auf (gibt am Schluss dann auch ne LP). Gruss
Kleiner Nachtrag: Wenn Du Vcc wegschaltest, musst Du auch alle Leitungen vom µC zur SD-Card auf Low schalten, weil sonst die Klemmdioden der Karte nach Vcc leitend werden...
>musst Du auch alle Leitungen >vom µC zur SD-Card auf Low schalten, Besser: Eingang tristate.
Ich hoffe, das macht der Controller von selbst (es gibt extra ein Register, wo man der Card den Saft abstellen kann - dann nehme ich mal an, dass er auch die Pins tri-stated....)
Von dem Saftabdrehregister habe ich noch nichts gehört, aber viele Karten gehen in den Power-Down, wenn /CS längere Zeit inaktiv ist.
>dann nehme ich mal an, dass er auch die Pins tri-stated.
Ich nehme nicht an, dass man ausgerechnet bei diesen Bausteinen, die ja
besonders viel in die Hand genommen werden an den Schutzdioden gespart
hat.
Das Tri-Staten hat also auf diese Strukturen keinen Einfluss und ändert
nichts am Klemmdiodenproblem.
Gruss
Axel
Auch zu Empfehlen: Direkt an den VCC-Pins gegen GND-Pins des Kartenslots eine Kombination aus 10µF und 0,1µF Kerkos anlöten. Die Stromaufnahme beim Lesen und Schreiben ist kurzzeitig sehr hoch (Spitzen bis 2-3A ).
>Die Stromaufnahme >beim Lesen und Schreiben ist kurzzeitig sehr hoch (Spitzen bis 2-3A ). Nu mach mal halblang. Kerkos an der Karte sind sowieso Pflicht, wie an jedem anderen CMOS-Bauteil auch.
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.