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