kolisson
05.02.2007, 20:24
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:
$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
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:
$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