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







 
			
			 
					
					
					
						 Zitieren
Zitieren

Lesezeichen