Forum: Projekte & Code Sd-Card endlich im 4-Bit-Mode! -> Init / Read / Write


von Albi G. (deralbi)


Angehängte Dateien:

Lesenswert?

Hallo.
Ich darf freudig verkünden: ich habs nach unzähligen Stunden geschaft 
:-)
Ich habe hier einen ATMega128 @ 8MHz, der freudig 4-bit-parallele Daten 
aus der SD-Karte ließt bzw in die Karte schreibt.
Der Modus ist vor allem interessant, weil er bei sinnvoller Nutzung 
recht hohe Datendurchsätze zulässt. Im gegensatz zur SPI-Ansteuerung 
dürften auch die Kompatibilitätsprobleme kleiner werden.

Meine Grundlagen:
- Google Suche nach "acmd6 crc" liefert das wichtigste:
  - Zum eines war da das Datenblatt der SD-Karten:
       http://www.sdcard.org/about/memory_card/pls/
  - Zum anderen ein Oszi-Projekt, das freundlicher Weise den SD-Karten
    Modus mit 1Bit Busbreite verwendete (für was auch immer):
       http://www.altera.com/literature/dc/2006/c3b.pdf

Der Code wurde dann von mir umgearbeitet, sodass er gleichzeitig 4bits 
in die SD-Karte schaufelt.

Performance: Grottenschlecht. Leider.
Schreiben: 52.5kb/s
Lesen:     136.5kb/s
Der Code ist recht allgemein gehalten. Man kann die 
Kommunikatoinsleitungen quasi beliebig an den AVR anschließen. Man 
müsste zum Schluss nur die Konfiguration für die Pins und die Ports 
ändern.
Auch mein Testaufbau hier ist schlecht designt. Die 4 Datenleitungen 
liegen nicht nebeneinander an einem Port, sondern getrennt.
Dies verursacht unnötigen Overhead beim rekonstruieren des gesendeten 
Bytes - jedes bit muss einzeln eingelesen werden. Sinnvolller wäre es 
die Leitgungen so zu legen, dass gleich die Nibbles an der richtigen 
Stelle ankommen. Sö könte man ein Byte u.U. innerhalb von <10 Takten 
einlesen.
Problem beim Schreiben ist die aufwendige CRC-Berechnung. Diese kann 
jedoch nicht wie im SPI-Modus einfach abgeschaltet werden. Leider.

Auch der Resourcen-Verbrauch ist relativ hoch. Die CRC Tabelle sowie die 
SD-Kommando-Vorlagen liegen im SRAm (z.Z.) Dies könnte man aber ohne 
Weiteres in den Flash legen. Da kommt der Code auch mit weniger als 
600Byte SRAM aus ;-)

Sorgen machen mir rechtliche Geschichten. Der SD-Modus ist ja eigentlich 
Lizenzpflichtig. Jedoch habe ich nur öffentliche Quellen verwedet.
kA. Wenn es Andreas zu heikel ist, soll der den Anhang löschen, auch ok 
;-)
Man kann mich dann ja immernoch per email kontaktieren.

Der Code ist eigentlich relativ leicht verständlich. Interessant fände 
ich jetzt Optimierungsvorschläge von euch! Ich werd mich zwar selber 
nochmal ran machen (später) aber vllt fällt einem anderen ja mehr mist 
auf, als mir.

Hmmh das wars eigentlich erstmal von mir.
Ich hoffe auf super Vorschläge oder interessante Fragen von euch usw..

MFG

von Joerg W. (joergwolfram)


Lesenswert?

"Any implementation of the Simplified Specification may require a 
license from the SD Card Association, SD Group, SD-3C LLC or other third 
parties."

Spätestens wenn man den Code auf Sourcefore & Co stellen will, sehe ich 
schon ein rechtliches Problem. Um die Spec herunterzuladen musstest Du 
ja den Bedingungen zustimmen.
Ich selbst habe das Thema SD mittlerweise für meine eigenen Projekte 
mittlerweise ausgeschlossen.

Gruß Jörg

von Jens (Gast)


Lesenswert?

@Jörg:

Benutzt Du Alternativen?

MMC ist genauso geschützt, CF braucht für viele Anwendungen
zu viele Pins, über Memorystick müssen wir nicht weiter reden.

Jens

von Joerg W. (joergwolfram)


Lesenswert?

Da ich keine riesigen Datenmengen brauche, benutze ich die 
Dataflash-bausteine von Atmel. Ansteuerung über SPI ist kein Problem, 
die Eingänge sind 5V-tolerant. Direkter Zugriff auf jede Zelle geht und 
es sind zwei RAM-Buffer drin. Zum Datenaustauch mit dem PC habe ich mir 
einen seriellen Reader gebaut, USB wäre auch eine Variante.

Gruß Jörg

von Albi G. (deralbi)


Lesenswert?

