Hallo, ich nutze derzeit die MMC-/SD-Karten-Bibliothek von Elm Chan auf einem ATmega (5V, 16MHz). Die SD-Karte läuft unter 3V, die Pegelwandlung übernimmt ein HC4050. Alles funktioniert bestens, nur nach einem Reset egal welcher Art (WDT, Hard-Reset) kann die Karte nicht mehr initialisiert werden. Klemme ich dann die Stromversorgung der gesamten Schaltung ab und wieder an, funktioniert wieder alles tadellos. Das Ganze macht den Eindruck, als wäre die SD-Karte in einem internen Status, aus dem sie nicht mehr initialisiert werden kann. Ist es möglich die SD-Karte per Kommando zu resetten? Das Ganze ließe sich natürlich lösen, indem man die Stromversorgung der Karte per Transistor/FET bei einem Reset ausschaltet. Diese Möglichkeit habe ich aber nicht. Hat jemand einen Tipp zur Problemlösung parat? Gruß Sven
Gast
#2433103
>nur nach einem Reset >egal welcher Art (WDT, Hard-Reset) kann die Karte nicht mehr >initialisiert werden. WDT und Hard-Reset sind eine super Idee bei einem FAT Dateisystem. Da kannst du auch gleich die Karte komplett formatieren. Das geht sowas von in die Hose;) >Hat jemand einen Tipp zur Problemlösung parat? Keine SD Karte mit FAT benutzen. Besser gar keine SD Karte benutzen.
Es sind zum Zeitpunkt des Resets alle Dateien geschlossen, also sollte es keine Probleme geben.
Gast
#2433119
>Es sind zum Zeitpunkt des Resets alle Dateien geschlossen, also sollte >es keine Probleme geben. Und woher weisst du das? Deine Karte reagiert genervt. Da ist also irgendwas nicht in Ordnung. Du hast den Schreib oder Lesevorgang unterbrochen. Bei einem Hard-Reset kannst du eigentlich nur noch beten das die Karte schon fertig war. Sonst gibt es Gurkensalat.
Gast
#2433138
kommando zum resetten ist CMD0
holger schrieb: >>Es sind zum Zeitpunkt des Resets alle Dateien geschlossen, also sollte >>es keine Probleme geben. > > Und woher weisst du das? Deine Karte reagiert genervt. Da ist also > irgendwas nicht in Ordnung. Du hast den Schreib oder Lesevorgang > unterbrochen. Bei einem Hard-Reset kannst du eigentlich nur noch > beten das die Karte schon fertig war. Sonst gibt es Gurkensalat. Ich bin mir der Gefahren bewusst, darum soll es also hier nicht gehen. Ich kann GARANTIEREN, dass zum Reset-Zeitpunkt kein Zugriff auf die SD-Karte erfolgt und alle Dateien geschlossen sind.
Gast
#2433155
>Ich bin mir der Gefahren bewusst, darum soll es also hier nicht gehen. >Ich kann GARANTIEREN, dass zum Reset-Zeitpunkt kein Zugriff auf die >SD-Karte erfolgt und alle Dateien geschlossen sind. Ok, das ist doch mal ne Aussage. Also ich kann zB einen AVR per ISP programmieren und die SD Karte wird dann ohne ausschalten nach dem programmieren nach Reset des AVR wieder initialisiert. Keine Probleme. Tja, wo ist jetzt dein Problem?
einGast schrieb: > kommando zum resetten ist CMD0 Das wird in der Bibliothek von Elm Chan gemacht:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
und
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
Allerdings gibt send_cmd(CMD0, 0) nach einem Reset nicht 1, nach Vcc off/on allerdings doch 1 zurück. Wie ist dieses zu erklären? Das hat ja auch nichts mit höheren Ebenen (FAT), sondern mit der Phy-Ebene zu tun...
Gast
#2433178
>Allerdings gibt send_cmd(CMD0, 0) nach einem Reset nicht 1,
Bla, bla.
Häng mal einen Pullup an CS der Karte und einen
Pullup an MISO.
Gast
#2433179
wird die Card Select Leitung richtig angesteuert?
holger schrieb: >>Allerdings gibt send_cmd(CMD0, 0) nach einem Reset nicht 1, > > Bla, bla. Auf solche Antworten kann ich gerne verzichten. einGast schrieb: > wird die Card Select Leitung richtig angesteuert? Ich habe die entscheidende Sektion der Schaltung einmal angehängt. Wieso sollte ein Pullup an die /CS-Leitung, diese wird doch direkt von dem µC angesteuert?
Gast
#2433332
Bei meiner änlich aussehenden Variante sieht das mit dem CMD0 so aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Die Function release_spi() macht nur ein dselect() gefolgt von 8 Dummy-Clocks, also einem dummy SPI Zyklus. Die SD Karte will u.U. einfach nur genug Daten via SPI haben, damit sie den vor dem Reset eventuell noch angefangenen Befehl abarbeiten kann.
Besten Dank für die Antworten. Ich habe jetzt einen anderen Busteilnehmer als Fehlerquelle ausmachen können. Das Problem hat sich hiermit erledigt. Gruß Sven
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
