Forum: Mikrocontroller und Digitale Elektronik Suche einfache SD-Bibliothek für atmega8


von Jacky2k (Gast)


Lesenswert?

Hallo!
Hoffe ich mach hier alles richtig, ist mein erster Beitrag, wenn nicht 
bitte ich um Aufklärung ;)

Also, ich versuche grade über einen Atmega8 eine SD-Karte anzusteuern. 
Die Karte ist an der IPS Schnitstelle angeschlossen. Dabei werden nur 
SCK, MISO, MOSI und SS verwendet, also irgendwas wie locked oder so gibs 
nicht!
Habe dafür die eine oder andere Lib ausprobiert, aber keine war so 
einfach wie ich es haben wollte. Ich möchte einfach nur Blocks lesen und 
schreiben können. Ich will nichts mit FAT oder sonst was. Ich möchte 
einfach die Karte initialisieren, und dann zwei Funktionen haben um 
einen Block zu lesen bzw zu schreiben.
Gibts da was einfaches?

Ich arbeite mit WinAVR-20071221rc1.

PS: Ich habe natürlich eine Schaltung zwischen µC und der Karte für das 
Level-Shifting. Besteht aus drei Spannungsteilern und zwei Mosfets mit 
zwei Pullups für die Aufwärtskonvertierung ;)

von Lorenz .. (lorenz)


Lesenswert?

Schau mal bei Ulrich Radig vorbei. Der hat eine SD/MMC-FAT-Library 
geschrieben. die hilft dir sicher.
Lorenz

von Martin Thomas (Gast)


Lesenswert?

Google nach chan fat module, auf Chans Seite die Beispiele (ffsample.zip 
oder ähnlich) runterladen, in den Beispielen fuer AVR findet sich eine 
Datei mmc.c, darin die low-level-Funktionen für SD/SDHC/MMC init, 
block-read, block-write. Ist recht ordenlicher Code und man muss 
lediglich einen "10ms-Systemtick" bereitstellen.

von Fabian S. (jacky2k)


Lesenswert?

Lorenz .. wrote:
> Schau mal bei Ulrich Radig vorbei. Der hat eine SD/MMC-FAT-Library
> geschrieben. die hilft dir sicher.
> Lorenz

Jo, schaue ich mir grade an und versuche den reinen SD/MMC Part zu 
extrahieren, ist gar nicht so einfach.
Andere Farge: Mach ich was falsch oder ist irgendwie jeder, der sowas 
schreib zu b**d C zu programmieren? Es wird dauerhaft sowas wie "for(int 
i=0; .." verwendet, was aber meines Wissens nach in C nicht erlaubt ist 
und mein Compiler hauts mir auch um die Ohren.

Edit: Glaube die Lib ist nicht für einen Atmega8 geeignet, denn er 
meint, dass alles mögliche wie z.B. SPI_DI undefiniert sind... wenn ich 
in die .h schaue wird SPI_DI für einen mega32 und mega128 definiert, 
nicht aber für atmega8.
Ganz abgesehen davon, wofür brauche ich das, wenn ich im Hardware Modus 
betreiben will?


> ...in den Beispielen fuer AVR findet sich eine
> Datei mmc.c, darin die low-level-Funktionen für SD/SDHC/MMC init,
> block-read, block-write.

Öhh... welche Beispiele? bei meinem WinAVR waren wohl keine dabei, 
zumindest kann ich im gesamten Installationsordner keine mmc.c finden.

von Johnny Maxwell (Gast)


Lesenswert?

> Andere Farge: Mach ich was falsch oder ist irgendwie jeder, der sowas
> schreib zu b**d C zu programmieren? Es wird dauerhaft sowas
> wie "for(int i=0; .." verwendet, was aber meines Wissens nach in C
> nicht erlaubt ist und mein Compiler hauts mir auch um die Ohren.

Kommt darauf an, in der C99 Spezifikation ist das erlaubt. Ein neuerer 
Compiler sollte das unterstützen, evtl. musst du das aber erst 
aktiviern.

Bei gcc z.B. durch -std=c99

Siehe http://de.wikipedia.org/wiki/Varianten_der_Programmiersprache_C

von Fabian S. (jacky2k)


Lesenswert?

Ahh cool, danke.
Dann werde ich das doch glatt mal Aktivieren ;)

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.