Hallo, im Anhang befindet sich meine FAT16 library, mit dem ich eine MMC-Card lesen und beschreiben kann(MMClib, UARTlib usw stammen von Pascal Stang, sind jedoch an manchen Stellen leicht modifiziert). Es ist möglich ein Verzeichnis mit Dateinamen(z.B.: "A/LangerName/A He/test.hex") als string der FAT16_Search() Funktion zu übergeben. Diese Funktion durchsucht die MMC. Falls die Datei vorhanden ist, kann man antweder die alten Daten überschreiben oder die neuen Daten am Ende der Datei anfügen. Falls die Datei nicht forhanden ist, wird eine Meldung ausgegeben (TODO: es wird diese Datei erzeugt). Vor dem power-off der MMC Karte (oder auch ab und zu möglich) muss die FAT16_Finish_Data() Funktion aufgerufen werden, um die Datengröße auf der MMC zu sichern. Mit einem Terminalprogramm( z.B.: http://hp.vector.co.jp/authors/VA002416/teraterm.html) ist eine ausführliche debugging der FAT16 Aktivitäten des µC möglich. Diese debugging Informationen erhöhen die Kodegrösse von 11510 auf 15128 byte (siehe fatconf.h ~> #define DEBUG_FAT). Bsp.: cmd> i Resetting MMC/SD Card MMC_GO_IDLE_STATE: R1=0x01 MMC_SEND_OP_COND: R1=0x01 MMC_SEND_OP_COND: R1=0x00 MMC_CRC_ON_OFF: R1=0x00 MMC_SET_BLOCKLEN: R1=0x00 OEM Name : MSDOS5.0 Bytes Per Sector: 512 Sector Per Clust: 4 Reserved SecCnt : 6 Number Of FAT : 2 Root Dir Entries: 512 Total Sector 16 : 0 Media : Found: Hard disk. DOS version 2.0 Total Sector 32 : 250880 Sector Per FAT : 245 Volume Label : NO NAME Filesystem Type : FAT16 RootDirectoryRegionStart: 496 DataRegionStart : 528 FATRegionSize : 490 RootDirectoryRegionSize : 32 DataRegionSize : 250352 cmd> b Searching for >testdokument.hex (CONTINUE) 31.07.2005 15:48 4800 testdokument.hex Data starts at FAT address : 12 Sector containing file info : 500 Data starts in sector : 568 FileSize [uint8_t] : 4800 ----- Read file content----- Current cluster: 12 Current sector: 0 Next cluster : 13 Next sector : 568 Sector : 568 Next FAT : 13 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ----------------------------------------------- ---- ASCII ----- 0000 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 ................ 0010 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 ................ 0020 08 00 00 00 09 00 00 00 0A 00 00 00........... ... gibt den kompletten Datenihalt aus ... .......... 00 00 99 00 00 00 9A 00 00 00 9B 00 00 00 ............ 01F0 9C 00 00 00 9D 00 00 00 9E 00 00 00 9F 00 00 00 ............ ----- Searching end of file ----- Data ends in FAT address: 14 Data ends in sector : 577 FileSize : 4800 Loading last sector of file -> 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ----------------------------------------------- ---- ASCII ----- 0000 60 01 00 00 61 01 00 00 62 01 00 00 63 01 00 00 `...a...b...c... 0010 64 01 00 00 65 01 00 00 66 01 00 00 67 01 00 00 d...e...f...g... 0020 68 01 00 00 69 01 00 00 6A 01 00 00 6B 01 00 00 h...i...j...k... ... Getestet habe ich das Progamm bis jetzt auf einer Atmega128(mit 8Mhz) mit einer 128MB MMC Karte(formattiert als superfloppy). Da zwei 512 byte grosse Buffer für die Daten und die FAT verwendet werden ist mindestens eine ATMEGA32 zum Ausführen des Programms nötig. Gruss Zoltan
hi, ich hab auch die lib vom Pascal verwendet, aber muste die ein bischen ändern, damit die einwandfrei funktioniert. die SPI geht da nur im interrupt mode. ich hab aber herausgefunden, das die viel schneller läuft, wenn man ohne interrupt arbeitet. damit es ohne unterrupt geht muss man schreiben SPDR = data; while(!((SPSR) & (1<<SPIF))); und in dem original code fehlt das ! und die daten müssen zwingend von dem warten in SPDR geschrieben werden. bei dem MMC code fehlt zb nach dem CS high setzten ein sendbyte, damit das sicher funktioniert. grüsse
Die Interrupts habe ich auch ausgeschaltet. Und Du hast Recht, mit den Ausrufezeichen funktioniert die SPI Library nicht. Ich habe in meiner Kode nur die "!" entfernt, da jedoch in der spiTransferByte() Funktion eine zweite Warteschleife korrekt auf die "SPDR = data;" Zuweisung folgt hat die SPI trotzdem funktioniert. Ich werde die Lib dennoch korrigieren. Danke für den Tipp!
Hallo Zoltan, deine Lib hat mich dazu bewegt, endlich eine MEGA128 Platine zu ätzen und mir einen Datenlogger zu basteln. Die benötigten Teile müsste eigentlich nächste Woche kommen. Könntest du evtl. den aktualisierten Code hier veröffentlichen - dann könnte ich nämlich eine Fehlerqelle schon im Voraus ausschalten. Vielen Dank für Deine Mühe. Thomas
Hi Thomas, es hat sich nur die spi.c geändert. Falls die beim Testen bugs begegnen, kannst du sie dann bitte hier posten? Gruss, Zoltan
hallöchen, wen's interessiert: ein weiteres FAT16 findet ihr hier: http://alumnus.caltech.edu/~pje/rdcf2.txt
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.