Elektroda.de
Elektroda.de
X
This content has been translated flag-pl » flag-de View the original version here.
  • Tester der Speicherkarten MicroSD
    In diesem Artikel werde ich den Grund für die Erfindung und Entwicklung eines Testers für microSD-Speicherkarten beschreiben, mit dem einige interessante Eigenschaften von Karten überprüft werden.

    Ursache des Aufbaus
    MMC, SD, microSD-Karten werden neben ihren natürlichen Anwendungen auch von Fans von Mikrocontrollern aus mehreren Gründen geschätzt:
    • kann als zusätzlicher Speicher mit sehr großer Kapazität verwendet werden (sowohl zum Auslesen, z. B. beim Anzeigen von Fotos, wenn der Mikrocontroller den digitalen Bilderrahmen steuert, als auch zum Speichern von z. B. Messergebnissen eines Thermometers
    • Vereinfachen den Austausch dieser Daten mit einem PC oder Telefon
    • Kommunikation mit der Außenwelt entweder über das SD- oder das SPI-Protokoll (letzteres ist extrem einfach zu implementieren)

    Am Anfang gab es MMC-Karten (bis zu 128 MB, glaube ich), später wurden sie durch SD-Karten (identisch in der Größe) ersetzt, und dann wurden Mini- und Micro-SD-Karten erstellt. Es gab ,,normale", ,"SDHC"- und "SDXC"-Karten. Das Erkennen des Kartentyps (und damit der Adressierung) kann schwierig sein. Dies ist im folgenden Artikel perfekt beschrieben:
    http://elm-chan.org/docs/mmc/mmc_e.html

    und dies wird durch das folgende Diagramm perfekt veranschaulicht:
    Tester der Speicherkarten MicroSD

    Das SPI-Protokoll ist ein serielles Vollduplex-Datenübertragungsprotokoll, bei dem:
    • auf der MISO-Leitung (Master Input Slave Output) gehen die Daten von der Karte zum Host (z. B. PC),
    • Auf der MOSI-Leitung (Mater Output Slave Input) gehen die Daten vom Host zur Karte.
    • und all dies geschieht im Takt des vom Host erzeugten SCLK-Taktsignals.
    • Es gibt auch eine vierte Zeile (nCS), die... das war's

    Theoretisch soll es die Verbindung mehrerer Karten zu einem Host ermöglichen, indem dieselben MISO/MOSI/SCLK-Leitungen verwendet werden. Jede Karte hätte ihr eigenes separates nCS-Signal, das beim Senden mit ihr aktiv wäre:
                                     
                                           VCC VCC   
                                            |   |
    SCLK ---+----------+----------+         R   R
    MISO ---|+---------|+---------|+--------+   |
    SCLK ---||+--------||+--------||+-----------+
            |||        |||        |||
    	  +-------+  +-------+  +-------+
    	  |Karta 1|  |Karta 2|  |Karta 3|
          +-------+  +-------+  +-------+
             |           |          |
    nCS1-----+           |          |
    nCS2-----------------+          |
    nCS3----------------------------+
    


    In der Praxis wird es jedoch wahrscheinlich nicht von vielen Menschen verwendet, und meistens haben wir es mit einer einzelnen Karte zu tun. Was ist also mit der nCS-Linie? Theoretisch sollte es nur während der Übertragung von 8 Bit niedrig (aktiv) sein, dann hoch gehen (was die Übertragung des gesamten Bytes signalisieren würde)
    
    SCLK __--__--__--__--__--__--__--__--________--__--__--__--__--__--__--__--______
    MISO ------------
    nCS  --______________________________--------______________________________------
    


    In der Praxis kann diese Leitung jedoch die ganze Zeit auf Low-Zustand sein und die Karte macht keinen Unterschied (und unser Mikrocontroller hat dann einen Pin mehr für andere Zwecke). Ist es aber wirklich so?

    Nun, gemäß dem oben genannten Diagramm sollte man direkt nach dem Anlegen der Stromversorgung an die Karte einen Moment warten und ihr mindestens 74 Taktzyklen zum "Starten" schicken. Während dieser Aufwärmzyklen sollte die nCS-Leitung inaktiv sein und kann dann nach dem "Aufwärmen" bis zum Ausschalten niedrig sein. Und so konnte ich problemlos mit jeder Karte kommunizieren.

    In einem Gerät, das ich einmal entworfen habe, war die nCS-Leitung jedoch dauerhaft geerdet (spart Pins und Ressourcen). Mit der Karte, die ich damals hatte, funktionierte es. Dann habe ich ein Dutzend anderer Karten gekauft und es stellte sich heraus, dass einige "nicht kommunizieren wollen". Das war eine schlechte Nachricht, denn ich hatte bereits mehr Platinen zum Aufbau des Geräts auf meinem Tisch - Nacharbeiten würden umständlich werden (also keine Option). Ich habe versucht, eine Regel zu finden - z. B. Sandisk-Karten haben immer funktioniert, und andere Hersteller oder sogar No-Name hatten manchmal Launen). Ich wollte eine 100 % effektive Bestimmungsmethode, die es mir ermöglicht, die Karte vor dem Kauf herauszufinden, vorzugsweise allein durch ihr Aussehen. Naja, Karten wie diese Karten, nach dem Herstellerlogo sind doch die gleichen. Allerdings nicht wirklich - ich habe eine interessante Eigenschaft entdeckt:

    Tester der Speicherkarten MicroSD

    Die Karten auf der linken Seite (die mit der nCS-Linie immer auf der Masse) sind auf der Rückseite "glatt" (entweder ganz schwarz oder mit einigen Aufschriften), und die Karten auf der rechten Seite (launisch) haben entweder einen Aufkleber oder seltsame Kontaktflächen. Immer beim Kartenkauf habe ich den Verkäufer gebeten, "glatt" zu wählen. Da ich mir jedoch nicht sicher war, ob es sich um eine 100 % effektive Methode handelt, entschied ich mich für einen einfachen Gerätetester mit: einem Kartensteckplatz, einem Knopf und zwei LEDs, die nach dem Drücken des Knopfes eine Überprüfung durchführen und abhängig davon aufleuchten davon, ob die Karte OK oder launisch ist. Ich wollte das Gerät vor dem Kauf an den Verkäufer schicken.

    Entwurf
    Um die Kosten zu senken, basiert das Gerät auf einem Miniatur-Attiny13-Mikrocontroller. Er hat nur 8 Beine. Durch Abnehmen von VCC, GND und RESET bleiben 5 Pins für den eigenen Gebrauch übrig:
    - Das Programm ist so einfach, dass es keine Interaktion des Benutzers erfordert (daher kann die Testtaste mit dem RESET-Pin verbunden werden)
    - zwei LEDs, geschickt verbunden, um einen der drei Zustände (0/1 / Z) auszuwählen, welche der LEDs (jeweils: rot/grün/keine) leuchten sollen,
    - MMC/SD-Karten benötigen eine 3,3-V-Stromversorgung, daher ist ein Stabilisator nützlich.
    - und eine Schaltung 74LVC245 zum Umwandeln der Spannungspegel auf den zur Karte führenden Leitungen (MOSI/SCK/nCS); MISO (ausgehend von der Karte erfordert keine Konvertierung)
    - Die Mikrocontroller, die ich habe (ATTINY13V), können mit nur 3,3 V betrieben werden, sodass der 74LVC245-Konverter redundant wäre, aber... der von mir verwendete USBASP-Programmierer wird mit 5 V betrieben, und dies ist auch der Signalpegel auf den Leitungen während des Programmierens verwendet, so dass es das Attiny-Ego beschädigen könnte.
    - Kartensteckplatz und Mini-USB-Buchse zur Stromversorgung
    Tester der Speicherkarten MicroSD Tester der Speicherkarten MicroSD

    Die Platine war wie immer ganz schön:
    Tester der Speicherkarten MicroSD Tester der Speicherkarten MicroSD

    Software
    In attiny haben wir nur 1024 Bytes pro Code, also kein Wahnsinn. Das Programm führt nacheinander 2 identische Tests durch:
    • TEST1 - Versuch, ständig mit der nCS-Karte an Masse zu kommunizieren
    • TEST2 - Einstellen des nCS auf einen hohen Zustand, Starten von 80 Aufwärmzyklen, Zurückbringen des nCS auf Masse und Versuch der Kommunikation

    Jeder der Tests:
    • entweder wird es fehlschlagen,
    • oder wir schaffen es, mit der Karte zu kommunizieren - dann bestimmt es, mit welcher Karte wir es zu tun haben.

    
    Wyświetlanie wyniku testu:
    dioda   | dioda    | wynik
    zielona | czerwona |
    --------+----------+-------
       -    |   miga   |  TEST1 fail, TEST2 fail (błąd komunikacji)
    miga (*)| miga (*) |  TEST1 fail, TEST2 pass (karta kapryśna)
    miga (*)|     -    |  TEST1 pass, TEST2 pass (karta ugodowa)
    
    (*) - ilość mignięć oznacza:
    1 -> karta SD VER.2 (block address)
    2 -> karta SD VER.2 (byte address)
    3 -> karta SD VER.1
    4 -> MMC VER.3
    


    Von den Karten habe ich:
    • 4 GB- und 2 GB-Karten sind SD VER.2 (Byte-Adresse)
    • eine Karte mit einer Kapazität von 32 GB ist SD VER.2 (Blockadresse) - kein Wunder, denn auf 4 Bytes (32 Bit) kann man maximal 4 GB adressieren


    Die Präsentation




    Kod
    Code: text
    Melde dich an, um den Code zu sehen

    Cool? DIY-Rangliste
    Über den Autor
    phanick
    Niveau 28  
    Offline 
    phanick hat 2655 Beiträge geschrieben mit der Bewertung 2614, und dabei 61 Mal geholfen. Wohnt in der Stadt Warszawa. Er ist seit 2007 bei uns.
  • #2
    LA72
    Niveau 41  
    Kaum zu glauben, dass das gute Kleinkind ATtiny13 es schaffen kann.
    Weiter so.

    Haben Sie eine "gefälschte" Karte getestet? (falsche Kapazität)?
  • #3
    Anonym
    Niveau 1  
  • #4
    krzbor
    Niveau 25  
    phanick hat geschrieben:
    Theoretisch soll es die Verbindung mehrerer Karten zu einem Host ermöglichen, indem dieselben MISO/MOSI/SCLK-Leitungen verwendet werden. Jede Karte hätte ihr eigenes separates nCS-Signal, das beim Senden mit ihr aktiv wäre:

    Es ist ein bisschen falsch - SPI wird nicht nur zum Verbinden von Karten verwendet - es wird sehr oft verwendet, um mit Displays, ADC / DAC-Wandlern, RTC-Uhren usw. zu arbeiten. Das nCS-Signal sollte im Prinzip richtig angeschlossen werden.
  • #5
    Eidems
    Niveau 29  
    @phanick, kaufst du gebrauchte Speicherkarten? Es ist mir mehrmals passiert, dass die MicroSD-Karte von selbst nicht mehr funktioniert. Deshalb tausche ich meine Telefone vorsorglich alle 2/3 Jahre aus. Die Kosten für eine solche Karte sind lächerlich.
  • #6
    ZnAl
    Niveau 14  
    Ein sehr interessantes Projekt. :spoko:

    Ich habe nur eine kleine Anmerkung zu diesem Teil der Beschreibung:
    Zitat:
    Am Anfang gab es MMC-Karten (bis zu 128 MB, glaube ich), später wurden sie durch SD-Karten (identisch in der Größe) ersetzt

    Nicht alle Abmessungen sind gleich.
    MMC-Karten (volle Größe) sind standardmäßig 1,4 mm dick, während normale SD-Karten 2,1 mm dick sind.
    Es gibt Geräte, in die nur MMC-Karten passen und SD-Karten nicht.
  • #7
    bsw
    Niveau 20  
    phanick hat geschrieben:
    - Die Mikrocontroller, die ich habe (ATTINY13V), können mit nur 3,3 V betrieben werden, sodass der 74LVC245-Konverter redundant wäre, aber... der von mir verwendete USBASP-Programmierer wird mit 5 V betrieben, und dies ist auch der Signalpegel auf den Leitungen während des Programmierens verwendet, so dass es das Attiny-Ego beschädigen könnte.

    Aus meiner Erfahrung weiß ich, dass der Mikrocontroller nicht beschädigt wird, aber andere Zubehörteile können beschädigt werden, die damit arbeiten.
    Dafür gibt es eine Lösung - eine einfache Modifikation des USBASP-Programmierers oder ein Adapter für den USB-Anschluss, der seine Spannung senkt:

    https://e-bsw.blogspot.com/2017/09/usbasp.html

    Hinzugefügt nach 23 [Minuten]:

    ZnAl hat geschrieben:

    Zitat:
    Am Anfang gab es MMC-Karten (bis zu 128 MB, glaube ich), später wurden sie durch SD-Karten (identisch in der Größe) ersetzt

    Nicht alle Abmessungen sind gleich.
    MMC-Karten (volle Größe) sind standardmäßig 1,4 mm dick, während normale SD-Karten 2,1 mm dick sind.
    Es gibt Geräte, in die nur MMC-Karten passen und SD-Karten nicht.

    MMC-Karten gab es bis zu 512 MB. Es gab auch Geräte, in die SD physisch passen konnte, aber es wurde nicht unterstützt - nur MMC.
    Neben dem Unterschied in der Dicke und dem fehlenden Schreibschutzschalter hatten die MMC-Karten auch zusätzliche Kontakte:
    Tester der Speicherkarten MicroSD
  • #8
    zgierzman
    Niveau 31  
    bsw hat geschrieben:
    MMC-Karten gab es bis zu 512 MB. Es gab auch Geräte, in die SD physisch passen konnte, aber es wurde nicht unterstützt - nur MMC.
    Neben dem Unterschied in der Dicke und dem fehlenden Schreibschutzschalter hatten die MMC-Karten auch zusätzliche Kontakte:


    Das waren seltsame Zeiten, es gab auch MMC "half length" (halbe Länge) und es gab mehrere, wenn nicht ein Dutzend andere Standards. Jeder Hersteller - eine andere Karte. Mal der Memory Stick, mal eine andere Erfindung, wie bei Anschlüssen zum Aufladen von Telefonen. Glücklicherweise richtete es sich irgendwie auf. :-)
    Tester der Speicherkarten MicroSD
  • #9
    Sentymentalny
    Niveau 11  
    Ist es nicht möglich, die misc2.h-Datei zum Set hinzuzufügen?
  • #10
    phanick
    Niveau 28  
    Vielen Dank für Ihr Interesse am Thema.

    LA72 hat geschrieben:
    Kaum zu glauben, dass das gute Kleinkind ATtiny13 es schaffen kann.
    Weiter so.

    Haben Sie eine "gefälschte" Karte getestet? (falsche Kapazität)?

    Ich habe keine (oder ich weiß nichts darüber). Ich verstehe, dass die Karte dann eine andere Kapazität als die physische zurückgibt und die Partition diesen vergrößerten Teil auch überlappt. Das muss ich unter die Lupe nehmen, weil ich mich frage, wenn das System versucht dort etwas zu speichern, werden die Daten nirgendwo gespeichert, oder vielleicht andere Daten im realen Bereich überschreiben?

    Ich habe jedoch eine Speicherkarte, die vom System überhaupt nicht erkannt wird, aber der Tester testet sie erfolgreich. Vielleicht ist der Zugriff auf Daten darin gesperrt oder der Speicher ist beschädigt, aber der Controller funktioniert?

    Eidems hat geschrieben:
    @phanick, kaufst du gebrauchte Speicherkarten? Es ist mir mehrmals passiert, dass die MicroSD-Karte von selbst nicht mehr funktioniert. Deshalb tausche ich meine Telefone vorsorglich alle 2/3 Jahre aus. Die Kosten für eine solche Karte sind lächerlich.

    In meiner Anwendung speichern die Karten keine kritischen Daten und dienen hauptsächlich als Datenspeicher, aus dem das Gerät dann ausliest. Vielleicht hattest du einen physischen Schaden an der Karte (z. B. einen Mikroriss)?

    spec220 hat geschrieben:
    Ein sehr interessantes Projekt, ein schneller Test von Speicherkarten.
    Allerdings finde ich persönlich, dass tiny13 dafür etwas ungeeignet ist, wobei ich zugeben muss, dass der Artikel selbst sicherlich die Skills und Programmierkenntnisse des Kollegen präsentiert.

    Ich persönlich habe für ein paar Cent ein einfaches Gadget gekauft, das vollen Zugriff auf SD-Karten und Speicher ermöglicht.

    In der aktuellen Anwendung ist es gerade so (ca. 87% des Speichers belegt), aber wenn man es z.B. wollte, kann man daraus einen vollwertigen Diagnoser machen, der es auch erlaubt, Daten auf die Karte zu lesen/schreiben und per USB mit dem PC kommunizieren (und nicht nur Stromversorgung), dann wäre Mega8 Minimum.

    Außerdem verwendet der USB-Leser das letztere Kommunikationsprotokoll mit der Karte, sodass meine problematischen Karten sind für ihn von unproblematischen nicht zu unterscheiden.

    Zitat:
    Ist es nicht möglich, die misc2.h-Datei zum Set hinzuzufügen?

    Ich fügte hinzu.
  • #11
    tmf
    Moderator Mikrocontroller Entwerfen
    phanick hat geschrieben:
    In der Praxis kann diese Leitung jedoch die ganze Zeit auf Low-Zustand sein und die Karte macht keinen Unterschied (und unser Mikrocontroller hat dann einen Pin mehr für andere Zwecke). Ist es aber wirklich so?

    CS wird auch verwendet, um Operationen auf dem SPI zu synchronisieren. Stellen Sie sich vor, was passiert, wenn der CS ständig aktiv ist und es eine Störung am SCK gibt? Die Übertragung wird nicht synchronisiert und nur einige interne Zeitüberschreitungen der Karte können die ordnungsgemäße Kommunikation wiederherstellen. Es ist also besser, es richtig zu machen, das heißt, den CS anzuschließen und seinen Status nur für die Zeit der Übertragung auf aktiv zu ändern.
  • #12
    eurotips
    Niveau 39  
    Wenn Sie in dem Thema sitzen, lassen Sie sich ein Gerät zum Ändern der CID der Karte einfallen.
  • #13
    Błękitny
    Niveau 13  
    Man kann auch ein solches System zum Lesen von Kartenparametern erstellen:
    Link
    Link
    Ich habe dieses Gerät gebaut und es funktioniert sehr gut.

    Wenn es darum geht, die CID-Nummer zu ändern, sie haben hier gekämpft:
    Link
  • #14
    funzen
    Niveau 19  
    MMC-Karten gibt es größer als 512 MB, ich habe selbst eine 2 GB MMC-Karte.
    Tester der Speicherkarten MicroSD
    [F]