So. Lesen und schreiben funktioniert fast.
Hab einen Block auf die Karte geschrieben und dann zurück gelesen. Die gelesenen Werte stimmen auch mit dem überein was ich geschrieben habe, bis auf zwei Byte.

das 4. und 5. byte enthalten werte die ich mir nicht erklären kann. vielleicht hat ja einer von euch ne ahnung wie dass zu stande kommen könnte.


Code:
$regfile = "m128103.dat"
$crystal = 7372800
$baud = 9600

Config Portd.0 = Output : Set Portd.0                       'Pin für die Displaybeleuchtung
Config Portd.2 = Output

Cskarte Alias Portd.2 : Set Cskarte


Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 16 , Noss = 0 , Interrupt = Off

Spiinit

'*********** Variablen *********************************************************
Dim Cmdbyte As Byte
Dim Cnt As Byte
Dim Fktcnt As Byte
Dim Cntword As Word
Dim Antwortr1 As Byte
Dim 512byteblock(512) As Byte
'********* Sektornummer bestimmen **********************************************
Dim Sektor As Byte
Dim Adresse As Long


'Adresse bestimmen
Adresse = Sektor * 512

'************** FUNKTIONEN *****************************************************


'************ Kartenreset ******************************************************
Kartenreset:
Do
   Cnt = 0
   Set Cskarte

   Cmdbyte = &HFF
   For Cnt = 1 To 10
   Spiout Cmdbyte , 1
   Next Cnt
   Cnt = 0

   Reset Cskarte
   Cmdbyte = &H40
   Spiout Cmdbyte , 1

   Cmdbyte = &H00
   For Cnt = 1 To 4
   Spiout Cmdbyte , 1
   Next Cnt
   Cnt = 0

   Cmdbyte = &H95
   Spiout Cmdbyte , 1

   Cmdbyte = &HFF

   Do
   Spiout Cmdbyte , 1
   Spiin Antwortr1 , 1
   Incr Cnt
   Loop Until Cnt = 255 Or Antwortr1 = &H01
Incr Fktcnt
Loop Until Antwortr1 = &H00 Or Fktcnt = 255

   Set Cskarte
Return


'************ Karte initialisieren *********************************************
Karteninit:
Do
   Cnt = 0
   Reset Cskarte

   Cmdbyte = &H41
   Spiout Cmdbyte , 1

   Cmdbyte = &H00
   For Cnt = 1 To 4
   Spiout Cmdbyte , 1
   Next Cnt
   Cnt = 0

   Cmdbyte = &HFF
   Spiout Cmdbyte , 1

   Do

   Spiin Antwortr1 , 1
   Incr Cnt
   Loop Until Cnt = 255 Or Antwortr1 = &H00
Incr Fktcnt
Loop Until Antwortr1 = &H00 Or Fktcnt = 255

   Set Cskarte
Return

'************ Reset und Initialisierung zusammen *******************************
Karteaktivieren:
   Gosub Kartenreset
   Gosub Karteninit
Return

'************ 512 Byte Block lesen *********************************************
Blocklesen:
   Cnt = 0
   Reset Cskarte

   Cmdbyte = &HFF
   For Cnt = 1 To 5
   Spiout Cmdbyte , 1
   Next Cnt

   Cmdbyte = &H51
   Spiout Cmdbyte , 1

   Spiout Adresse , 4

   Cmdbyte = &HFF


   Do
   Spiout Cmdbyte , 1
   Spiin Antwortr1 , 1
   Incr Cnt
   Loop Until Cnt = 255 Or Antwortr1 = &H00
   Cnt = 0

   Do
   Spiout Cmdbyte , 1
   Spiin Antwortr1 , 1
   
   Incr Cntword
   Loop Until Cntword = &HFFFFFFFF Or Antwortr1 = &HFE

   If Antwortr1 < &HFE Or Antwortr1 > &HFE Then
   Return
   End If

   Spiin 512byteblock(1) , 512

   Spiin Antwortr1 , 1
   Spiin Antwortr1 , 1

   Set Cskarte

Return


'************ Block schreiben **************************************************
Blockschreiben:
   Cnt = 0
   Reset Cskarte

   Cmdbyte = &HFF
   For Cnt = 1 To 10
   Spiout Cmdbyte , 1
   Next Cnt

   Cmdbyte = &H58
   Spiout Cmdbyte , 1
   Spiout Adresse , 4

   Cmdbyte = &HFF

   Do
   Spiout Cmdbyte , 1
   Spiin Antwortr1 , 1
   Incr Cnt
   Loop Until Cnt = 255 Or Antwortr1 = &H00


   Cnt = 0
   Do
   Spiout Cmdbyte , 1
   Waitms 1
   Incr Cnt
   Loop Until Cnt = 100

   Cmdbyte = &HFE
   Spiout Cmdbyte , 1

   Spiout 512byteblock(1) , 512

   Cmdbyte = &HFF
   Spiout Cmdbyte , 1
   Spiout Cmdbyte , 1

   Cnt = 0

   Do
   Spiout Cmdbyte , 1
   Spiin Antwortr1 , 1
   Incr Cnt
   Loop Until Antwortr1 = 5 Or Cnt = 255

   Waitms 50

   Set Cskarte

Return