Gast
#341636
Hallo an alle:
Also wie schon so viele vor mir, versuche ich nun, meine MMC Karte dazu
zu bringen, mit meinem mega32 zu kommunizieren.
Ich habe mir die Lösung von Ulrich Radig angesehen und möchte diese
verwenden, da sie mir im Vergleich zu anderen Lösungen noch die
einfachere zu sein scheint.
Ich habe mir auch schon Specs heruntergeladen (eine von Toshiba und
eine von Hitachi) und mir diese angesehen, trotz alledem gibt es da
eines, was ich überhaupt nicht kapiere und zwar:
Ich verstehe nicht, wie man herausfindet, wie ein bestimmter Command
Byte-mäßig auszusehen hat.
Ich habe gelesen, dass jeder Kommand grundsätzlich 6 Bytes lang ist und
habe mit die Command Tabelle von Hitachi angesehen, wo die Commands
beschrieben sind.
Daraus kann ich z.B.: entnehmen, dass der CMD24 einen Block auf die
Karte schreibt. Bei Argument steht da:
[31:0] Data Adress
So, ich nehme mal an , dass bedeutet, dass das 32 Bits (4 Bytes sind
mit der Adresse des Blocks, den ich schreiben möchte.
Aber wie komme ich darauf, wie die 6 Bytes des Befehls nun aussehen
müssen?
Ulrich Radig macht das in seiner Ansteuerung so:
unsigned char CMD[] = {0x58,0x00,0x00,0x00,0x00,0xFF};
/*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben,
addr wird von Blocks zu Bytes umgerechnet danach werden
diese in das Commando eingefügt*/
addr = addr << 9; //addr = addr * 512
CMD[1] = ((addr & 0xFF000000) >>24 );
CMD[2] = ((addr & 0x00FF0000) >>16 );
CMD[3] = ((addr & 0x0000FF00) >>8 );
Dass die Adresse mit 512 multipliziert wird, um die Anzahl der Blöcke
in Anzahl der Bytes zu verwandeln, versteh ich ja noch.
Was ich aber nicht mehr durchschaue ist:
Woher bekommt man den Wert des ersten und des letzten Bytes (0x58 bzw.
0xFF) ?
Und was genau passiert da beim Einfügen der Bytes in das Command.
Also wie diese ganzen Shifting Operationen arbeiten, weiß ich schon,
aber nicht die Idee des Programmes dahinter..
Bitte seid so freundlich und helft mir ein wenig weiter. Ich steh da im
Moment vor einer Mauer..