www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MMC Karte an 18f458


Autor: Strephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus

hat da keiner nen Plan von?

Autor: [dws] Diewithasmile (dws)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: [dws] Diewithasmile (dws)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Remo Gwerder (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Remo Gwerder (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch die Hardware.

Antwort schreiben

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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.