>"Any implementation of the Simplified Specification may require a
>license from the SD Card Association, SD Group, SD-3C LLC or other third
>parties."
Ich weiß. Aber was soll man tun? Mein Code basiert nicht auf den Specs, 
sondern auf der Oszi-Vorlage -> diese wiederrum ist frei per Google zu 
finden. Wenn man ein wenig Wortglauberei veranstaltet, sag ich ganz 
einfach, dass es sowieso unmöglich ist "Vereinfachte Spezifikationen" zu 
implementieren. Spezifikation ist Spezifikation und kein Algorthmus.

Ich finde gerade dieser Code macht SD-Karten wieder interessanter. Kein 
KickHack mnit SPI mehr und die Initialisierung sollte eigentlich auch 
soweit genormt sein.

>Spätestens wenn man den Code auf Sourcefore & Co stellen will, sehe ich
>schon ein rechtliches Problem.
Habe ich nicht vor, keine Angst. Ich hoffe der Anhang wird auch hier von 
Google erfasst.

MFG

von Joachim Müller (Gast)


Lesenswert?

Was mich etwas verwundert, ist dass das Oszi-Projekt den SD-Teil als 
Programmcode realisiert, obwohl man z.B. die CRC ganz leicht mittels 
einem FPGA-Funktionsblock machen könnte. Wenn schon ein FPGA da ist..

Privat sehe ich da eigentlich keine rechtlichen Probleme.
Die Spezifikation ist ja nicht geheim ("gehackt") und die Lizenzen 
verstehen sich nicht für Bastelprojekte.
Problematisch wirds bei kommerziellen Produkten.

Joachim

von noah (Gast)


Lesenswert?

mann, worüber macht ihr euch gedanken? da steht, es "könnte" eine lizens 
benötigt werden. der einzige sinn dieses kommentars bei den specs ist, 
dass niemand, der sagt "ich beruf mich auf die spezifikationen", die 
lizensfrage umgeht. außerdem gilt: wo kein kläger, da kein richter. und 
wenn es jemand kommerziell nutzt, so teuer wird die lizens nicht sein. 
außerdem kann niemand die verbreitung eines von dir ohne verwendung 
"unfreien" materials geschriebenen programmes  verbieten. manche leute 
sind echt paragraphenparanoid. und außerdem gilt (für mich): freie 
formate für freie menschen :)

sorry für die nichtbenutzung der großschreibetaste ;-)

von Joerg W. (joergwolfram)


Lesenswert?

noah wrote:
> und außerdem gilt (für mich): freie formate für freie menschen :)
>

So denke ich auch: SD -> unfreies Format -> nix für mich

Gruß Jörg

von Thomas (kosmos)


Lesenswert?

man kann die Hardware ja mit einer SPI-Softwareversion verkaufen, die 
SD-Softwareversion müsste man dann halt verschenken (kein Kommerz) oder 
im Netz verstreuen heutzutage bekommt man das nicht mehr so schnell aus 
dem Netz wenns mal im Umlauf ist oder tun die so was so schnell 
unterbinden lassen?

Ich einem Toshiba Datenblatt 
http://embdev.net/attachment/39390/TOSHIBA_SD_Card_Specification.pdf für 
eine 256 MB SD-Card ist die Vorgehensweise zum wechseln in den SD-Modus 
beschrieben allerdings fehlen da Infos zur Datenübertragung und zu der 
von dir genannten CRC.

Sehe ich es richtig das du nur 15 CRC-Summen hast? Wahrscheinlich gibts 
für 0000 wirds keinen CRC-Summe.

Könntest du die Vorgehensweise / Ablauf nach dem Umschalten etwas 
umschreiben bin in C nicht so bewandert.

von Thomas (kosmos)


Lesenswert?

oh man wie hab ich so nen alten Beitrag erwischt. Aber vielleicht gibts 
ja doch noch einige Infos dazu

von Der A. (der-albi)


Lesenswert?

Also ich sage mal so: viel Helfen kann ich dir da sicher nicht mehr.C 
ist ja schon eine Hochsprache.. was dort steht wird auch gemacht..
stell dir das mal in ASM vor ;-)
So eine richtige Vorgehensweise kann ich nicht beschreiben.

Der CRC wird pro Bit berechnet. Man hat also 4 CRCs.
Wie die CRCs berechnet werden siehst du auch.. das ist haupstächlich die 
obere LookUp-Tabelle und unten wird das ver-XOR-t und damit die Tabelle 
indiziert und das ergebnis dann wieder ver-XOR-t.
Frag mich nicht wie man darauf kommt.. das habe ich auch nur 
abgeschrieben.

MFG

von Thomas B. (escamoteur)


Lesenswert?

Hi,

gibt es hierzu schon einen neuen Stand?

Was denkt Ihr, läßt sich auf diese Weise eine bessere Performance als 
mit SPI erreichen?

Gruß
Tom

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wie hoch soll denn die Performance sein? Ein AVR stößt auch mit 
4Bit-Übertragung schnell an seine Grenzen, da er ja noch puffern, 
rechnen und verpacken muß. Mehr als etwa 500kBit/s wirst Du nicht 
erwarten können.

von DerAlbi (Gast)


Lesenswert?

Man könnte nem CPLD das beibringen, die 4bit in SPI umzuwnandeln ;-)

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
Noch kein Account? Hier anmelden.