dann stimmt die initialisierung der SPI nicht.
scheinbar ist der Port als Ausgang konfiguriert
und du ziehst den auf 0 bzw. 5V
Die Karte sollte ja nur die 3V3 ausgeben als Highpegel.
Dein Programmablauf gefällt mir
persönlich auch nicht so besonders ... goto meide ich
wie der Teufel das Weihwasser ... Do Loop Until ist
mir persönlich sympatischer
Code:
$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 64
$baud = 9600
Declare Sub Sramdump(byval Pwsrampointer As Word , Byval Pwlength As Word)
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
do
$Include "Config_MMC.bas"
'$Include "Config_XRAMDrive0.bas" ' Zum Testen mit dem Simulator
If Gbdriveerror <> 0 Then
Print "MMC/SD Initialisierung fehlgeschlagen"
End If
loop until Gbdriveerror <> 0
do
' 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
End If
Print "Sektor " ; Lsectornumber
' Sektor ausgeben
Sramdump Wsrampointer , 512
Next
loop
End
seltsamerseise wird die SPI aber in der Lib deklariert:
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
Spiinit ' Init SPI
Lesezeichen