Hier ein Beispiel, welches Sektoren von der MMC/SD Karte einliest und auf der Seriellen Schnittstelle ausgibt.
Bei den Funktionen DriveReadSector und DriveWriteSector ist zu beachten, dass ein Adresspointer übergeben wird.
Das gibt den Funktionen die Möglichkeiten, jeden Bereich im SRAM auf die Karte zu schreiben, bzw vor dort zu überschreiben, ohne dass dort eine Variable deklariert sein muss. Soll jedoch in eine Variable (Byte-Array mit 512 Bytes) geschrieben werden, muss man zuerst mit VarPtr die Adresse auslesen (siehe dazu das Beispiel)
Für den Transfer vom SRAM auf die Karte ist die Funktion DriveWriteSector in gleicher Weise zu verwenden.Code:$Regfile = "M162def.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







Zitieren

Lesezeichen