Hallo, ich bin dabei unter BASCOM eine SD-Karte zum laufen zu kriegen. Ih verwende folgenden Code: $regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 Dim Abuffer(512) As Byte ' Hold Sector to and from CF-Card Dim Wsrampointer As Word ' Address-Pointer for write Config Pinb.4 = Output ' define here Pin for CS of MMC/SD Card Mmc_cs Alias Portb.4 Set Mmc_cs 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 por Proper work of Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1 Spiinit ' Init SPI 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 Dim I As Word Dim Sectornr As Long Wsrampointer = Varptr(abuffer(1)) Input "Start?" , I Gbdriveerror = Driveinit() ' Init MMC/SD Card Print "INIT "; Print Gbdriveerror Do Input "Sector: " , Sectornr Print "Write sector:" For I = 1 To 512 Abuffer(i) = I And &HFF Print Abuffer(i); Print " "; Next I Gbdriveerror = Drivewritesector(wsrampointer , Sectornr ) 'dauert 25ms Input "Read sector" , Sectornr Gbdriveerror = Drivereadsector(wsrampointer , Sectornr ) 'dauert 8ms Print "Read "; Print Gbdriveerror For I = 1 To 512 Print Abuffer(i); Print " "; Next I Waitms 1000 Loop Nach dem Anschalten der Schaltung dauert es sehr lange bis erscheint, dass die SD-Karte nicht erkannt wurde. Anstatt von "Driveinit()" habe ih eben gerade "Drivecheck()" ausprobiert und sieht da, ich bekomme eine "0" (erkannt) zurück. ABER: zu früh gefreut. Nehme ich die SD-Karte aus der Schaltung bekomme ich trotzdem eine "0" zurück. Eine zweite Karte hab ich auchshon erfolglos getestet. Was könnt ihr mir noch empfehel was ich überprüfen sollte/könnte?
Ich würde sagen: Wenn Port B.4 alles alleine machen soll, wird das nichts werden. MfG Paul
Da stellt man ein, welcher Pin des µCs an dem "CS"-Pin der Karte ist und welcher Pin des µCs der "SS"-Pin ist. Übernommen habe ich den Code soweit von folgender Quelle: http://staff.ltam.lu/feljc/electronics/bascom/Speicherkarten_Low_Level.pdf Da der "SS"-Pin des µCs und der "CS"-Pin der Karte verbunden sind, sollte das doch soweit stimmen???
Warum sind dann im Code 2 Auswahlmöglichkeiten für MMC_CS und SPI_SS? PortB.4 wir im Programm einmal gesetzt und da bleibt er dann. Dann könntest Du auch die Anschlüsse MMC_CS und SPI_SS auf + Ub legen und das war es dann. ;-) MfG Paul
Sehr schön! Ich habe die Frequenz auf 4MHz runtergesetzt und die Deklarationdes SPI-SS Pins entfernt. Die Folge dessen war, dass ich eine "0" zurückbekam (erkannt!!!) als die SD-Karte steckte - und der Controller stehenblieb als die SD-Karte entfernt wurde. Vielen Dank für eure Ratschläge!
Jetzt kommt mir aber noch eine grundlegende Frage auf: Wenn ich beispielsweise die Zahl 5 Auf die Karte schreiben will, weiss ich nicht wie ich das anstellen soll. Aus der BASCOM Hilfe werde ich zu dem Befehl "Drivewritesector" nicht schlau. Kann mir wer helfen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.