mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR+Bascom+SD


Autor: The Bozz (tk11)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde sagen: Wenn Port B.4 alles alleine machen soll, wird das 
nichts werden.

MfG Paul

Autor: The Bozz (tk11)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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/Spei...

Da der "SS"-Pin des µCs und der "CS"-Pin der Karte verbunden sind, 
sollte das doch soweit stimmen???

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Edith:
Du hast auch eine ziemlich hohe Taktfrequenz mit 16 Mhz.

Paul

Autor: The Bozz (tk11)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: The Bozz (tk11)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.