Hallo
Ich habe ein Programm geschrieben, welches daten auf eine sd karte
schreibt.
Mit textdatei(FAT16) usw. ...
Dieses Programm ist auch schon einwandfrei gelaufen (SKT501 +
vorgängerplatine)
nun habe ich für ein passendes gehäuse mein board neu gelayoutet(+EMV)
aber nun ist das problem da, dass ich einen datenoffset "addr" habe.
Dieses Poblem muss zwischen den makierungen auftreten den vor der
makierung 1 steht das richtige in der variable addr.
und das programm ist schon einwandfrei auf einem anderem board gelaufen
weiters ist interresant, dass der offset immer 49664 Bytes beträgt
kann mir jemand helfen(ist das wirklich ein masseproblem?? kann ich
irgendwie nicht glauben)
mfg
1 | char tmp;
|
2 | int a=0;
|
3 | char CMD24[] = {0x58,0x00,0x00,0x00,0x00,0xFF}; //Commando 24 zum schreiben eines Blocks
|
4 |
|
5 | /*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben,
|
6 | addr wird von Blocks zu Bytes umgerechnet danach werden
|
7 | diese in das Commando eingefügt*/
|
8 |
|
9 |
|
10 | addr = addr << 9; //addr = addr * 512
|
11 |
|
12 |
|
13 | addr = (addr + 266240); // OFFSET für Daten
|
14 |
|
15 |
|
16 |
|
17 | ////////////////////////////////////////////////////////////// MAKIERUNG1
|
18 | CMD24[1] = ((addr & 0xFF000000) >>24 );
|
19 | CMD24[2] = ((addr & 0x00FF0000) >>16 );
|
20 | CMD24[3] = ((addr & 0x0000FF00) >>8 );
|
21 |
|
22 | //Sendet Commando CMD24 an MMC/SD-Karte (Write 1 Block/512 Bytes)
|
23 | tmp = Write_Command_MMC (CMD24);
|
24 | if (tmp != 0)
|
25 | {
|
26 | return(tmp);
|
27 | }
|
28 |
|
29 | ////////////////////////////////////////////////////////////// MAKIERUNG2
|
30 | //Wartet einen Moment und sendet einen Clock an die MMC/SD-Karte
|
31 | for (a=0;a<100;a++)
|
32 | {
|
33 | tmp = Read_Byte_MMC();
|
34 | }
|
35 |
|
36 | //Sendet Start Byte an MMC/SD-Karte
|
37 | Write_Byte_MMC(0xFE);
|
38 |
|
39 | //Schreiben des Bolcks (512Bytes) auf MMC/SD-Karte
|
40 | for (a=0;a<512;a++)
|
41 | {
|
42 | Write_Byte_MMC(*Buffer++);
|
43 | }
|
44 |
|
45 | //CRC-Byte schreiben
|
46 | Write_Byte_MMC(0xFF); //Schreibt Dummy CRC
|
47 | Write_Byte_MMC(0xFF); //CRC Code wird nicht benutzt
|
48 |
|
49 | //Wartet auf MMC/SD-Karte Bussy
|
50 | tmp = 0;
|
51 | while (tmp != 0xff)
|
52 | {
|
53 | tmp = Read_Byte_MMC();
|
54 | }
|
55 | return(0);
|