Hallo Ihr lieben, ich wende mich in äussester Verzweiflung an euch... Ich probiere seit einigen Tagen eine MMC Karte mit meinem Mega16@16Mhz (SPI Teiler 128) anzusprechen. Ich verwende AVR GCC und die MMC Lib von Stefan Seegel. Ich kann die MMC Karte prima initialisieren. Sprich sie liefert bis dahin immer die richtigen antworten. Wenn ich aber von Ihr lesen will, einen 512b Block oder einfach nur die CID, fliege ich an folgender Funktion raus: unsigned char res=0xff; unsigned long i=0; while((res != 0xFE) && (i < 0xFF)) { //wait for startbyte (0xFE) mmc_send_byte(0xFF); res=SPDR; i++; } Ich bekomme also quasi kein Go von der Karte. Hat jemand eine Idee woran das liegen könnte? Danke für eure Hilfe.
Nachtrag: Ich habe jetzt rausgefunden das die Karte statt 0xFE 0x05 zurückgibt. Ich finde nur leider nirgendwo eine Info was diese Antwort bedeutet. Im Sandisk Sheet ist dazu auch nichts. Hilfee!
5 bedeutet MMC_SUCCESS, aber vor dem Auswerten muß die Bitmaske 0x1f drauf, so dass als response 0x15 rauskommt. Vermutlich fehlen der Karte irgendwo Wartezyklen.
Also ich kenne deine Libary nicht. Ich hab mir selber mal was geschrieben und dort werden die Karten im SPI Mode ausgelesen. Das funktionierte bisher mit jeder Karte, mit einer Ausnahme. Sandisk! Ursache war das die ein paar Takte mehr brauchten bis sie sich dazu bequemen das Response Byte rauszuschieben. Man sieht das wenn man einfach mal mehr von der Karte liest als sie eigentlich liefern sollte und sich die Bytes mal anschaut. Olaf
Erstmal danke für die Tipps. Ich werde mal noch ein paar Warezyklen einbauen. Ich habe aber den dringenden Verdacht, das es an meiner hardware liegen muss. Ich habe Software und Hardware SPI ausprobiert. Und die Lib die ich verwende, wird von mehreren Usern eingesetzt... Ich habe auch schon 3 verschieden Karten von verschiedenen Herstellern ausprobiert. Kann es sein das meine Signalleitungen zu lang sind? Sind vom Controller bis zur MMC ca. 12cm Kupfer. 8cm davon über Drähte zum MMC Board(Testschaltung). Ist das evtl. zu lang für SPI? Evtl. aüssere Einwirkungen? Sollte bei 128kHz nicht so schlimm sein) Müssen da irgendwo noch Kondensatoren an Miso,Mosi,Sck gegen Masse, zum entstören? Hab in Referenz Schaltungen keine gefunden. Danke.
Ich meinte nicht Wartezyklen, sondern das die Karte selber etwas laenger braucht bis sie ihr Antwortbyte schickt, das heisst man muss in der Zeit weiter munter mit SCK klappern. Das R1 Byte kommt dann ein oder zwei Bytes im Datenstrom versetzt, vorher sendet sie FFh. Wenn du aber wirklich mehrere Karten von VERSCHIEDENEN Herstellern hast so sollte es nicht daran liegen, ausserdem muessen mindestens die einfachen dinge die CSID lesen, oder Blocklaenge auf 512Byte, klappen. Karten von Hitachi scheinen mir am gutmuetigsten. Ich selbst betreibe die Karte an etwa 20cm FLachbandkabel mit 200khz SPI-Takt. In der Tat ist der Takt bei laengeren Kabeln kritisch, von mehreren Mhz kann ich bei meiner Kabellaenge erstmal nur traeumen. Wenn du zweifel hast mach es so langsam wie es geht und teste dann. Mach auf jedenfall direkt an der Karte einen 100nF fuer die Versorgungsspannung. An den anderen Leitungen sind dagegen Kondensatoren eher schaedlich weil du damit deine Kabelqualitaet eher verschlechterst. BTW: Hat schon jemand eine Liste mit der Zuordnung ID-Bytes zu hersteller gefunden? Oder kann meine noch etwas erweitern? switch (CID.MID) { case 0x06 : sprintf(dummy,"Hitachi"); break; case 0x00 : sprintf(dummy,"Infineon"); break; case 0x03 : sprintf(dummy,"Panasonic"); break; case 0x04 : sprintf(dummy,"Extrem Memory"); break; default : sprintf(dummy,"Unbekannt %2xh",CID.MID); break; }; Olaf
Danke Olaf, das mit dem 100nf werde ich nachher mal probieren. Aber die Taktrate hab ich momentan schon am minimmum. (Hab auch schon mit 4Mhz Quarz probiert...)
Moin, hat noch jemand die Liste der MID -> Hersteller erweitert? Meine 128er SanDisk SD Karten sagen übrigens 0x03 und nicht 0x05. Was ist nun richtig? Beides? Oder hat SanDisk was mit Panasonic zu tun? Eine 128er Traveler meldet sich übrigens mit 0x01. Gruß, Daniel
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.