Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: 2.12.06 Bug bei der SD-Karte Kategorie: IDE (von Christian - 26.12.2010 19:02)
Als Antwort auf 2.12.06 Bug bei der SD-Karte von Christian - 26.12.2010 18:54

> Hallo,
> ich habe folgendes Problem bei der SD-Karte.
> Wenn ich die C-Control mit dem Powerschalter einschalte oder Reset Taster drücke,
> dann bekomme ich immer beim öffnen der Datei die Rückmeldung "WRITE_PROTECTED"
> und dadruch beim schreiben den Fehler "INVALID_OBJECT".
> Starte ich mein Programm aber jetzt aus der IDE mit dem "Blitz-Button / Programm starten), gibt
> es keine Fehler. Das passiert aber nur, wenn die Datei schon vorhanden.
> Mit der vorgelagerten Funktion SDC_GetFree gibt es aber keine Probleme.
>
> Den SS (Slave-Select) habe ich auf B4 gelegt, da ich später noch ein SPI-Gerät ansteuern möchte.
> nocht nicht eingebunden)
>
>
> Main
> ...
>  SPI_Disable()
>
>  Port_DataDirBit(13,1)   'PortB.5 = 13 als Ausgang = CS - SD Card
>  Port_DataDirBit(14,1)   'PortB.6 = 14 als Ausgang = CS - 2. SPI
>
>  SPI_Init_Byte = 80  '3,6 Mhz
>  SPI_Enable(SPI_Init_Byte)
>
>  Port_WriteBit(13,1)   'PortB.5 = CS - SD Card  - 0 = selected Slave
>  Port_WriteBit(14,1)   'PortB.6 = CS - 2. SPI   - 0 = selected Slave
>
>    Do While True   'Endlosschleife
>
>     If Timer1_cont = 0 Then
>
>         'Timer1_cont wird in der 10ms Interruptrotine herruntergezählt Timer2
>         Timer1_cont = 1000 '1000 * 10 ms  = 10 sek
>
>         'SPI select Slave
>         Port_WriteBit(13,0)   'PortB.5 = CS - SD Card  - 0 = selected Slave
>         Port_WriteBit(14,1)   'PortB.6 = CS - 2.SPI    - 0 = selected Slave
>
>         SD_Karte_schreiben_Vorbereitung()
>
>         If Port_ReadBit(13) <> 0 Then
>             Thread_Delay(1)
>         End If
>
>         SD_Karte_Freigabe = 1
>
>         SD_Karte_Init()
>
>         If SD_Karte_vorhanden = 1 Then
>                SD_Karte_getfree()
>                If SD_Karte_vorhanden = 1 Then
>                     SD_Karte_Schreibvorgang = 1
>                     SD_Karte_Dateiordner_erstellen()
>                     SD_Karte_Datei_oeffnen()
>                     SD_Karte_schreiben()
>                     SD_Karte_FSync()
>                     SD_Karte_schliessen()
>                End If
>         End If
>
>
>         'SPI select Slave
>         Port_WriteBit(13,1)   'PortB.5 = CS - SD Card  - 0 = selected Slave
>         Port_WriteBit(14,1)   'PortB.6 = CS -   2.SPI  - 0 = selected Slave
>
>     End While
>
>
> Gruss Christian

Ich habe folgendes vergessen..

    Dim Pfad(15) As Char
Sub SD_Karte_Dateiordner_erstellen()
    ' Neuen Dateiordner erstellen

      'SD_Card_Status = SDC_MkDir("0:/CC-PRO")

       Pfad = "0:/log"
       SD_Card_Status = SDC_MkDir(Pfad)

       '1. Unterordner anlegen
       Str_Copy(Pfad,"/",STR_APPEND)
       Str_WriteWord(Clock_Jahr,10,Pfad,STR_APPEND,2)
       SD_Card_Status = SDC_MkDir(Pfad)

       '2. Unterordner anlegen
       Str_Copy(Pfad,"/",STR_APPEND)
       Str_WriteWord(Clock_Monat,10,Pfad,STR_APPEND,2)
       SD_Card_Status = SDC_MkDir(Pfad)
End Sub

    Dim Datei(50) As Char
Sub SD_Karte_Datei_oeffnen()
    ' Ist die Datei bereits vorhanden?
    ' Wenn nicht dann wird die Datei angelegt

    Str_Copy(Datei,Pfad,0)
    Str_Copy(Datei,"/",STR_APPEND)
    Str_WriteWord(Clock_Tag,10,Datei,STR_APPEND,2)
    Str_Copy(Datei,".txt",STR_APPEND)

    SD_Card_Status=SDC_FOpen(fil,Datei, FA_WRITE Or FA_OPEN_EXISTING)

    If SD_Card_Status<>0 Then
        SD_Card_Status=SDC_FOpen(fil,Datei, FA_WRITE Or FA_OPEN_ALWAYS)

        If SD_Card_Status<>0 Then
            SDC_FOpen(fil, Datei, FA_WRITE Or FA_CREATE_ALWAYS)
        End If
    End If
    SD_Card_Oeffnen_OK = SD_Card_Status
    SD_Karte_Status_Rueckgabe_Oeffnen(SD_Card_Status)

    'Erstellungsdatum setzen
    SD_Card_Status = SDC_FSetDateTime(Datei, Clock_Tag, Clock_Monat, Clock_Jahr + 2000,
                                      Clock_Minute, Clock_Stunde, Clock_Sekunde)

    SD_Card_Status = SDC_FStat(Datei, SD_Card_fileinfo)

    ' Schreibposition suchen
    SD_Card_pos = SD_Card_fileinfo(0)
    SD_Card_Status = SDC_FSeek(fil,SD_Card_pos)
End Sub

Gruss Christian


    Antwort schreiben


Antworten: