Hallo,
Hier Source Code2.1!!
Getestet mit einer 256MB SD Karte von San Disk!
Gibt es für 25 bei Saturn im Angebot!
256MB SD von San Disk
128MB SD von Transcend
128MB SD von Lexar.
128MB SD von Hama.
32MB MMC von ExtremMemory
Mfg Ulrich
Hi,
Wie siehts mit der Dateierstellung aus? - scheint mir etwas
komplizierter als lesen.
Hat jemand bereits Dateien mit dem Microcontroller erstellt (mit oder
ohne FAT)?
MfG Daniel
Hallo,
Das schreiben ist auch ganz einfach! Nagut man sollte schon eine Datei
mit dem PC erstellen sonnst ist es ein bisschen schwerer :-).
Also man brauch nur die gleiche dann Routine wie beim lesen einer Datei
benutzen, und anstelle block lesen umschreiben auf block write.
Also ganz einfach ;-)
Mfg Ulrich
Hallo Uli,
ich habe da ein kleines Verständnisproblem. Du schreibst:
>Hier Source Code2.1!!>Getestet mit einer 256MB SD Karte von San Disk!>Gibt es für 25 bei Saturn im Angebot!>256MB SD von San Disk>128MB SD von Transcend>128MB SD von Lexar.>128MB SD von Hama.>32MB MMC von ExtremMemory
Der Source kann "nur" FAT16, d.h. bei einer BlockSize von 512 Byte
können maximal 65535x512 = 32765,5 KB = ca.32MB verwaltet werden.
D.h., dass bei einer 256MB-Card nur 32MB nutzbar sind? Oder gibt es die
Möglichkeit mit verschiedenen Partitionen zu arbeiten?
Nach meinen Kenntnissen, ist es mit einer BlockSize von 512Byte ab
FAT32 möglich mehr als 32MB zu verwalten - oder?
Grüße
MyMeisle
Hallo,
Danke für die Antworten.
Naja manchmal hat man halt einen Tunnelblick - oder, als Antwort auf
Volkmar's Beitrag, einfach ein Brett vor dem Kopf!
Eigentlich bin ich zu alt für PISA, oder einfach nur jung geblieben...
Gruß
MyMeisle
Hallo Uli,
I've adapted your source to a msp430 cpu and it works !!! On the PC i
use a problem called DirectDisk to check the content but this program
doesn't seem to read the MBR at sector 0 but the BootSector (maybe a
windows thing).
I've created a file as big as could fit on the the sd-card (64MB) and
i'm trying to first read this file and later write in it.
My question is, how would i read this entire file ? You're demo
main.c gives me part of the file (i've filled the file on the PC with
1234567890).
Thanks in advance,
Norbert.
Hallo Leute,
ich habe folgendes Problem ich habe versucht eine MMC Karte an einen
ATMega16 zu hängen!
Nun habe ich das ganze wie in der Anbindung Optimal von der Homepage
von Ulrich gefertigt allerdings habe ich die BC847 gegen BC549
ersetzt!
Leider kann die Karte nicht gefunden werden!
Kann mir jemand sagen was ich falsch gemacht habe?
Mfg Nicole
Hallo ich habe das gleiche Problem,
Ich verwende einen AtMega16 habe 3 Karten zum testen von denen ich
keine zum laufen bringe, Geregelte Spannung über Festspanungsregler
3V.
Hier mal mein verwendeter Code und die Einstellungen die ich
vorgenommen habe:
Zunächst einmal habe ich in der Datei mmc.h folgendes eingebunden:
#if defined (_AVR_ATmega16_)
#define SPI_DI 5 //Port Pin an dem Data
Output der MMC/SD-Karte
angeschlossen ist
#define SPI_DO 6 //Port Pin an dem Data Input
der MMC/SD-Karte
angeschlossen ist
#define SPI_Clock 7 //Port Pin an dem die Clock
der MMC/SD-Karte
angeschlossen ist (clk)
#define MMC_Chip_Select 3 //Port Pin an dem Chip
Select der MMC/SD-Karte
angeschlossen ist
#define SPI_SS 4 //Nicht Benutz muß aber
definiert werden
#endif
da ich ja einen AtMega16 benutz.
SPI Mode hab ich Aktiviert.
nun im main Programm hab ich folgendes.
#include "lcd.h"
#include "mmc.c"
#if defined (_AVR_ATmega16_)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
#endif
int main(void)
{
lcd_init(LCD_DISP_ON); //LCD Display Inizalisieren
lcd_clrscr(); //LCD Display löschen
lcd_puts(" System Start ");
mmc_init();
while ( mmc_init() !=0) //ist der Rückgabewert ungleich NULL ist ein
Fehler
aufgetreten
{
lcd_clrscr();
lcd_puts(" Keine SD-Karte ");
}
lcd_clrscr();
lcd_puts("System Gestartet");
for(;;)
{
}
}
Vielleicht kann mir ja jemand helfen wäre echt cool!
Mfg Erika
Hi,
ich habe mich ja schon vor längerem mal drangemacht das ganze auf das
low-Level-Niveau von Assembler umzuschreiben :).
Nachdem ich mich jetzt entschlossen habe, nen MP3-Player zu baschteln,
hab ich das halt wieder rausgekramt, und mich meiner Ängste gestellt,
die da waren:
Init.
Die einzige Möglichkeit, wie ich auf meinem Terminal "MMC
initialisiert" draufbekomme ist:
Resetleitung des M32 auf GND
Karte ist ausgesteckt
Reset "befreien" (AVR springt an und sagt "Hallo")
Dann die MMC-Karte (32MB) reinschieben.. mit Glück.
Ich würde gern wissen, ob du das Problem auch hattest und ob es einfach
nur Timing Probleme sind, denn ich finde sonst keinen Unterschied der
Codes. Achso: es springt bei mir der "Timeout" beim CMD0 an.. aus
verzweiflung und auch einem Problem mit der Init im andren Thread hab
ich mal Timeout auf 5.000 erhöht, ohne Erfolg.
Ist der ASM einfach zu schnell :)
So nebenbei: wenn er dann wirklich mal "initialisiert" anzeigt, dann
liest er mir wie ihm befohlen Sektor 384 aus und zeigt mir 512Byte Text
an, d.h. er ist dann doch richtig initialisiert.
Und mit deinem C-Code geht es in fast allen möglichen Konstruktionen
:(
Ich werd mich dann wohl bald von nem Kühlkörper stürzen heul
Schonmal ein Danke ;)
dave
Hallo @dave
Hier ein Assembler Programm aus alten Tagen für einen MP3 Player mit
MMC und VS1001. Ist weder Dokumentiert noch sauber geschrieben (hat
aber Funktioniert)
Mfg Ulrich
@Uli
mhmm hab da nen kleinen Fehler in deiner Lib gefunden.
In der mmc_init() steht:
> //SPI Bus auf max Geschwindigkeit> SPCR = SPCR|(0<<SPR0)|(0<<SPR1);> SPSR = SPSR|(1<<SPI2X);
Um die SPR-Bits zu clearen müßte es aber heißen:
SPCR &= ~((1<<SPR0) | (1<<SPR1));
Hallo Leute,
ich versuche vergebens das Speichern und das Auslesen von MMC Karten.
Ich möchte nur ein paar int werte speichern nix aufwendiges, möchte
auch kein fat benutzen.
nun hab ich dies über mmc_write_sector und mmc_read_sector versucht,
aber ich scheine dort einfach nicht weiterzukommen. Ich versuch das
jetzt schon 3 Tage ohne Erfolg, leider hab ich mir auch schon zwei
Karten gehimmelt :-(.
Ich bin noch etwas unerfahren in C Programmierung, deswegen stellen
sich mir noch ein paar fragen zu den Befehlen ich hoffe ihr könnt mir
diese beantworten oder einen beispiel code zu meinem Problem geben das
ich das auch mal verstehe.
In der Doko steht:
char mmc_write_sector (unsigned long Block, char *Buffer)
dafür könnte ich jetzt einsetzen
unsigned long Block = 1; // bis 65536 da 32 MB-Speicherkarte
unsigned char Buffer [512];
ich denke dies sollte so stimmen,
nun habe ich in meinem Code folgendes stehen
int faktor = 0;
int faktorx = 0;
jetzt möchte ich diese beiden werte gerne speichern und später wieder
auslesen.
meine frage nun wie bekomme ich meine werte an den Buffer?
????
mmc_write_sector (Block, Buffer);
und
mmc_read_sector (Block, Buffer);
????
Das wäre das erste, nun noch die Fragen da ich kein FAT benutzen,
möchte wie sieht es mit der Karte selber aus muss die FAT formatiert
sein oder wie kann ich sie so löschen das ich sie nutzen kann?
Ich hoffe ihr helft mir!
Vielen Dank Sandra
@Erika
Ich schätze mal das du die MMC DO und DI Leitungen vertauscht hast,
sollte sonst einwandfrei funktionieren, ich habe getestet mit 128MB
Hama, 64MB Lexar, 16MB Nokia und einer 32MB Nokia.
Was auch noch sein könnte (war bei mir so und ich hab fast verzweifelt,
wenn du den eingang vom Spannungsregler am STK500 hast mit 5V mess mal
die Spannung an der MMC Karte, ich hatte da nur 2,2V hat bei mir nur
mit der Hama Karte funktioniert die andern wollten nicht! Und wenn du
ihn wie ich jetzt über ein externes Netzteil betreibst achte darauf das
du die GND Leitungen auch brückst sonnst geht auch nix, war jedenfalls
bei mir der Fall.
Sandra:
> leider hab ich mir auch schon zwei> Karten gehimmelt :-(.
Ich hatte auch eine "geröstet" - Bei ein paar dutzend mA wurde die
sogar richtig warm. Nachdem ich beim großen C (atelCo) eine neue
gekauft hatte, habe ich versehentlich die kaputte in den Kartenleser
gelegt. Und siehe da: Die Daten waren da, alles war gut!
Daß die Dinger einiges abkönnen, hatte ich mir gedacht, aber daß die
sich "selbstheilen" können.....
Ich habe auch vor, Daten direkt auf die Karte zu schreiben. Wie ich die
unter (beliebigen) Unix auslesen kann, ist mir klar. Aber was macht
Windows damit?
Ich will Daten im "CSV" Format schreiben, damit die einfach in
(Open)Office eingelesen werden können.
Gruß,
Falk
Tag,
ich hab auch mal wieder 1 Frägchen...
Warum ist bei "Read_Dir_Ent":
unsigned char Entry_Count (also 8bit)
unsigned int TMP_Entry_Count = 0 (also 16bit)
und dann:
if (TMP_Entry_Count == Entry_Count)
Du vergleichst nen 16er mit nem 8er... find ich unlogisch.
dave
Hallo,
Simmt ist ein bischen unglücklich, entweder int oder char!
Wer char wählt hat das Problem das ein Verzeichnis nicht mehr als 255
Einträge haben darf was selten der Fall ist ;-)
Der SourceCode funktioniert auch so bei der nächsten Version werde ich
es auf char ändern.
Mfg Ulrich
Hallo,
erstmal: schöner code, danke dafür :)
jetzt habe ich jedoch ein kleines Problem, das ganze auf meinem
Atmega16 zum laufen zu bekommen.
Ich erhalte über UART folgenden Text:
System OK
Karte gefunden!!
dann folgt scheinbar ein Reset und es geht von vorne los :(
Ich vermute es hat etwas mit dem EEprom zu tun?
Desweiteren konnte ich mit diesem Define nix anfangen, da ich weder im
datenblatt das mega128 noch 32 etwas dazu gefunden habe:
# define EICR EICRB
Würde mich über tipps freuen :)
Hallo,
EICR ist ExternalInterruptControlRegister beim Mega32 und Mega128
da ich in diesem SourceCode keine Interrupts benutze kann man dieses
ersatzlos löschen. Ich nehme mal an, das der Mega16 ein bisschen wenig
Speicher hat.
Mfg Ulrich
Tach,
bin grad dran meinen MP3 Player zu basteln (mit VS1011). Hab da
irgendwie ein Verständnissproblem mit dem CS Pin der MMC:
Ich sende der MMC Karte das Kommando 11 (READ), dann lese ich byte für
byte aus der MMC aus. Soweit ok. Auch habe ich festgestellt, dass es
der MMC nix ausmacht wenn man mal mittendrin den CS auf high zieht und
wieder auf low drückt, es geht dann einfach da weiter wo man aufgehört
hat. Allerdings scheint die MMC immer noch auf die Clock Leitung zu
reagieren; wenn ich CS der MMC auf high ziehe und dem MP3 IC ein
Kommando schicke (4 Bytes lang) und ich dann mit dem lesen von der MMC
weitermachen will bin ich bereits 4 Bytes weiter, grummel... Gehört das
so ??? Eigentlich sollte doch die MMC, oder allgemein ein SPI Slave,
schlafen wenn dessen CS low ist ? Diese MMC hier scheint aber lediglich
den Datenausgang hochohmig zu schalten.
Wie ist das dann mit dem Kommando 12 (STOP) ? Habe versucht das der MMC
mittendrin zu senden, ist ihr aber egal, die will erst ihre 512 Bytes
losbekommen. (Sau).
Im Datenblatt steht beim Kommando 11 (READ_DAT_UNTIL_STOP): Reads Datra
stream from the card, [...] until a STOPTRANSMISSION (Kommando 12)
follows.
Häää ?? Check ich nicht. Innerhalb eines Blockes will die MMC kein
Kommando annehmen, und nach 512 Bytes kommen nur noch 0xFFs raus, man
muss also für jeden Sektor wieder das Kommando 11 schicken.
Ob sich hier jemand findet der mir das eben ins Licht rücken kann ?
Stefan
CS ist für mehrere Karten an einem Bus. So kann man einen großen
Speicher aus mehreren kleinen Karten bauen.
Das Lesen/Schreiben funktioniert generell nur in 512 Byte-Blöcken.
Hi,
@uli
Ich hab den Source mal versucht zu compilieren, allerdings scheint dies
nicht zu klappen, da ich nicht die selbe gcc version benutze wie du.
Ich hab schon zwei verschiedene Versionen ausprobiert und bei beiden
kriege ich fehler, weil der gcc irgendwelche includes nicht finden
kann.
Desshalb; welche Version verwendest du?
mfg Nik
Hallo,
hab noch ein bischen was rausgefunden wegen der CS Sache: Während eines
Lesevorgangs (Block-Lesen-Modus) wird mit dem CS Pin lediglich der
Datenausgang hochohmig geschaltet.
@Rolf:
Lesen geht auch mit anderen Blockgrößen als 512 Bytes ! Ich hab in
meinem MP3 Player die Karte auf 32 Bytes gestellt, da der VS1011 eben
immer 32 Bytes anfordert. So kann ich pro Anforderung ein Lesekommando
senden und die 32 Bytes rüberschieben und kann danach den SPI Bus
wieder für was anderes verwenden.
Möge das den MP3/MMC Bastlern eine Hilfe sein :-)
Stefan
@Stefan:
Einige Karten können auch andere Blockgrößen verarbeiten, aber der
Standard schreibt nur 512 Byte-Blöcke vor. Damit mein Treiber mit allen
Karten arbeiet, verwende ich nur 512 Byte-Blöcke.
@Rolf:
Kannst du mal ausprobieren ob du eine Karte hast die NICHT andere
Blockgrößen als 512 Bytes LESEN kann ? Laut Hitachi-Standard ist
lesemäßig eine andere Blockgröße immer unterstützt (aber nicht über 512
Bytes-Grenzen hinweg). Schreibmäßig hingegen steht im Standard dass man
nur 512er Blöcke schreiben kann, hier gibts aber einige die auch hier
variable Blockgröße verarbeiten können.
Stefan
@Stefan:
Keine Lust und derzeit bin ich auf Arbeitsplatzsuche weil arbeitslos.
Zudem nützt es wenig 20 Karten zu finden mit denen es geht; es gibt
sicherlich einige mit denen es nicht geht. Schließlich halten sich die
Karten nur ungefähr an den Standard, so daß ich da einiges ausprobieren
mußte, damit der Treiber bei allen getesteten Karten funktioniert.
Ein Kollege, der mal Tipps zu MMC/SDC von einem Kumpel in den Treiber
(für MSP430) einbaute, hat damit sogar das Schreiben sabotiert; es
wurde dadurch eine Woche lang nur Datenmüll geschrieben. Auch deshalb
ist da mein Motto "Never change a running System." und nur Patches
akzeptieren, die auch getestet wurden.
Ok, hmmm, werd mir vermutlich dann nen Workaround einfallen lassen
müssen...
Noch was anderes:
Wie kann man eigentlich am PC die CSD/CID Register auslesen ??
Irgendwie muss dass ja gehen, Windows selbst tut das ja um zu wissen
wie es die Karte formatieren muss. Aber wie ??
Stefan
Dafür brauchst Du die entsprechenden Bibliotheks-Funktionen (falls es
die gibt) oder mußt die Ausgaben in den Treiber reinschreiben (sowas
habe ich mal gemacht auf ARM9).
Der CRC wird wird im SPI Modus der MMC/SD Karten nicht verwendet (außer
beim allerersten Kommando nach dem Einschalten welches die Karte in den
SPI Mode schaltet). Man CRC aber auch für den SPI Mode einschalten.
Woran sollte man drehen, wenn Schreibzugriffe nicht arbeiten? Es gibt
zwar sowohl beim Lesen wie auch beim Schreiben keinen Fehler,
allerdings lassen sich von der MMC nur Nullen lesen.
Das Lesen von CSD und CID arbeitet ohne Probleme (somit auch die
Initialisierung).
CID: 01 00 00 20 31 32 38 4D 42 01 30 01 3E 8D 48 2D
CSD: 8C 26 00 2A 17 59 81 E8 F6 DA FC E0 96 40 40 BD
Schon mal danke für eure Hilfe.
Mike
hallo,
ich verstehe nicht ganz wie das mit der FAT funktioniert.
anbei ein bild von der MBR, also sector 0 auf meiner SD card.
die sieht mehr als seltsam aus.
besonders das an der stelle 0x01C6, woe die VBR stehen sollte nur
buchstaben stehen.
mit der funktion FAT_ADDR() wird der wert 25933 zurück gegeben,
aber im sector 25933 ist nix.
grüsse
Hallo,
Zum erstellen eines Dateisystem auf der MMC Karte empfehle ich Linux!
Zuerst FDISK hier wird eine Partition eingerichtet Dateisystemtyp (6
FAT16). Danach wird diese mit MKDOSFS formatiert. Fertig!! Probleme mit
meinen FAT System gibt es nur, wenn die MMC Karte nicht partitioniert
wurde.
Mfg Ulrich
ähm..
ich kann meine SD card garnicht partitionieren.
unter datenträgerverwaltung kann man die SD card nur formatieren.
und mit partionsmagic ist die auch nicht zu sehen.
ich kann die nur formatieren.
ich hatte mal die sectoren wahllos beschrieben mit irgendwas.
kann es darum sein, das die nicht zu partitionieren ist ?
grüsse
Die Speicherkarten sind Mass Storage Devices; aus Software-Sicht gibt's
da keinen Unterschied zu IDE- oder SCSI-Festplatten.
Das MS-Windoof hat damit aber einige Probleme: Wenn man formattiert,
wird automatisch partitioniert und ungefragt alles plattgemacht, was
außer der ersten Partition sonst noch auf der Karte ist! Außerdem kann
MS-Windoof nicht auf das zugreifen, was hinter der ersten Partition
liegt, auch wenn es nur primäre Partitionen mit FAT sind.
Und das Superfloppy-Format bekommt MS-Windoof auch nicht hin.
Deshalb ist Linux besser.
Achso, davon hatte ich mich nicht angesprochen gefühlt :)
Ein Dateisystem möchte ich garnicht haben, wollte lediglich die Befehle
read_sector (...) und write_sector (...) nutzen. Darauf bezog sich auch
meine Frage.
hallo,
soweit ich nun herausgefunden habe, hat eine MMC die mit windows FAT
formatiert wurde keine MBR, sondern die volume bootrecord fängt im
sector 0 an.
demnach klappt der code von Ulrich doch nur, wenn ich die FAT mit linux
mache, also so wie es auf eine HDD wäre, mit MBR und VBR.
ist das richtig ?
grüsse
@marcelKo:
Du meinst das Superfloppy-Format, bei dem die ganze Karte als erste und
einzige Partition verwendet wird, so wie auf einer Floppy. Da entfällt
der MBR.
hi,
ne, ich meine das ganz normale FAT ( FAT16 ), wenn ich die MMC mit
windows formatiere.
im anhang ein bild von dem sector 0 von meiner SD card.
das sieht aus wie die VBR und nicht wie die MBR.
grüsse
hi,
das bedeutet also,
ich muss zuerst mal schauen, ob an der VBR andresse was sinnvolles
steht. fals da eine fehlermeldung steht, dann nehme ich VBR offset von
0x00 und fals da ein offset steht, nehme ich den offset ?
froi
ich hab nun endlich mal FAT vollständig verstanden. das war eine
schwere geburt ;)
grüsse
hallo,
nun hab ich ein seltsames problem.
ich hab nun auch eine nokia 32MB mmc getestet.
das ist es so wie es sein sollte.
der MBR steht im sector 0 mit dem offset auf den VBR, der in sector 64
ist.
wieso ist das bei der SD card anderes ?
da ist kein MBR vorhanden, sondern nur der VBR im sector 0.
ich hatte anfangs wahllos die sectoren beschrieben bei den ersten tests
mit der SD card, sodass die digitalcam die karte nicht mehr erkannt hat.
auch nach windows formatierung hat die digicam die karte nicht erkannt.
erst nachdem ich die karte mit dem avr formatiert hatte, indem ich alle
sectoren mit 0 gefüllt hatte, hat die digicam die karte wieder erkannt.
kann es sein, das bei den ersten test, wo ich die sectoren wahllos
beschrieben habe, das ich da irgendwelche protect bits gesetzt habe ?
grüsse
Hallo,
Eine gekaufte MMC/SD Karte hat eine Partition, wird die
Partitionstabelle beschadigt kann es vorkommen das Windows die MMC/SD
karte Formatiert ohne eine Partitionstabelle anzulegen, also im Grunde
wie eine Diskette behandelt. Um sicher zugehen fdisk und mkdosfs unter
Linux benutzen.
Mfg Ulrich
hallo,
das problem mit dem MBR hat sich nun erledigt.
es war tatsächlich ein write protect drauf.
mit dem command MMC_CLR_WRITE_PROT sieht nun die karte aus wie normal.
grüsse
Hallo!
Ich habe die ARM bzw AVR Sourcen von Ulrich Radig auf einen 16Bit
Fujitsu Microcontroller portiert. RAW MMC Zugriff mittels der
Funktionen in mmc.c funktioniert gut. FAT Zugriff jedoch leider
überhaupt nicht.(kein Directory Listing und keine index.htm)
Zur Simulation des EEProm habe ich den selben Trick wie in den ARM
Sourcen verwendet:
1
#define EE_CLU_SIZE (&DUMMY_EEPROM[0])
2
#define EE_CLU_OFFSET (&DUMMY_EEPROM[2])
3
#define EE_VBRA (&DUMMY_EEPROM[4])
4
#define EE_FAT_OFFSET (&DUMMY_EEPROM[6])
5
6
unsignedcharDUMMY_EEPROM[10];
7
8
#define eeprom_read_byte(a) (unsigned char)*(a)
9
#define eeprom_write_byte(a,b) *a = b
10
11
#define eeprom_read_word(a) (unsigned int)*(a)
12
#define eeprom_write_word(a,b) *a = b
Die SD Karte habe ich folgendermassen partitioniert/formatiert:
Disk /dev/sda: 2 heads, 60 sectors, 1009 cylinders
Units = cylinders of 120 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 1009 60510 6 FAT16
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@edison mnt]# mkfs.msdos -F 16 -f 1 -R 1 -v -S 512 /dev/sda1
mkfs.msdos 2.8 (28 Feb 2001)
/dev/sda1 has 2 heads and 60 sectors per track,
logical sector size is 512,
using 0xf8 media descriptor, with 121020 sectors;
file system has 1 16-bit FAT and 4 sectors per cluster.
FAT size is 119 sectors, and provides 30217 clusters.
Root directory contains 512 slots.
Volume ID is 42f0e634, no volume label.
Inhalt nach Cluster_Data_Store sieht folgendermassen aus:
Cluster info: 0x01 00 81 00 3C 00 01 00 00 00
Sector 0 der SD Karte sieht folgendermassen aus:
Data at address 0:
0xEB3C906D6B646F7366730000020401000100020000F877003C000200000
0000000D9010000002954DFF042202020202020202020202046415431362020200E1FBE5
B7CAC22C
0740B56B40EBB0700CD105EEBF032E4CD16CD19EBFE54686973206973206E6F742061206
26F6F746
1626C65206469736B2E2020506C6561736520696E73657274206120626F6F7461626C652
0666C6F7
0707920616E640D0A707265737320616E79206B657920746F2074727920616761696E202
E2E2E200
D0A000000000000000000000000000000000000000000000000000000000000000000000
00000000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000
000000000000000000000000000000000000101000601FCF03C000000BCD801000000000
00000000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000
055AA
und als String:
ë<mkdosfsøw<Ù)TßðB FAT16 ¾[|¬"Àt
V´»Í^ëð2äÍÍëþThis is n
ot a bootable disk. Please insert a bootable floppy and
press any key to try again ...
üð<¼ØUª
Hat jemand eine Idee was ich noch falsch machen könnte? (Sourcen habe
bereits 2x verglichen) Ist die SD-Karte richtig formatiert?
Vielen Dank für Eure Hilfe
LG Fritz
Ich habe eine Index.htm und test.txt und ein Verzeichnis test auf der
16MB MMC. Mit Einer SD-Card 16MB passiert auch das gleiche.
CPU: ATMEGA128L 8MHz 5V, Karte hat 3,3V.
Mit dem Editor von XP erstellt.
Mit der V2.4 von U. R. bekomme ich folgende Ausgabe über Hyperterm mit
Baud 19200:
System OK
Karte gefunden!!
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Directory
Directory Ende
FERTIG!!
Ist das Richtig? Wie muß den die Ausgabe ausehen?
Wenn es nicht richtig ist was ist falsch?
Wieso sind soviele Nullen ?
Und warum wird kein Verzeichnis angezeigt?
mfg
Dirk
Hallo,
Sorry, ich hatte was von mega16 im Kopf.
Dann liegt es wohl daran das auf der MMC/SD Karte keine Partition
vorhanden ist oder kein FAT16 Filesystem.
(meistens keine Partition da mit Windows nur formatiert wurde, ich
empfehle Linux fdisk und mkfsdos)
Gruss
Ulrich
Hallo zusammen,
ich wollte eigentlich das SD Karten Modul "µMMC" von Rogue Robotics
(=>www.roguerobotics.com) an meinen µC anbinden, um damit 7 - 9 Bytes
an Daten alle 10ms abspeichern zu können. Nun musste ich leider
feststellen, dass das nicht ganz so funktioniert, da mir das Modul erst
nach einer Zeit von ca. 160ms das ok gibt, weitere Daten zu senden.
Meine Frage ist nun: ist es überhaupt möglich mit einer derartigen
Karte (64MB SD-Karte, FAT16 oder FAT32) eine Schreibgeschwindigkeit von
ein paar ms für das Schreiben von 7 - 9 Bytes hinzubekommen oder ist das
eher aussichtslos? Weil dann würde ich mich eben selbst an die
Implementierung des Befehlssatzes für das Schreiben auf SD karten
machen um bessere Zeiten zu erreichen.
MFG und Danke schon mal für eure Beiträge!
Christoph
Hi,
mach doch einfach einen Puffer von etwa 160/10 * 10 Byte und schreib
immer erst, wenn der Puffer voll ist. Je groeßer dieser Puffer wird,
desto besser sollte auch der Schreibdurchsatz sein.
Gruss Tobias
Frage habt dir alle die FAT16 mit Linux gemacht?
Oder gibts auch ein Tool welches man unter XP benützen kann , welches
auch für diesen MMC Anwendungfall klappen soll?
Bei mir funktioniert das Lesen der MMC auch mit Windows-FAT-16.
Einfach ausprobieren. Kaputt gehen kann deswegen nix. ;-)
Spendiert bitte der MMC einen 3,6V Spannungsregler. Mit den zwei Dioden
klappte es bei mir überhaupt nicht.
Gruß Elektrikser
So ich habe unter Winodow mit format LW: /fs:FAT /a:512 eine 16MB MMC
und eine 16MB SDCard formatiert.
Mit der Speicherbelegung wird 6,9 MB angezeigt -> MMC
Bei der SD-Karte sind es 14,9 MB -> SD-Card.
Bei beiden bekomme ich egal ob ich 3,3V oder 3,6V habe.
" Keine Karte gefunden "
Wenn ich die Karte mal rein und rausziehe, bekomme ich ab und zu als
Meldung
karte gefunden.
dann kommt nichts, oder ab und zu
Karte gefunden!!
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Directory
Directory Ende
FERTIG!!
Im Hex Editor wird MSDOS 5.0 bla,bla FAT16 angzeigt und als letztes
auch "fehlermeldung weiter mit gedrückter Taste"
Noch was einmal die Meldung - Karte nicht gefunden schneller oder mal
langsamer auf dem Bildschirm.
DO ist direkt am µC angeschlosen Pb.0
der Rest über Spannungteiler angeschlossen.
Wenn ich keine Karte drinne habe , kommt auch
Karte gefunden!!
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Directory
Directory Ende
FERTIG!!
oder nur "Karte gefunden"
Die spannungstabi wurde mit R und Z-Diode gemacht - 3,62V und der Rest
hat 3,6V oder sonst bei 3,3V - 3,3V.
So wo könnte das Problem liegen?
Hallo,
in den Thread
http://www.mikrocontroller.net/forum/read-4-256520.html
hab ich ein kleines Tool gestellt mit dem man einen Master Boot Record
als Datei erzeugen kann. Selbigen kann man dann anschließend mit einem
Disk-Hex-Editor auf die MMC Sektor 0 schreiben.
@Dirk:
Ist denn sichergestellt dass auf der Karte auch eine Partitionstabelle
vorhanden ist und nicht nur der Volumebootrecord auf Sektor 0 ist ?
@alle:
Wie könnte man der FAT Implementierung beibringen zu unterscheiden ob
in Sektor 0 ein VBR oder ein MBR ist ? Haben ja dummerweise beide den
"Magic-Code" 0x55AA am Ende.
Stefan
@seegel:
Also FAT16 Type4 habe ich jetzt auf der 16MB MMC drauf gemacht und
unter XP Formatiert.
C:\DOKUME~1\DIRKM~1>format k: /fs:FAT /a:512
Legen Sie eine neue Diskette in Laufwerk K: ein,
und drücken Sie die EINGABETASTE.
Der Typ des Dateisystems ist FAT.
Überprüfung von 6 MB
Die Dateizuordnungstabelle (FAT) wird initialisiert...
Volumebezeichnung (11 Zeichen, EINGABETASTE für keine)?
Formatieren beendet.
7.245.824 Bytes Speicherplatz auf dem Datenträger insgesamt
7.245.824 Bytes auf dem Datenträger verfügbar
512 Bytes in jeder Zuordnungseinheit
14.152 Zuordnungseinheiten auf dem Datenträger verfügbar
16 Bits in jedem FAT-Datensatz.
Volumenummer: A481-2714
Wenn ich jetzt die Karte einsetze bekomme ich folgende Meldung
System OK
** Keine MMC/SD Karte gefunden!! **
Karte gefunden!!
Da war es, sonst kommt nicht - habe nach 3min abgebrochen.
Auf der Karte ist eine datei mit den Namen mmc.txt 21K gross
Was müsste ich sehen - der Name der Datei?
liegt das Problem jetzt an der MMC oder an der µC Hardware ?
Anbei die FAT16 type 4
Nachtrag :
System OK
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
Karte gefunden!!
kommt auch wenn ich keine drin habe
Wenn ich die Karte drin habe kommt meist:
** Keine MMC/SD Karte gefunden!! **
Verstehen tu ich es nicht.
Hmm, klingt mir irgendwie nach einem Hardwarefehler, dass z.B. irgendwas
an den Pins floatet, aber auch das mit den 8MB kommt mir komisch vor,
schließlich ist es ja eine 16MB Karte. Stell sicher dass du den MBR
auch wirklich auf den physikalischen Sektor 0 der Karte schreibst, wenn
man mit einem Diskeditor anstelle des physikalischen Laufwerkes nur die
Partition öffnet ist im Diskeditor der Sektor 0 der erste Sektor der
geöffneten Partition...
Aber vermutlich hat der Fehler (noch) nichts mit der
Partitionsgeschichte zu tun, der generelle Zugriff auf die MMC Karte
hat offensichtlich schon nicht richtig hin.
Was anderes fällt mir ansonsten auch nicht mehr ein.
Stefan
OK - ich überarbeite die Hardware mal und melde mich dann.
Frage : wie sieht denn deine Schaltung aus ist es die gleiche wie bei
Ulrich R. auf der HP hat, oder sind die PINs direkt am µC?
Muss noch bei DO ein Pullup oder Pulldown rein habe im Moment keinen
drin. Kann der Spannungteiler die Ursache sein?
Und wie sieht deine Karte aus ? bekommt du beim Formatieren die ~16MB
raus und mit was und mit welchen einstellungen Formatierst du das ?
Nach deiner Antwort werde ich mal - Experimentieren -
Noch einer ein Tip?
Meine Schaltung:
µC <-> MMC
MISO <-> DO
MOSI <-> DI über Spannungsteiler
SS <-> CS (wichtig!) über Spannungsteiler
CLK <-> CLK über Spannungsteiler
Betriebsspannungserzeugung von 3.3 Volt mit LM317
16 MB MMC mit meinem Tool partitioniert (eine Partition, Typ 4 aus
welcher dann Windows FAT12 gemacht hat)
Stefan
Hi,
ich hab mich jetzt auch mal an die SD-Card mit dem hier verwendeten
Code rangewagt. Ich hab leider noch ein Problem mit den SD-Cards:
Während der Initialisierung bekomme ich als Antwort auf CMD0 bei einer
MMC Card wie erhofft sofort eine 0x01 zurück, jedoch bei einer
SD-Card(SanDisk 64MB) beim mehreren Durchläufen erst eine 0x3F, und
anschließend zyklisch 0x05 und 0xBF zurück. Hat jemand eine Ahnung, was
hier abgeht?
Hat jemand für mich eine Beschreibung aller CMDs? Die Links, die hierzu
schon gegeben wurden, sind nicht zu erreichen.
Danke Günther
Hallo Ulli,
danke für Deine prompte Hilfe. Ich benutze schon Deine aktuelle Version
2.4 (Mit Korrektur laut des Forums auf Deiner homepage).
Das Hitachi datasheet hatte ich übersehen, jetzt weiss ich wenigstens
über die CMDs bescheid. Ich habe aber immer noch das Problemchen mit
der SD Card von SanDisk (eine zweite gleichen Typs reagiert genauso).
Die Pegel sind alle sauber und sind auf 0V und 3,3V. Wie gesagt: mit
einer Canon 16MB MMC Card funzt es, nur die SanDisk SD Card muckt rum
und schickt eine andere response.
Schöne Feiertage
Günther
Hallo,
ich habe den Code von Ulrich Radig auf den MSP430 portiert. Ging
am Anfang recht problemlos. Die Karte wird auch gefunden. CSD
Register wird ausgelesen.
Allerdings habe ich dann Probleme beim Auslesen des Rootdirectory.
Der Code von Ulrich berechnet das ab Sector 576 das Rootdirectory
liegen sollte. Es liegt aber ab Sector 551. Wenn ich die Berechnung
deaktiviere und fix 551 reinschreibe, wird das Root Verzeichnis
ausgelesen.
Was kann an der Berechnung schief laufen?
Hier noch ein paar Daten:
Hinten angehängt immer die ausgelesenen Daten.
volume_boot_record_addr 64
cluster_size 1
fat_offset 2
cluster_offset 592
CSD 8c, 26, 0, 2A, 0F, 59, 1, E9, F5, D9, 83, E3, 92, 40, 40,
D3
U08 BS_jmpBoot[3];
U08 BS_OEMName[8];
U16 BPB_BytesPerSec; //2 bytes 00 02
U08 BPB_SecPerClus; 01
U16 BPB_RsvdSecCnt; //2 bytes 00 02
U08 BPB_NumFATs; 00
U16 BPB_RootEntCnt; //2 bytes 02 c0
U16 BPB_TotSec16; //2 bytes f4 f8
U08 BPB_Media; f3
U16 BPB_FATSz16; //2 bytes 00 3f
U16 BPB_SecPerTrk; //2 bytes 00 ff
U16 BPB_NumHeads; //2 bytes 00 40
U32 BPB_HiddSec; //4 bytes 0 0 0 0
U32 BPB_TotSec32; //4 bytes 0 0 0 0
Hallo,
nachdem ich mit dem Partitionieren von MMC / SD-Cards unter XP bzw.
Knoppix fast wahnsinnig geworden bin, war ich so frei, Ulrichs Code
dahingehend zu ergänzen. Damit ist man unabhängiger von der
Partitionierungs/Formatierungsart...
Evtl. Kritik gerne an mich ;-)
Viel Spass!
Dennis (der jetzt den Grill anwirft ;-)
Hallo!
Hat jemand erfahrungen mit einer Kingston 128MB SD-Card, bzw.
funktioniert diese überhaupt mit diesem Code? Würde mir gerne so eine
zur Verwendung mit diesem Code kaufen.
gruß,
Bernd
Hallo Bernd,
wenn man ernsthaft den Code von Ulrich in ein eigenes Projekt
integrieren möchte, sollte man das nicht unbeding davon abhängig
machen, o der Code mit DISER speziellen Karte läuft, bzw. es gibt
garantiert einige andere "Problemchen" bei der Umsetzung (SW und HW),
die die eine Karte zum unwichtigsten Glied der Kette werden lassen...
Ich habe inzwischen eine ganze Hand voll MMC und SD-Cards... Jedenfalls
funktionieren diese bei mir alle ausnahmslos mit Ulrichs Code +
Erweiterungen, wenn sie FAT16 formatiert sind (und die Hardware sauber
aufgesetzt ist). Eine Kingston ist leider nicht dabei (16MB "Canon",
jede Menge 32MB MMC Karten aus Handies, 256MB Toshiba, 512MB Toshiba).
Gruß,
Dennis
I have bought a 1Gb MMC for a nokia phone but it would not work in a
normal card reader, the write protection message was there all the
time. I have now put the card in my Nokia 9210i communicator and
formatted it. With the cable and software that is provided with the
communicator I can now download pictures and MP3 files to the MMC and
use it in a different phone.
Regards
John Wright
Hallo,
ich habe mal eine kurze Frage,
Ich bin gerade dabei ein GPS tracker zu bauen.
Das teil funktioniert auch schon soweit.
Ich möchte nun die anfallenden Daten in eine TXT datei auf meiner mmc
karte speichern. Wie kann ich den nun Char Datentypen in diese Datei
schreiben,(die datei existiert schon auf der Karte, mit Xp auf fat16
formatiert).
Ich wollte den Code von Uli benutzen.
Ach ja ich benutze ein Atmega8, da ich Portb schon für das Display
benutze würde ich gener Port c nehmen, geht das?
Schon mal vielen Dank
Gruß Peppe
Hallo,
wenn sich nur und ausschließlich die TXT-Datei auf einer FAT16
formatierten Karte befindet, geht das recht einfach. Ulis Code bietet
einmal die Möglichkeit, nach Dateinamen zu suchen. D.h. so kommt man
über den Directory-Eintrag ganz fat-konform zum Startcluster der Datei.
Da nur diese Datei enthalten ist und die Karte formatiert war, kann man
anschließend Block für Block (512 byte) mit den gewünschten daten
"hintereinander weg" schreiben. Anschließend kann man alles am PC
auslesen.
Für die Anbindung zum MEGA empfehle ich die Verwendung der SPI. Dieses
liegt leider an Port B... Software SPI wird von Ulis code auch
unterstützt, ich weiss aber nicht, wie zuverlässig das läuft.
Viel Glück!
Dennis
Danke für die Informtion,
das bedeutet ich muß die lese routine drin lassen, wollte eigentlich
drauf verzichten um Platz zu sparen,
werde das mal mit der Soft spi ausprobieren, die platine ist schon
geätzt und fast fertig bestückt, war mal wieder ein wenig voreilig...
Wenn ich das richtig verstanden habe muß ich dann ersteinmal die datei
suchen, mir den block ausgeben lassen und von da an alles
hintereinnader egschreiben lassen, richtig?
Gruß Peppe
Hallo,
Hmmm, ja, also Display, GPS und SD/MMC-Card könnte arg knapp werden,
mit nem MEGA8. Ich habe zusätzlich noch nen Beschleunigungssensor
auszuwerten und nen Lautsprecher für Pieptöne und damit nen MEGA16 zu
99% voll...
> mir den block ausgeben lassen und von da an alles
Ja, genau so ist es! Startcluster zurückgeben lassen, das übergeben an
die Schreibroutine und munter Block für Block (je 512 byte) schreiben,
wenn der Buffer voll ist.
Bis dahin ist es allerdings noch ein Stück des Weges... Schau erstmal,
dass die Initialisierung der Karte klappt (wie ist die
Spannungsversorgung? Alles 3,3V? Oder über "Pegelwandler"?)
Ciao,
Dennis
Nochmal eine Idee:
Du kannst auch das Startcluster der Datei auf der Karte am Rechner
ermitteln (z.B. mit Hex Workshop) und dann die Adresse fest in deinem
µC Code angeben. Dann brauchst Du die Leseroutinen und die FAT-Routinen
wirklich nicht, sondern nur die rel. kleine Schreibroutine (Write
Block). Funktioniert dann aber nur mit dieser Karte (und der
entsprechenden Formatierung). Sollte die Dateiposition am PC
(unbeabsichtigt)manipuliert werden, geht nichts mehr.
Dennis
Soetwas hatte ich mir auch schon überlegt, dass ich nur die write
routine nehem, wusste nur nicht wie ich an die blocknummer komme, danke
für den tip.
ich werde es erstein mal mit der minimal beschaltung von Uli
versuchen,wenn das nicht klappt dann werde ich ein 3,3V Stabi
einsetzen.
Sollte das richtig funktioniert, werde ich die Lcd routine wieder
rausschmeissen und mich auf die mmc beschränken.
Dann habe ich noch ein wenig platz für die Anbindung ans handy.
Am ende möchte ich ein Gps - logger haben, mit dem ich meine
Fahrstrecke und die Höchstgeschwindigkeit loggen kann und zusätzlich
die Möglichkeit habe, via Sms die aktuell position abzufragen.Im
Falle,dass mein Motorrad mal geklaut wird...
Gruß Peppe
Schon mal recht herzlichen Dank an Uli der seinen MMC code zur
verfügung gestellt hat.
Ich hab gerade versucht, die aktuellste Version von Ulrichs
MMC-Ansteuerung zu kompilieren. (Version 2.5) Leider kommen
Fehlermeldungen :-(
avr-gcc -c -mmcu=atmega32 -I. -g -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=main.lst -std=gnu99 main.c -o main.o
main.c: In function 'main':
main.c:65: warning: passing argument 1 of 'fdevopen' from incompatible
pointer type
main.c:65: error: too many arguments to function 'fdevopen'
main.c:103: warning: pointer targets in passing argument 1 of 'printf'
differ in signedness
main.c:110: warning: pointer targets in passing argument 1 of
'fat_search_file' differ in signedness
make.exe: *** [main.o] Error 1
Kann mir jemand sagen, was ich genau ändern muss??
Vielen Dank für eure Hilfe!!!
Gruß, Werner
Hallo,
ich habe mich jetzt ne Weile mit meiner 64 MB SD Karte und dem Code von
Ullrich Radig beschäftigt und habe nun ein kleines Problem.
Ich habe die SD Karte mit FAT in Win XP formatiert und eine Datei darauf
erstellt. Diese Datei kann ich mit dem Code von Uli auch auslesen und
mir über UART ausgeben. Nun wollte ich etwas in diese Datei
hineinschreiben aber dabei hängt sich alles auf.
Ich arbeite mir dem AVRstudio und einem Atmega32.
Das ist mein Code, mit dem ich versuche etwas auf die SD Karte zu
schreiben:
Nochmal Hallo,
ich muss mich etwas korrigieren. Wenn ich nur beschreiben will,arbeitet
der Atemga den Schreibbefehl ab aber die Datei auf der SD-Karte bleibt
trotzdem leer.
Wenn ich beschreiben und danach auslesen will, kommt der µC nicht mehr
zum auslesen, er bricht wohl irgendwie nach dem schreiben ab.
So Jungs, ihr könnt eure Glaskugeln wieder einpacken :). Das Problem
war, dass man ja nach dem beschreiben die Clustervariable wieder 0
setzen muss um sie danach auslesen zu können.
Trotzdem danke :)
Hallo, vielleicht kann mir hier jemand helfen.
Ich hab es doch tatsächlich hingekriegt, dass ich auf meiner SD Karte
das CSD Register umgeschrieben hab!!! Ich verzweifle bald! Gibt es ne
Möglichkeit, das wieder in den Urzustand zurückzuversetzen, oder es
durch einen Befehl oder ein kleines Programm zu verändern???
HILFE!!!!!!!!!!!
bekomme diese fehlermeldung mit winavr-c 22.01.2007 mmc-version 2.4 :
main.c:65: error: too many arguments to function 'fdevopen'
was muss hier geändert werden ?
1
int main (void)
2
{
3
//Initzialisierung der seriellen Schnittstelle
4
IOInit();
5
6
//öffnet einen kanal für printf
7
fdevopen (uart_putchar, NULL, 0);
8
9
//Initialisierung der MMC/SD-Karte
10
printf ("System OK\n\n");
11
while ( mmc_init() !=0) //ist der Rückgabewert ungleich NULL ist ein Fehler aufgetreten
12
{
13
printf("** Keine MMC/SD Karte gefunden!! **\n");
14
}
15
printf("Karte gefunden!!\n");
16
17
Cluster_Data_Store();//laden Cluster OFFSET und Size ins EEPROM
Ahoi,
habe mal 2 Fragen zur Anbindung der MMC:
Und zwar hab ich ne Beispiel-Schaltung und Code von VLSI mit der der DSP
von der Karte mit Daten versorgt wird. Dazwischen hängt ein AT89C51ED2.
Die haben die VCC der MMC über nen Transistor und Port geschaltet. So
wird die vor jedem Init der MMC aus/an geschaltet und dann CMD1
gesendet.
In meiner Schaltung ist das jetzt noch nicht drin, ist das unbedingt
notwendig?
Im PDF von Sandisk ist die Rede von 50ms Dauer nach PowerUp bis die
Karte CMD1 verarbeitetn kann. Wenn wir erst LCD und DSP initialisieren,
kriegt die Karte die ganzen Daten ja über die Bus-Leitung mit...
Weiter steht in dem PDF, daß die Karte für die Dauer der Identifikation
"nur" 400kHz Takt schafft. Also muß ich das Hardware-SPI für CMD1 und
CID-Auslesen erst runtertakten?
In dem Source von Ulrich ist das ja auch erst langsam geschaltet, bevor
er auf volle Geschwindigkeit umstellt.
Andere Frage:
Die Karte scheint jetzt auf die Commandos 0 und 1 zu antworten. Auf dem
Logik-Analysator sind die Bytes auch zu erkennen.
Nun haben wir das CID ausgelesen.
Gibts irgendwo ne Übersicht, mit den Manufacturer IDs?
Produktionsdatum könnte mit Dez/05 schon mal hinkommen.
Manufacturer ID wäre 2C, wer verbirgt sich dahinter?
hallo, irgendwo hatte uli mal ein winavr-c programm, wo er zur demo nur
den sector beschrieben hat und dann zur kontrolle wieder ausgelesen hat.
finde es nicht mehr.
wer kann hier helfen?
danke.
mfg
Ich stelle hier nochmal meine Frage aus einem anderen Thread.
Also die Karte reagiert auf Kommandos zum CDS,CID auslesen und
Blocklänge setzen funktionieren. Aus dem CSD haben wir die passende
Kartengröße (256MB) und aus dem CID den Namen (MMC) sowie
Produktionsdatum ausgelesen.
Aber:
Block Read und Block Write funktionieren nicht.
Beim Block Read quittiert die Karte das Read Kommando mit 0x00, dann
folgen aber nur noch 0xff. Es kommt kein Data Start 0xfe.
Block Write verhält sich ähnlich. Das Kommando wird bestätigt mit 0x00,
aber danach folgen nur 0xff.
Jemand eine Idee?
Noch ne kleine Frage:
Wie genau löst ihr das wenn Clustersize zB 4 Sektoren sind.
Erstmal den ersten Block in nen Buffer einlesen, verarbeiten und
ausgeben. Dann direkt Block2 nachlegen oder holt ihr direkt alle Blöcke
und speichert die irgendwo ab?
Hi @all,
probiere mich gerade an Ullis letzter (2.6) MMC Version.
Habe zwei Testboards.
1. Board: ATMega32 14.74MHz und einfache Spannungsteilerbeschaltung!
Funktioniert wunderbar. :)
2. Board: ATMega32L(!L!) (3,6V + Spannungsregler + 7,3728MHz)
Spannungsteiler (1,8k Widerstände) entfernt, da die Pegel eh schon sehr
niedrig waren! CS und DataIn kommen auch mit den entsprechenden Peglen
ca. 3,4V an der Karte an, aber leider liefert die Karte kein
Ausgangssignal!
Ob mir da evt. jemand weiterhelfen könnte?
Auch wenn der Beitrag schon ein wenig alt ist... ich verwende Version
2.7 auf einem Mega8, ohne FAT...
Es mag jetzt dämlich klingen, aber nicht mal die SPI Schnittstelle will
was tun... /SS hab ich als Ausgang gesetzt...
Beschaltung via SW SPI auf PortC gelegt... Verbunden sind die Pins mal
noch gar nicht... ausser auf den Logikanalysator... nur irgendwie kommt
da nix... Jetzt rätsel ich schon knappe 40 Kaffeeeinheiten...
Hallo allerseits... Ich hab Ulrichs Source Code Version 2.7 auf einen
Mega8 portiert...
Vllt nützts wem ^^
Warum genau diesen Source? Weil Ulrich einen schönen Programmierstil hat
^^
Hallo,
ist es eigentlich möglich die CID einer MMC/SD-Karte zu ändern
(CMD26!?)?
Gibts eine Software, mit der man die CID via einem normalen CardReader
auslesen kann?
Liebe Grüsse.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang