Datum:
Angehängte Dateien:Ein ATmega8 initialisiert mit CMD0, CMD1 und CMD16 eine SD-Karte. Anschließend liest er die Register CID und CSD aus gibt einige Bits / Bytes auf dem LCD-Display aus. Ein Block mit 512 Bytes wird von der SD-Karte gelesen und bei Bedarf können auch 512 Bytes geschrieben werden. Die LEDs zeigen den Zustand der Initialisierung an. Wurde erfolgreich initialisiert und ausgelesen, dann leuchten 6 LEDs, die 7. LED zeigt den Write-Status an. Write Ist aber im Code sicherheitshalber durch "REM" deaktiviert. Es ist kein fertiges Projekt. Aber man könnte z.B. die Datenübertragung testen oder eine "nichtwillige" SD-Karte mit dieser Software ansprechen. Ganz bewußt arbeitet der SPI-BUS mit einer sehr niedrigen Taktfrequenz. Kann aber ohne weiteres, durch verändern der SPI Register übertragungsfreudiger umkonfiguriert werden. Über Hinweise, Anregungen und Kritiken würde ich mich sehr freuen. Momentan ist eine FAT16 Routine in Arbeit, würde sie Euch dann gern zur Verfügung stellen. Bin mir aber noch nicht ganz sicher, ob 1K SRAM dafür ausreicht. Bernhard
Datum:
Äh, sorry, aber das gabs hier schon zu genüge. Der Code von Roland Riegel (glaube ich wars), ist die eierlegende Wollmilchsau in Sachen Kompatibilität und Einhaltung der Spezifikationen: Beitrag "MMC/SD-Karte mit FAT16 an AVR"
Datum:
Der ist aber halt in C und das mag nicht jeder (zumindest auf dem µC)... Gruß Jörg
Datum:
Assembler, Das seh ich ja jetzt erst. Ihr Masochisten.
Datum:
Angehängte Dateien:Hallo Berhard Hab das in 2007 gemacht Bräuchte ma bitte ein neuen SuperD. Hab leider Deine email net mehr wegen pc_crash mal sehen ob ich sie hier finde Gruß Heinz vogel.heinz@gmx.net
Datum:
Angehängte Dateien:Hallo Hier die Karte dazu Hab für sd-kontakte eine Federleiste geblündert und hält Vorallem kostet das nix *g Das R2R Netz für D/A Wandler und Audio teil ist von http://s-huehn.de/elektronik/bbgong/bbgong.htm Gruß fix
Datum:
Angehängte Dateien:@Jörg >Der ist aber halt in C und das mag nicht jeder (zumindest auf dem µC)... Den gleichen Gedanken hatte ich auch, nur Du warst schneller mit der Antwort ;) @Heinz >Hab für sd-kontakte eine Federleiste geblündert und hält >Vorallem kostet das nix *g Die SD-Card konnte ich provisorisch vorerst mit einem gekürzten Main-Bord-Slot kontaktieren. Aber Du weißt ja, Provisorien dauern meistens mehre Jahre g Bei CSD-Elektronik fand ich SD-Fassungen z.B. SCDA1A1401. >Hab das in 2007 gemacht Hast Du FAT16, VFAT oder FAT32 verwendet? >Bräuchte ma bitte ein neuen SuperD. Den Super-Debugger konnte ich nicht mehr weiter entwickeln. Mein VBASIC stürzt permanent ab (WIN98) >Hab leider Deine email net mehr wegen pc_crash >mal sehen ob ich sie hier finde Im PDF-File steht sie. @alle Schon seit Tagen quäle ich mich mit FAT16 herum, aber die meisten Betriebsysteme formatieren mit VFAT (Weiterentwicklung von FAT16). Kennt jemand interessante und verständliche LINKS (möglichst deutsch), wo VFAT gut erklärt ist? Bernhard
Datum:
Angehängte Dateien:@Bernhard >Hast Du FAT16, VFAT oder FAT32 verwendet? hab FAT16 bei XP auf die Fomat-Paras achten Das brauchst net? Zur kontrolle hatte ich ein suber hex-editor damit konnte man auh dasFormat kontrollieren >Bei CSD-Elektronik fand ich SD-Fassungen z.B. SCDA1A1401. Danke für den Tip Fix ma sehen ob ich Deine pdf erwische
Datum:
Hallo Bernhard, die offizielle Beschreibung von FAT32 gibt es von Microsoft höchstpersönlich unter: http://www.microsoft.com/whdc/system/platform/firm... Es ist allerdings in english. Tschüss Jochen Adler
Datum:
Danke Jochen, hier fand ich auch noch sehr nützliche Informationen: http://www.jay-code.de http://www.cc5x.de/MMC/FAT.html Bernhard
Datum:
Angehängte Dateien:Hallo, in dieser Version habe ich FAT bzw. FAT16 eingearbeitet. Zuerst wird die SD-Card initialisiert mit CMD0, CMD1, ACMD41, der BOOT-SEKTOR und der VOLUME-BOOT-SEKTOR eingelesen und aus diesen Daten die Sektoren der 1.FAT und 2.FAT sowie die Directory und der Datenbereich bestimmt. Mit Win98 und Win XP formatierte SD-Karten gab es keine Probleme beim Einlesen und Auswerten vom BOOTSEKTOR und VOLUMEBOOTSEKTOR. Nachdem die Initialisierung erfolgreich war, wird die Anzahl der physischen Sektoren ermittelt (SD-Register) und die ersten Direktory- Einträge angezeigt (Datum + Zeit + Attribute + Dateigrösse + Startcluster). Anschließend wird eine Datei "DATEN" (bitte gross schreiben, die Datei- Erweiterung wird ignoriert) in Verzeichnis gesucht. War die Suche erfolgreich, wird der Dateninhalt der Datei an TXD-PIN ausgegeben. Im Display sieht man den Fortschritt und den aktuellen Cluster aus dem gerade gelesen wird. Nach einer kurzen Pause werden die ersten 1000 physischen Sektoren zu Testzwecken an TXD-PIN ausgegeben (dauert ca. 2 Min bei 57.600 Bd) Bei Gelegenheit möchte ich noch eine Schreib-Routine mit einbauen, ist aber nicht ganz einfach, wenn Daten an eine vorhandene Datei angehängt werden sollen. Der Programmcode ist nicht sonderlich optimal, bitte verzeiht mir ;) Probleme habe ich noch bei der Initialisierung von SDHC -CARD, könnte mir jemand ein paar Tipps geben? Bernhard
Datum:
@ Bernhard Schulz (bernhard) leider kann ich dir nicht weiter helfen aber vieleicht du mir. 2 fragen hab ich: 1. ist cmd1 nicht das gleiche wie acmd41? 2.du schreibst: (CMD1) 0x41 0x00 0x00 0x00 0x00 0x00 ; KARTE in den BETRIEBSMODUS in datenbaltt find ich(ulrichs homepage) (CMD1) 0x41 0x00 0x00 0x00 0x00 0xFF ich hab FF und 00 getestet beides geht aber warum 00? Entschuldige bitte meine unwissenheit c.u Commtel
Datum:
@Commtel > 1. ist cmd1 nicht das gleiche wie acmd41? Nicht ganz, SD-Karten verstehen beide Kommandos, Du kannst Dich für eines entscheiden, dagegen MMC verstehen ACMD41 nicht. Das kann als Untescheidungsmerkmal verwendet werden. Hier ist es ganz gut beschrieben: http://wwwpriv.uni-koblenz.de:81/~physik/informati... >2.du schreibst: > (CMD1) 0x41 0x00 0x00 0x00 0x00 0x00 ; KARTE in den BETRIEBSMODUS > in datenbaltt find ich(ulrichs homepage) > (CMD1) 0x41 0x00 0x00 0x00 0x00 0xFF > ich hab FF und 00 getestet beides geht aber warum 00? Das letzte Byte ist die Prüfsumme, dieses wird aber nur bei wenigen SD-Kommandos von der SD-Karte geprüft. Bernhard
Datum:
Angehängte Dateien:@alle in diesem Update habe ich folgende Funktionen eingebaut: - Datei anlegen - Datei schreiben, bzw. anhängen - Datei lesen - Datei suchen - Chache-Funktion (beschleunigt extrem die Leseaktivitäten) Beim einlegen einer SD-Karte wird zuerst nach der Datei "DATEN1-TXT" gesucht. Wird sie im Hauptverzeichnis nicht gefunden, dann wird sie angelegt und ein kompletter Datensatz geschrieben. Ein Datensatz besteht aus 512 Bytes. Existiert schon eine Datei, dann wird der Datensatz einfach angehängt. Bei Dateien, bei denen die Dateigröße ungleich ein Vielfaches von 512 ist, wird diese Datei mit Space aufgefüllt. Im Minutentakt, wird ein Datensatz gespeichert, lässt sich natürlich im Timer variieren. Der ATmega8 ist durch dieses Programmbeispiel zu fast 100% belegt, viele Funktionen sind aber nicht zwingend erforderlich und können nach belieben heraus "operiert" werden. Der Programmcode nicht sonderlich optimal geschrieben, vieles lässt sich noch vereinfachen und verbessern. Hauptsache es funktioniert und ist halbwegs verständlich ;) Bitte die Dateinamen in Grossbuchstaben schreiben, sonst werden die Dateien nicht gefunden. Ja, die ADC- Eingänge sind im Beispiel mit den LCD-Eingängen verbunden, soll ja nur ein Beispiel sein ;) Beim Schreiben eines Datensatzes laufen prinzipiell folgende Mechanismen ab: Zuerst wird die Direktory durchsucht und nach der Datei gesucht, anschließend die Dateigröße und der Start-Cluster abgefragt. Nun wird die FAT durchstöbert und alle Clustereinträge dieser Datei untersucht und den letzten Cluster dieser Datei ermittelt. Anschließend wird nach einem als "frei" markierten Cluster in der FAT gesucht. Nachdem alle Cluster-Angaben gesammelt wurden, wird der Sektor errechnet, der zuletzt beschrieben wurde. Bis jetzt war's ja noch ganz einfach, gel ^^ Nun beginnt die Vorbereitung zum Schreibvorgang. Zuerst muss geprüft werden, ob der neue Datensatz noch im alten Cluster geschrieben werden kann, wenn nicht, muss ein neuer Cluster als belegt markiert werden (FF FF)und der alte bekommt die Clusternummer des neuen Clusters. Zuguterletzt wird noch der Direktory-Eintag aktualisiert insbesondere die Dateigröße und das Attribut, natürlich könnte man noch den Zeitstempel mit berücksichtigen. Für Anregungen, Hinweise wäre ich sehr dankbar. Bernhard
Datum:
Angehängte Dateien:@ALLE Den Programm-Code habe ich in dieser Version stark gekürzt, nur auf die wesentlichsten Write-Funktionen beschränkt, jetzt sind ca. 30% frei. Würde man auf die LCD-Ansteuerung verzichten, blieben ca. 50% frei. Bernhard
Datum:
Haleluja, endlich mal ein Quellcode in Assembler. Ich bin dir was schuldig. Mal schauen, wenn ich Zeit finde bürste ich ihn mal durch.
Datum:
@Christof >endlich mal ein Quellcode in Assembler. >Ich bin dir was schuldig Der Assemblercode läuft schon seit einigen Wochen bei mir in verschiedenen Anwendungen, grobe Buggs konnte ich noch nicht feststellen. Es gibt aber Probleme, wenn die SD Karte zu stark fragmentiert ist, also wenn kein leerer Directory Eintrag gefunden werden kann (Format hilft aber). Ich bin mit SDHC Card noch nicht weiter kekommen, weiß noch nicht, wie man sie initialisiert :( Vielleicht hat jemand eine Idee? Bernhard
Datum:
Angehängte Dateien:Hi, ich habe die SD_SPI.asm um 104 Byts geschrupft wenn du Muse hast kannst du mal testen, ob sie sauber läuft. Es ist die Version aus der SD_WENIG_CODE.zip Gruß Christof PS: Ich hatte mal irgendwo gelesen, dass es Probleme gibt, wenn man die Befehle LDS und STS bei freigeschalteten Interrups nutzt. Bei SDHC kann ich dir leider nicht helfen.
Datum:
@Christof > ich habe die SD_SPI.asm um 104 Byts geschrupft wenn du Muse hast kannst > du mal testen, ob sie sauber läuft. Es ist die Version aus der > SD_WENIG_CODE.zip Danke, ich schau's mir mal an und teste es > Ich hatte mal irgendwo gelesen, dass es Probleme gibt, wenn man die > Befehle LDS und STS bei freigeschalteten Interrups nutzt. Mir sind diesbezüglich keine Probleme beim ATmega8 bekannt, STS und LDS benötigen allerdings 2 Takte, erst dann kann der Interrupt abgearbeitet werden. Bernhard
Datum:
Das war ein Tippfehler meiner seitz. Selbstverständlich kennt der ATmega8 die Befehle STS und LDS. Ich meinte, beim ATmega8 gibt es das Problem mit den STS und LDS-Befehlen nicht, welches ich noch irgendwie im Hinterkopf hatte. Es ist so wie du es auch schon angemerkt hast. Also alles in Butter. Ich konnte meinen Post leider nicht editieren, hatte die wage Hoffnung, das er trotzdem richtig verstanden wird. Lieber nachgefragt als... Gruß Christof
Datum:
Simon k. schrieb:
> Assembler, Das seh ich ja jetzt erst. Ihr Masochisten.
Masochist ist, wer wie ich, von Basic auf Assembler kommt, nachdem man
mich mit Sprüchen zu einer vernünftigen Programmiersprache nötigte.
Datum:
Hallo @ Bernhard Schulz, toll das ich endlich fündig geworden bin. Habe nämlich schon lange nach einem Assembler Code gesucht !! Habe leider noch nicht ausprobieren könnnen, da ich mir erst den ATMEGA8 besorgen muss. Habe mich auch noch nicht durch den Code durchgekämpft,deshalb schon ein paar Fragen: - Wie werden den die Daten in der erzeugten TXT Datei abgelegt ? - Sind es schon ASCII Daten, mit TAB getrennt ? Das wäre optimal damit die Datei direkt durch Excel oder ähnlich in Zeile und Spalte eingelesen werden kann. - Welche Taste ? oder Vorgang schaltet das Relais ein oder aus ? - Wofür wird es benötigt ? Besten Dank im voraus. Gruß Uli
Datum:
> - Wie werden den die Daten in der erzeugten TXT Datei abgelegt ? direkt als ACII > - Sind es schon ASCII Daten, mit TAB getrennt ? > Das wäre optimal damit die Datei direkt durch Excel oder ähnlich in > Zeile und Spalte eingelesen werden kann. ja, lässt sich problemlos mit Excel öffnen > - Welche Taste ? oder Vorgang schaltet das Relais ein oder aus ? > - Wofür wird es benötigt ? es sollen Tasten sein, ein Relais wird nicht benötigt Bernhard
Datum:
Hallo Bernhard Dieser Beitrag ist schon etwas älter, aber ich probiere es halt mal. Ich versuche mich gerade an einem Datenlogger(Software) Atmega8, Assembler, SD-Card, FAT16, Daten nur schreiben, am PC auslesen. Ich kenne mich noch nicht so gut mit der Programmierung aus. Habe aber schon Sachen zum Laufen gebracht. Deinen Code habe ich als Vorlage genommen. Was anderes Brauchbares hab ich nicht gefunden (Danke). Wollte jetzt alles noch optimieren(alles raus was nicht gebraucht wird, Code kürzen, schneller machen) und muß leider feststellen das es nicht einfach ist den Überblick zu behalten, da ich Assembler zum optimieren nutzen möchte und nicht den Code wegen Übersichtlichkeit zu sehr aufblasen. Ich würde mich gerne mit jemandem austauschen der da mehr Ahnung hat. Gruß Mario
Datum:
@Mario
> Ich würde mich gerne mit jemandem austauschen der da mehr Ahnung hat.
Das Forum "µC & Elektronik" ist z.B. sehr gut geeignet um allgemeine
Assemblerfragen zu behandeln.
Gruß Bernhard
Datum:
Angehängte Dateien:Hallo Bernhard Danke erstmal für die schnelle Antwort. Man muß schon lange suchen um einiges in Assembler zu finden. SD-Karten beschreiben habe ich nur diese eine Seite gefunden. Bin schon recht lange dran mich da einzuarbeiten. Manchmal sieht man auch den Wald vor lauter Bäumen nicht. Die Routine fehlt mir sowieso. Ich habe mal meine "Baustelle" mit drangehängt. Da erkennt man vieleicht eher, warum ich mich dierekt an Dich wende. Eine spezielle Frage habe ich auch noch. Meine 128MB_SD-Karte hat, wenn ich das richtig verstanden habe, in der FAT-1 240 Sektoren beschrieben. Aber in der Routine in der ein leerer Fat-Eintrag gesucht wird, wird nur der 1.Sektor ausgelesen. Jetzt weiß ich nicht genau, ob ich da richtig liege. Dies wollte ich jetzt natürlich ändern. Ich habe im "Netz" niemanden gefunden der sich so gut auskennt. Gruß Mario
Datum:
Hallo Bernhard Muß mich nochmal melden. Kannst Du bitte mal in Deiner Datei "SD_WENIG_CODE.zip" in der "SD_SPL.asm" die Zeile 433 nachsehen. Danke Gruß Mario



