also ...
ich wusel nun schon seit tagen und nächten rum, da ich eine sd-speicherkarte von kinston mit 128 mb und 3,3volt mit meinem 5 volt
mega32 ansprechen will.
zunächst bin ich da ganz locker ran, da bisher alles was ich mit den megas von atmel machen wollte gefunzt hat. habe also sofort versucht, die fat-funktionen zu implementieren. hat nicht geklappt und gab auch probleme mit dem von mir verwendeten prozessor..
bin also auf dem weg... back to the basics .. und habe folgenden code verwendet:
Code:$Regfile = "M32def.dat" $Crystal = 8000000 $HWStack = 32 $SWStack = 32 $FrameSize = 64 $Baud = 9600 Declare Sub Sramdump(byval pwsrampointer As Word , Byval Pwlength As Word) $Include "Config_MMC.bas" '$Include "Config_XRAMDrive0.bas" ' Zum Testen mit dem Simulator If gbDriveError <> 0 then Print "MMC/SD Initialisierung fehlgeschlagen" end Endif Dim bError as Byte Dim aBuffer(512) as Byte ' SRAM-Bereich für den Transfer Dim wSRAMPointer as Word ' Adress-Pointer für den Drive... Routine Dim lSectorNumber as Long ' Variable für Sektor-Nummer ' Adresse des Buffers in die Variable wSRAMPointer =VarPtr(aBuffer(1)) ' Die ersten 100 Sektoren ausgeben For lSectorNumber = 0 to 100 bError = DriveReadSector( wSRAMPointer , lSectorNumber) ' Konnte der Sektor eingelesen werden? if bError > 0 then Print "Drive Fehler: " ; bError ; " bei Sektor " ; lSectorNumber exit for endif Print "Sektor " ; lSectorNumber ' Sektor ausgeben SRAMDump wSRAMPointer, 512 next end Sub Sramdump(byval pwsrampointer As Word , Byval Pwlength As Word) ' Dump a Part of SRAM to Print-Output #1 ' pwSRAMPointer: (Word) Variable which holds the address of SRAM to dump ' pwLength: (Word) Count of Bytes to be dumped (1-based) Local Lsdump As String * 16 Local Lbyte1 As Byte , Lbyte2 As Byte Local Lword1 As Word , Lword2 As Word Local Llong1 As Long If Pwlength > 0 Then Decr Pwlength For Lword1 = 0 To Pwlength Lword2 = Lword1 Mod 8 If Lword2 = 0 Then If Lword1 > 0 Then Print " " ; End If End If Lword2 = Lword1 Mod 16 If Lword2 = 0 Then If Lword1 > 0 Then Print " " ; Lsdump End If Llong1 = Lword1 Print Hex(llong1) ; " " ; Lsdump = " " Lbyte2 = 1 End If Lbyte1 = Inp(pwsrampointer) Incr Pwsrampointer Print Hex(lbyte1) ; " " ; If Lbyte1 > 31 Then Mid(lsdump , Lbyte2 , 1) = Lbyte1 Else Mid(lsdump , Lbyte2 , 1) = "." End If Incr Lbyte2 Next Print " " ; Lsdump End If Incr Pwlength End Sub
das programm soll ja nur die karte initialisieren und einen sector per com ausgeben. es endet aber immer mit:
MMC/SD Initialisierung fehlgeschlagen
ich habe verschiedene codes ausprobiert. auch assembler und c.... bin von spi hard auf spi soft und hin und her.
es geht einfach nicht.
mittlerweile bin ich der meinung, dass von meiner seite aus alles 17-fach überprüft ist und ich komm nicht weiter.
kann es sein, dass kingston sd´s den spi-modus nicht unterstützen ?
weiss jemand noch was ..
hat jemand nen code fürn 32er, der garantiert läuft ?
bitte massiv um hilfe
gruss







Zitieren

Lesezeichen