www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MMC Karten Unterschiede?


Autor: Christian Julius (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich widme mich mal wieder meinem Minirechner und versuche eine gescheite 
MMC Kartenverwaltung aufzubauen, ohne gleich ein FAT System aufsetzen zu 
müssen, was ich für PIC sowieso nicht auftreiben kann.

Als Test habe ich Routinen geschrieben, die nach einem Zufallsprinzip 
Blocks beschreiben, lesen und vergleichen, so schnell wie möglich aber 
mit 250 khz Busrate wegen der Widerstandsteiler vor der Karte. Bei 
höehren Taktungen häufen sich leider die Fehler. Ich fange jeden 
Fehlercode ab, der von der Karte erzeugt werden kann.

Dabei fiel mir auf, dass das Programm was bei der einen Karte 
funktioniert bei einer anderen nur Fehler produzierte. Nach vielen 
Experimenten zeigte sich, dass ich vor JEDEM OpenSingleBlockForWrite 
eine Init Sequenz laufen lassen muss und vor jedem Lesen ebenfalls. Es 
scheint so als würden manche Karten nach Zugriffen einfach auf Idle Mode 
gehen. Leider verliere ich dadurch Zeit beim Zugriff aber die Fehlerrate 
ist 0, jetzt bei allen Karten.

Weiterhin fiel mir auf, dass manche Karten nach Kaltstart des Rechners 
sofort einen erfolgreichen Init duechliefen, bei andere musste ich erst 
mal die Spannungsversorgung programmgesteuert (3.3V Regler mit 
Power-Down-Mode) abschalten, alle Busleitungen low legen und 300ms 
warten und dann nochmal zuschalten, bis sie endlich reagierten. Nervig 
aber leider ist es so.

Kann das jemand so bestätigen?

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ohne gleich ein FAT System aufsetzen zu
> müssen, was ich für PIC sowieso nicht auftreiben kann.

Wieso auftreiben? Selbst ist der Mann. :-P

> Bei höehren Taktungen häufen sich leider die Fehler.

Mit anderen Worten du weisst bereits das deine Hardware Murks ist, 
ignorierst das aber tapfer?
Das Problem wenn man seinen Hintern so nah am Feuer haengt, ist das auch
nicht jede Karte zu 100% gleich am Bus sein muss. Aber das merkst du
ja gerade.

> Ich fange jeden
> Fehlercode ab, der von der Karte erzeugt werden kann.

Du hast also auch CRC eingeschaltet?

> Kann das jemand so bestätigen?

Ich kann dir bestaetigen das sich laengst nicht alle Karten immer gleich
verhalten. Sowohl elektrisch, wie auch was ihre Statemachine angeht.
Du musst das ganze flexibel programieren. Ein Beispiel dafuer sind z.B
die Wartezeiten wo eine Karte 0xff schickt bis sie bereit ist. Einige
Karten schicken sofort ein R1 Token weil sie fertig sind, andere lassen 
sich da durchaus mal ein paar Bytes zeit.
Und wenn da was schief geht ohne das du es merkst, dann haengt bei 
deinem naechsten Befehl vielleicht noch ein halber Datenblock im Puffer 
der Karte.

Olaf

Autor: Christian Julius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Olaf,

in einem hast Du recht: Sobal die 74LV08 Treiber da sind werden die 
eingebaut, diese Mukrserei mit den Widerständen ist Kappes. Aber mann 
wollte ja schnelle Ergebnisse haben. An dem Code finde ich nichts mehr, 
kenne die Spec langsam in und auswendig.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> müssen, was ich für PIC sowieso nicht auftreiben kann.

Welchen PIC benutzt du denn ?

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> An dem Code finde ich nichts mehr,
> kenne die Spec langsam in und auswendig.

Das habe ich auch mal gedacht. Die Erleuchtungen kommen einem erst wenn
man einen ganzen Berg verschiedener Karten zum ausprobieren und 
idealerweise einen Logicanalyzer hat.

Vielleicht noch ein Tip. Wenn es problematisch wird dann bau ich mir 
immer
eine Funktion mit einem FIFO. Dort wird jedes Byte reingeschickt was von 
der Karte kommt.
Sobald das Programm dann steht breche ich es im Debugger ab und schau
mir an was als letztes so ruebergekommen ist. Da kommt dann meisst die 
Erleuchtung.

Ausserdem schau mal auf die Seite von Elm-chan. Der erklaert da irgendwo 
das die Karten im SPI-Mode nicht immer zu 100% mit einem der vier 
moeglichen SPI-Modes kompatibel sind. Das ist Prozessorabhaengig und
haengt sehr vom Timing ab.

Olaf

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>// Sendet CMD1 wiederkehrend an die Karte
>if(++i >= 50)
>{
>  f_mmc_Error = TRUE;
>  mmc_ErrorCode = MMC_ERR_INIT1;

Kleiner Tip: Einige meiner Karten brauchen mehr als
50 Versuche für CMD1. Highscore ist 230 !

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.