Hallo,
du hast zwei Möglichkeiten, auf der Karte abzuspeichern, einmal mit AVR-DOS oder mit DriveWriteSektor(). Extra kaufen musst du da nichts.
Bei AVR-DOS kannst du dann Files erzeugen, öffnen, überschreiben, hinten anhängen usw. Du brauchst wohl mindestens einen Mega32 dafür.
Mit DriveWriteSektor() kannst du einen Block von 512 Byte auf einen beliebigen Sektor der Karte schreiben. Mit DriveReadSektor() kannst einen Block einlesen.
Ich habe mal ein kleines Progamm angehängt, was einfach die ersten 1000 Sektoren einliest und ausgibt. Größe ist 1470 Byte.

Code:
$regfile = "M128def.dat"
$crystal = 16000000

$baud1 = 115200
Open "Com2:" As Binary As #1
Enable Interrupts

Dim Mmc_error As Byte
Dim In_ptr As Word                                          ' Address-Pointer for read
Dim In_sect As Long
Dim In_buffer As String * 512
Print #1 , "Wait for Drive"
'$include "Config_MMC.bas"
         Const Cmmc_soft = 1

         #if Cmmc_soft = 0

         ' --------- Start of Section for HW-SPI ----------------------------------------

            ' define Chip-Select Pin
            Config Pinb.6 = Output                                   ' define here Pin for CS of MMC/SD Card
            Mmc_cs Alias Portb.6
            Set Mmc_cs

            ' Define here SS Pin of HW-SPI of the CPU (f.e. Pinb.0 on M128)
            ' If an other Pin than SS is used for MMC_SS, SS must be set to OUTPUT and high for proper work of SPI
            ' otherwise AVR starts SPI-SLAVE if SS-Pin is INPUT and goes to LOW
            'Config Pinb.6 = Output                                   ' define here Pin of SPI SS
            'Spi_ss Alias Portb.6
            'Set Spi_ss                                               ' Set SPI-SS to Output and High por Proper work of
                                                                     ' SPI as Master

            ' HW-SPI is configured to highest Speed
            Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
         '   Spsr = 1                                       ' Double speed on ATMega128
            Spiinit                                                  ' Init SPI

         ' --------- End of Section for HW-SPI ------------------------------------------

         #else                                                       ' Config here SPI pins, if not using HW SPI

         ' --------- Start of Section for Soft-SPI --------------------------------------

            ' Chip Select Pin  => Pin 1 of MMC/SD
            Config Pinb.0 = Output
            Mmc_cs Alias Portb.0
            Set Mmc_cs

            ' MOSI - Pin  => Pin 2 of MMC/SD
            Config Pinb.4 = Output
            Set Pinb.4
            Mmc_portmosi Alias Portb
            Bmmc_mosi Alias 4

            ' MISO - Pin  => Pin 7 of MMC/SD
            Config Pinb.3 = Input
            Mmc_portmiso Alias Pinb
            Bmmc_miso Alias 3

            ' SCK - Pin  => Pin 5 of MMC/SD
            Config Pinb.7 = Output
            Set Pinb.7
            Mmc_portsck Alias Portb
            Bmmc_sck Alias 7

         ' --------- End of Section for Soft-SPI ----------------------------------------

         #endif

         ' ========== End of user definable range =======================================


         ' Error
         Const Cperrdrivereset = 225                                 ' Error response Byte at Reset command
         Const Cperrdriveinit = 226                                  ' Error response Byte at Init Command
         Const Cperrdrivereadcommand = 227                           ' Error response Byte at Read Command
         Const Cperrdrivewritecommand = 228                          ' Error response Byte at Write Command
         Const Cperrdrivereadresponse = 229                          ' No Data response Byte from MMC at Read
         Const Cperrdrivewriteresponse = 230                         ' No Data response Byte from MMC at Write
         Const Cperrdrive = 231
         Const Cperrdrivenotsupported = 232                          ' return code for DriveGetIdentity, not supported yet

         Waitms 1                                                    ' Wait some time before initialising MMC/SD
         Dim Gbdriveerror As Byte                                    ' General Driver Error register
         Dim Gbdriveerrorreg As Byte                                 ' Driver load Error-Register of HD in case of error
         Dim Gbdrivestatusreg As Byte                                ' Driver load Status-Register of HD on case of error
         Dim Gbdrivedebug As Byte
         $lib "MMC.LIB"                                              ' link driver library
         $external _mmc

'Hier werden als Test die ersten 1000 Sektoren der Karte eingelesen und auf den UART ausgegeben.
In_ptr = Varptr(in_buffer)
If Gbdriveerror = 0 Then
   Mmc_error = Driveinit()
   If Mmc_error = 0 Then
      Print #1 , "Driveinit Ok. "
      For In_sect = 0 To 1000
         Mmc_error = Drivereadsector(in_ptr , In_sect)
         If Mmc_error = 0 Then
            Print #1 , "ReadSector(" ; In_sect ; ") ok."    'Zum Inhalt drucken, Kommentare entfernen !!!!!!!!!!
            Print #1 , In_buffer                            'Dann wird es aber langsamer, 115200 baud beim übertragen
         Else
            Print #1 , "Error during ReadSector(" ; In_sect ; ") : " ; Mmc_error
         End If
      Next In_sect
   Else
      Print #1 , "Error during Driveinit(): " ; Mmc_error
   End If
End If

End
Damit du in Windows die Daten einlesen kannst, musst du vorher einen möglichst großen File auf die Karte schreiben. Dann suchst du dir den ersten Sektor von diesem File und von da ab schreibst du.

Damit es in Excel leicht wird, solltest du ein Trennzeichen zwischen deine Daten einfügen, z.B. ein Komma. Dann kannst du z.B. über "Externe Daten importieren" diese Werte in bestimmte Spalten einstellen.

Zwischenlagern im EEprom kannst du vergessen, da gelten die gleichen Einschränkungen wie auf der Karte.

Gruß

Rolf