Forum: Mikrocontroller und Digitale Elektronik MMC Karte an 18f458


von Strephan (Gast)


Lesenswert?

Hallo zusammen,

ich muss leider den 1000sten Thread zu dem Thema öffnen aber ich komme
irgendwie auf keinen grünen Zweig. Ich programmiere mit dem CCS
Compiler und möchte wie schon oben erwähnt eine mmc Karte ansprechen.
Genauer gesagt möchte ich in eine Container Datei schreiben. Hierzu
habe ich mir den Anfang der Datei im Hex Editor gesucht und versuche an
diese Adresse zu schreiben.
Nun habe Probleme mit meiner Schreibroutine:

int mmc_write_block( int16 iAdrH, int16 iAdrL)
{
   unsigned int16 i;

   output_bit(CS_MMC,0);
   delay_ms(1);

   mmc_send_command(0x58,0x4,0x2000,0xff);


   if((mmc_response(0x00))==1)return 3;

   //spi_read(0xff);
   //spi_read(0xff);

   spi_write(0xfe);        //Start Byte

   for(i=0;i<512;i++)      //Data
   {

      SPI_write('M');
   }

   spi_write(0xff);        // 2 byte CRC
   spi_write(0xff);

   if((SPI_READ(0xFF)&0x0F)!=0x05) return 2;

   if (mmc_response(0xff)==1)return 1;    //mmc busy??
   SPI_READ(0xff);
   output_bit(CS_MMC,1);
   SPI_READ(0xFF);


   return 0;


}
Die Routine gibt mir immer 0 zurück --> also müsste alles funktioniert
haben, allerdings ist meine MMC Karte leer.
Ich kann langsam nicht verstehen woran das liegt! Der Code ist ja fast
identisch zu dem Microchip Beispielcode
http://www.microchipc.com/sourcecode/
Die initialisierung vorher hat ohne Probleme geklappt.

von Stephan (Gast)


Lesenswert?

So lange hats gebrauch aber ich hatte im letzten Monat nicht viel Zeit.
Mein Programm schreibt jetzt auf die MMC, Allerdings allerdings nicht
an die Stelle deren Adresse ich übergebe sondern 32 Blöcke (16kByte)
vorher, das ganze wird ir langsam wirklich unklar

So schaut meine Command Routine aus, da mach ich doch nichts falsch
oder?

void mmc_send_command(unsigned char ucCom1, unsigned int32 iArg,
unsigned char ucCom2)
{

   SPI_WRITE(ucCom1);
   spi_write(make8(iArg,3));
   spi_write(make8(iArg,2));
   spi_write(make8(iArg,1));
   spi_write(make8(iArg,0));
   SPI_WRITE(ucCom2);


}

anstatt jetzt auf Stelle 270336 zu schreiben wird auf 253852
geschrieben. Kann das irgendwie mit meiner Container Datei zusammen
hängen? Wenn ich die Karte Frisch formatiere, tritt der gleiche Fehler
auch auf!

Gruß
Stephan

von Stephan (Gast)


Lesenswert?

Servus

hat da keiner nen Plan von?

von [dws] D. (dws)


Lesenswert?

Hallo,

hab leider (noch) keinen Plan....bin aber dran ;)

Hab hier einen PIC18F248 (also quasi identisch) an den ich eine SD
Karte angeschlossen habe.
Quäle mich gerade durch den Beispielcode von Microchip. Der läuft ja
leider nicht direkt auf dem CCS Compiler (wäre ja auch zu schön gewesen
;) )

gruss Matze

von Geri (Gast)


Lesenswert?

Hallo Matze

Schau doch mal unter http://www.microchipc.com/sourcecode/#mmc
Hier findest du ganz unten auf der Webseite auch Code für den CCS
Compiler.

Vielleicht hilft dir das ja weiter. Ulrich Radig hat zu diesem Thema
auch sehr viel geschrieben. Allerdings für einen anderen Controller,
ein grosser Teil der Software müsste aber eigentlich direkt
übertragebar sein.

Beste Grüsse und ich hoffe, es hilft dir ein wenig weiter
Geri

von [dws] D. (dws)


Lesenswert?

Dank Dir!

Hab den Wald vor lauter Bäumen nicht gesehen.....war mir sicher, der
Code für MMC wär nicht für den CCS Compiler gewesen und hab nicht
weiter nachgesehen...

gruss Matze

von Remo Gwerder (Gast)


Angehängte Dateien:

Lesenswert?

Hallo an alle hier.
Ich habe da evtl. eine Hilfe, aber leider auch gleich eine Frage. :-)
Dieser Code funktioniert bei älteren MMC's ohne Probleme. Aber wenn
ich jetzt neuere Karten Kaufe, muss ich immer zuerst alle testen. Das
klingt jetzt sicher bescheuert. Aber eigentlich sollten doch entweder
alle oder gar keine MMC Karten funktionieren. Natürlich gehen alle
Karten im Computer Card Reader. (Warum auch nicht....)
Also mit diesem Code funktionieren: (Kingston 128MB, Pretec 32MB,
Pretec 64MB, Sandisk 64MB)
Nicht funktionieren tun (Alle derzeit auf dem Markt befindlichen
SanDisk auch RS Versionen, extreMememory 128MB, Pretec 128> MB) Weitere
habe ich nicht gekauft, da mir klar wurde das bei meinem Code was nicht
stimmt. Aber eben ich probiere seit einer Woche mit meinem Oszi alles
zu vergleichen (Computer Card Reader <-> Meine 18F452 Version). Ich
bekomme beim CMD0 zwar meistens eine 1 zurück, aber das CMD1 bringt
alles erdenkliche ausser die 0 zurück. Übrigens die Hardware ist wie
üblich mit den Spannungsteilern 1k8 zu 3k3 auf 3.3 Volt gewandelt,
DataOut DataIn mit 2k2 auf VC3 gelegt. Ich würde mich wirklich sehr
freuen wenn hier jemand meine Sorgen teilen kann, oder sogar lösen
kann. Vielen Dank

von Remo Gwerder (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch die Hardware.

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.