PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SD/MMC Karte an ATMega8 will nicht initialisieren



Schokohoernl
27.02.2007, 11:13
Hallo!

Ich versuche hier verzweifelt ne SD Karte zu initialisieren. Mehr will ich grad granicht, bzw. zu mehr bin ich noch nicht gekommen.

Auf der Seite von Ulrich Radig ist ja auch das PDF mit den Timings. Genau das habe ich jetzt mal nachprogrammiert, aber es geht ums verrecken nicht.
Auch das Datenblatt das ebenfalls auf der Seite von Ulrich Radig zu finden ist, hat mir nicht sonderlich weitergeholfen, außer dass ich jetzt weiss, dass es nur 6Bit Befehle sind.

Hier aber erstmal mein Code:





$crystal = 8000000
$baud = 9600
$regfile = "M8def.dat"


Dim Dout As Byte
Dim Din As Byte
Dim I As Byte

Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.5 = Output

Config Pinb.4 = Input

Mmc_cs Alias Portb.2
Set Mmc_cs

Sck Alias Portb.5
Mosi Alias Portb.3
Miso Alias Pinb.4

Set Sck
Set Mosi
Set Miso 'Pull Up


Do
Gosub Mmc_init

Wait 1

Print Bin(din)
Loop



Mmc_init:

For I = 1 To 10

Dout = &HFF
Shiftout Mosi , Sck , Dout , 1 , 8 , 16

Next


Reset Mmc_cs

Dout = &H00
Shiftout Mosi , Sck , Dout , 1 , 6 , 16

Dout = &H00
Shiftout Mosi , Sck , Dout , 1 , 8 , 16
Shiftout Mosi , Sck , Dout , 1 , 8 , 16

Dout = &H95
Shiftout Mosi , Sck , Dout , 1 , 8 , 16


Shiftin Miso , Sck , Din , 1 , 8 , 16


Set Mmc_cs

Return


Ich sende also erst 80 Pulse, dann geht CS auf Low, anschließend CMD0 und so weiter.
Von der Karte kommt aber kein Fatz zurück. Die bleibt einfach stumm.

Elektrisch ist alles OK, kann auch mit dem Oszi wunderbar CS, Dout, und CLK anschauen.
Karte ist auch OK, da sie in meiner Digicam tut.

MfG

Schoko

P.S.: Hier die Timings von der SD-Karte: http://www.ulrichradig.de/site/atmel/avr_mmcsd/pdf/MMCSDTimming.pdf

for_ro
27.02.2007, 14:27
Willst du es unbedingt selber neu erfinden oder kannst du auch die CONFIG_MMC.bas und die MMC.LBX benutzen, in denen alles schon vordefiniert ist?
Klappt bei mir prima.

Gruß

Rolf

carlos_soost
27.02.2007, 14:40
der cmd0 ist falsch...der ist &H40. müsstest mal im datenblatt schauen. da steht das bei jedem befehl bit 7 auf eins sein muss. damit signalisierst du der karte einen befehl...

kannst die cmds am einfachsten berechnen indem du cmd +&H40 rechnest...

carlos_soost
07.03.2007, 14:03
hats funktioniert???