Hi,
ich habe folgenden Versuchsaufbau: atmega 128 über spi an einer SD Card.
initialisieren funktiniert wunderbar, CID Register auslesen usw auch.
leider kann ich jedoch keine Blöcke vom Speicher lesen. Ich habe die
Blocksize auf 512 gestellt und will auch einen block (addresse 0x00-)
also genau einen Block lesen.
Das kommando wird von der SD erkannt, aber wenn ich dann auf das
starttoken der Daten warte 0xfe laue ich in meinen Timeout rein und der
ist wirklich großzügig bemessen, sonst braucht kein befehl so lange.
hier der Codeausschnitt:
1 | char readBlock_SD(char * cmd, char* buffer, int length){
|
2 |
|
3 | int timeout = 5000;
|
4 | // Send Command
|
5 | if(cmd_SD(cmd))
|
6 | // Return if an Error occurred
|
7 | return -1;
|
8 |
|
9 | // Waiting for initial transmission
|
10 | while(SPI_RECEIVE() != 0xfe && timeout){
|
11 | timeout--;
|
12 | }
|
13 |
|
14 | // Timeout brake
|
15 | if(timeout == 0)
|
16 | return -2;
|
17 |
|
18 | // Read value
|
19 | for( int i = 0; i < length; i++){
|
20 | buffer[i] = SPI_RECEIVE();
|
21 | }
|
22 |
|
23 | // CRC
|
24 | SPI_RECEIVE();
|
25 | // Close block
|
26 | SPI_RECEIVE();
|
27 |
|
28 | return 1;
|
29 |
|
30 |
|
31 | }
|
wie gesagt bim timeout springt er raus.
ran kann das liegen??
Gruß