Hallo!
ICh bin gerade dabei, mit (Atmega8, asm, 8Mhz) eine SD-Karte zu
beschreiben.
Nach der erfolgreichen Initalisierung (SPI-Mode) , habe ich die
Blocklänge mit CMD16 auf 512 gelegt, und will jetzt erstmal 512
Testweise Daten an die Karte schicken. Als Antwort sollte ich ja bei
Nullsetzten der obersten drei bits 0x05 bekommen (Data Response TOKEN).
Ich krieg abe immer andere Werte, manchmal 0x01, manchmal 0x40,
manchmal 0x08 ,...
Woran kann das ligen?
hier ein Code-Ausschnitt (ich weiss, nicht besonders elegant, soll ja
uch erstmal nur funktionieren...
1 | ldi Datum1, 0x58
|
2 | ldi Datum2, 0x00
|
3 | ldi Datum3, 0x01
|
4 | ldi Datum4, 0xE1
|
5 | ldi Datum5, 0x39 ;ab position 123193, hab ich mit Tiny Hexer als ersten block rausgefunden, der nur 0xFF hatte...
|
6 |
|
7 | rcall Kommando
|
8 | ;warten n bissl
|
9 | ldi temp2, 15
|
10 | clr temp3
|
11 | lp10:
|
12 | ldi temp1, 0xFF
|
13 | rcall sende
|
14 | dec temp2
|
15 | brne lp10
|
16 | clr temp2
|
17 |
|
18 | ;//Sendet Start Byte an MMC/SD-Karte
|
19 | ldi temp1, 0xFE
|
20 | rcall sende
|
21 |
|
22 | st0:
|
23 | ldi temp1, 'M' ;als Testdatn mal 512 M's
|
24 | rcall sende
|
25 | inc temp2
|
26 | cpi temp2, 255
|
27 | breq st1
|
28 | rjmp st0
|
29 |
|
30 | st1:
|
31 | clr temp2
|
32 | inc temp3
|
33 | cpi temp3, 2
|
34 | breq st2
|
35 | rjmp st0
|
36 |
|
37 | st2:
|
38 | ldi temp1, 'M'
|
39 | rcall sende
|
40 | rcall sende
|
41 | ;jetzt sinds 512 bytes
|
42 | ldi temp1, 0x00
|
43 | rcall sende
|
44 | ldi temp1, 0x00
|
45 | rcall sende
|
46 | ;die beiden CRC's
|
47 | ;und ende
|
48 |
|
49 | EMPFANG:
|
50 |
|
51 | ldi temp1, 0xFF
|
52 | rcall sende ;//Wartet auf ein gültige Antwort von der MMC/SD-Karte
|
53 | in temp1, SPDR
|
54 | cpi temp1, 0xFF
|
55 | breq empfang
|
56 | cpi temp1, 0x00
|
57 | breq empfang
|
58 | rcall lcd_number_hex ; hier ist die Anzeige, sihe oben im Text
|
59 |
|
60 | ;////////////////////////////////////////////////////////////////////////////////////////////////////////
|
61 | lp9:
|
62 | rjmp lp9
|