Hallo Leute,

ich habe eine SD-Karte an die HW-SPI eines Mega16 angeschlossen. Die Spannungsversorgung geschieht über LM317 mit entsprechende Widerständen (ziemlich genau 3,33V) und die Anpassung der SIgnale über Spannungsteiler.

Die Signale habe ich nachgemessen und sie betragen etwa 3,1V - das sollte für die Karte wohl durchaus als HIGH erkannt werden?!

Ich bekomme jedoch immer einen Initialisierungsfehler! An der Karte habe ich noch direkt einen kleinen Elko sowie 100nF Kerko angelötet, da mir das als zumindest nicht falsch erschien.
Die Leitungslängen betragen etwa 5cm.

Habe bereits 3 verschiedene Karten ausprobiert (16mb, 512mb, 1gb) und auch verschiedene Controller und es ändert nichts.

Wenn ich die Karte nach dem initialsierungsversuch aus meiner Testschaltung nehme und in meine Digitalkamera lege funktioniert sie einwandfrei, aber es befindet sich eine unlesbare Datei auf der Karte!!

Könnte sich jemand bitte mal anschauen ob in meinem Code irgendein Fehler steckt?

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)

Startmark:

$Include "Config_MMC.bas"
'$Include "Config_XRAMDrive0.bas" ' Zum Testen mit dem Simulator

If Gbdriveerror <> 0 Then
Print "MMC/SD Initialisierung fehlgeschlagen"
Goto Startmark
End If

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
   End If

   Print "Sektor " ; Lsectornumber

   ' Sektor ausgeben
   Sramdump Wsrampointer , 512

Next

Goto Startmark

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
in der config mmc stht das folgende:

Code:
'-------------------------------------------------------------------------------
'                         Config_MMC.BAS
'               Config File for MMC Flash Cards Driver
'        (c) 2003-2005 , MCS Electronics / Vögel Franz Josef
'-------------------------------------------------------------------------------
' Place MMC.LIB in the LIB-Path of BASCOM-AVR installation
'
'Connection as following
'MMC    M128/M103
'1      MMC_CS PORTB.0
'2      MOSI PORTB.2
'3      GND
'4      +3.3V
'5      CLOCK PORTB.1
'6      GND
'7      MISO, PORTB.3

' you can vary MMC_CS on HW-SPI and all pins on SOFT-SPI, check settings
' ========== Start of user definable range =====================================

' you can use HW-SPI of the AVR (recommended) or a driver build in Soft-SPI, if
' the HW-SPI of the AVR is occupied by an other SPI-Device with different settings


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

   ' define Chip-Select Pin
   Config Pinb.4 = Output                                   ' define here Pin for CS of MMC/SD Card
   Mmc_cs Alias Portb.4
   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.4 = Output                                   ' define here Pin of SPI SS
   Spi_ss Alias Portb.4
   Set Spi_ss                                               ' Set SPI-SS to Output and High for 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 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
Gbdriveerror = Driveinit()                                  ' Init MMC/SD Card

EDIT: auch wenn Ihr keine Fehler findet würde ich euch bitten hier wiederzugeben wo noch Fehler stecken könnten.