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?
Gast
#936312
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???
Gast
#936633
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
Gast
#936644
Edith: Du hast auch eine ziemlich hohe Taktfrequenz mit 16 Mhz. 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?