Forum: Mikrocontroller und Digitale Elektronik CMD24 - Datenblock auf SD-Karte schreiben


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Moritz G. (moritz-)


Lesenswert?

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

von Moritz G. (moritz-)


Lesenswert?

Hier im Forum schreibt jemand:

"Nachdem ich Clock nun direkt (also mit 5V) an die Karte
gelegt habe, sind alle Antworten protokoll-getreu wie erwartet. Laut
MMC-Spec muss die CLK-Flankensteilheit <10ns sein."

Könnte es daran liegen? Ich habe einen Spannungsteiler --1kOhm --- 
<1kOhm-

Die direkten 5V an die Karte sollen der nix ausmachen. Gegenhypothesen?

Viele Grüsse,
Moritz

von Rudolph (Gast)


Lesenswert?

Hmm, also ich habe SCLK und DataIn über einen Spannungsteiler von 
4k7/6k8 an die SD-Karte gelegt welche ich auf 3,0V bei 2 MHz SPI von 
einem ATMega32 aus betreibe.
Data-Out und CS habe ich über einen Level-Shifter mit einem BSN20 FET 
angeschlossen.

Nun ja, die Widerstände sind in Bauform 0805 und die Länge der 
Leiterbahnen beträgt jeweils weniger als 2 cm.

Eine pauschale Antwort ist also nicht wirklich sinnvoll.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.