Hallo liebes Forum,
für ein Schulprojekt habe ich eine Platine erstellt, die mithilfe eines
PIC24FJ64GA002 eine Micro-SD-Card beschreiben soll.
Folgenden Code habe ich dazu auf die Beine gestellt:
1 | int spi_send (char u)
|
2 | {
|
3 | SPI1BUF = u;
|
4 | while(SPI1STATbits.SPIRBF == 0);
|
5 | if (ucIndex < 180)
|
6 | {
|
7 | ucaInput[ucIndex] = SPI1BUF;
|
8 | ucIndex ++;
|
9 | }
|
10 | ucRec = SPI1BUF;
|
11 | return ucRec;
|
12 | }
|
13 |
|
14 |
|
15 | void spi_send_dummy (int k) //sendet einen 0xFF "k-mal" mit "CS = high" !!
|
16 | {
|
17 | CS = 1;
|
18 | while(k > 0)
|
19 | {
|
20 | k--;
|
21 | spi_send(0xFF);
|
22 | }
|
23 | }
|
24 |
|
25 | unsigned char spi_send_cmd (char cmd, char param1, char param2, char param3, char param4, char crc)
|
26 | {
|
27 | CS = 0;
|
28 | cmd = cmd + 0x40;
|
29 | spi_send (cmd);
|
30 | spi_send (param1);
|
31 | spi_send (param2);
|
32 | spi_send (param3);
|
33 | spi_send (param4);
|
34 | spi_send (crc);
|
35 |
|
36 | while((ucRec && 0x80) != 0)
|
37 | spi_send (0xFF);
|
38 |
|
39 | ucResponse = ucRec;
|
40 |
|
41 | spi_send_dummy(1); //lässt ein Dummy Byte durchlaufen, um der Karte clocks zu geben
|
42 | return ucResponse;
|
43 |
|
44 | }
|
45 |
|
46 | int main()
|
47 | {
|
48 | init();
|
49 | int i = 125; // 10ms bei 125kHz
|
50 | while(i--);
|
51 |
|
52 | CS = 1;
|
53 |
|
54 | spi_send_dummy (10);
|
55 | spi_send_cmd (0x00,0x00,0x00,0x00,0x00,0x95);
|
56 |
|
57 | if (ucResponse == 0x01)
|
58 |
|
59 | LED_ON = 1;
|
60 |
|
61 | else
|
62 |
|
63 | LED_ON = 0;
|
64 |
|
65 | while(1);
|
die Antwort durch die SD-Card sollte "0x01" lauten, allerdings spuckt
diese nur wahllose Daten aus. Ich verzweifle langsam, kann mir jemand
sagen was ich falsch mache??
vielen Dank im Voraus, Patrick U.