Bascom 2.0.5.0 és az új SD kártya / FAT kezelő

Bascom, Wiring és Arduino frissítések, hátterei esetleges hibái
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2011. július 10. vasárnap, 16:55

Most szívok ezzel a „KokkeFAT-al”, hogy kiszedjem belőle a Nokia LCD hívásokat!
Sima LCD 20 * 4-essel el fog ez boldogulni?

:?: :roll:

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. július 10. vasárnap, 16:58

Igen.Azzal is megy...

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2011. augusztus 4. csütörtök, 14:30

Kérték, hogy inkább kisebb részletekben közöljem a LED-szalag Projectet!
(Mert úgy könnyebben átlátható lesz.)

Az itt következő rutin Beolvass 1 Excel-ben létrehozott adat táblázat,
*.CSV(pontosvesszővel tagolt txt) formátumban elmentet Filet SD kártyáról. (Effekt2.csv)
És tárolja belőle a számunkra értékes adatokat, a felesleget eldobja.
(Ezek az adatok majd a: 18 csatornás PVM-es LED Effekt szabályzó, fényerő adatai lesznek)
A szükséges lib-ekel együtt az egész egyben leszedhetők az alábbi címről!
(Érdektelenség esetén sajnos 1 hónap után törlik!)
http://data.hu/get/4100239/KoKK_Main_read.zip

Kód: Egész kijelölése

' Find and read, Print  8.3 filename in the root directory

' M64_Maim_SD_READ_FILE.bas  :

' Mega64, Mega128, Lcd = 20 * 4, Terminál Debug, and KokkeKat_FAT-free_SD!
' By: Kapu48 2011 08.

$regfile = "m128def.dat"                                    ' Táp fesz: 3.3V
$crystal = 11059200

'$regfile = "m64def.dat"
'$crystal = 14746000

$framesize = 64                                             '
$hwstack = 64                                               '
$swstack = 64                                               '

' Feltételes Fordító beállítások:
' Ha = 1 : Hibakeresésnél Tájékoztatók ki írása a terminálra. LCD-re nem működik!
' Ha = 0 Nincsen program hiba ki írás! Csak már jól belőtt programnál ajánlott!
Const Debug_sd = 1                                          ' =0. Ha OK a program Ki írás már nem kel!
' HW beállítások!
' 1 LCD-re listáz    !!!!Még fejlesztés alatt!!!!!
' 0 Terminálra listáz
Const Lcd_ok = 0
' '-------------------------------------------------------------------------------

' A {(Mega64 - M128), (Lcd = 20 * 4), Terminál}-ok hoz  beállítót "KokkeKat_FAT-free_SD_lib_decl.bas" példánya
$include "M64_KokkeKat_FAT-free_SD_lib_decl.bas"

' '-------------------------------------------------------------------------------
' LCD CSAK A VÉGLEGES verzióban lesz! Ez itt csak annak az előkészítése.
#if Lcd_ok = 1
' Az LCD Pin-t mindenki löjje be sajátmagának!
  Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
 'we adjust LCD
  Config Lcd = 20 * 4
  Initlcd

  Cls
#else
  $baud = 19200
#endif

' '-------------------------------------------------------------------------------
                                       '
' Átmeneti String tároló az adatok beolvasásához és Ki írásokhoz
Dim Sdstr As String * 40                                    ' 80 karakter = 1 képernyő sor hossza.
Dim Sdtempw2 As Word                                        ' Indexeléshez 1 word
' 8+3 filenevek tárolására
'Dim Sddirentrynameb(13) As Byte
'Dim Sddirentrynames As String * 12 At Sddirentrynameb(1) Overlay
' 8+3 filenevek tárolására
Dim Sddirentrynames As String * 12                          ' A Beolvasott File név
Dim Sddirentrynameb(13) As Byte At Sddirentrynames Overlay
Dim Sdfindentrynames As String * 12                         ' A keresett File név
Dim Sdfindentrynameb(13) As Byte At Sddirentrynames Overlay

Dim Sb As String * 1                                        ' A beolvasott Byte / CHAR tárolása
Dim Iw As Word                                              ' Indexváltozók tárolási címszámláláshoz
Dim Jw As Word
Dim Ib As Byte
Dim Jb As Byte
' String Tömb 50db 24 karakter hosszú filenév tárolására
Dim List_file_names(50) As String * 12
Dim List_file_index As Byte                                 ' Számláló a fenti tömb Indexeléséhez
Dim Effekt(1280) As Byte                                    ' A beolvasott Fényerő Effekt File tárolása
Dim Effekt_i(3) As Byte                                     ' A fenti file koordináta adatai (Sorszám, X, Y)

Dim Effekt_x As Byte                                        ' Effekt oszlopok száma (PWM kimenetek száma)
Dim Effekt_y As Byte                                        ' Effekt sorok száma
Dim Ful As Word                                             ' Ha 1 menetben nem fér be a file: (Ful > 0)
Dim Sorok As Byte                                           ' Effekt sorok számlálására

Sdfindentrynames = "EFFEKT2 CSV"                            'A kereset File név tárolása

' Here starts the mandatory SD card initialization and file system initialization:
' Itt kezdődik a kötelező SD kártya inicializálása és a fájl rendszer indítása
Ful = 0
Sorok = 1
Sdstatus = 0

Gosub Sdinit
' Inicializálás sikeres. Sdcardtype = 1 -> v1.x SDSC, 2 -> v2 + SDSC, 3 -> v2 + SDHC és SDXC
If Sdstatus = 0 Then                                        ' Initialization succesful. Sdcardtype = 1 -> v1.x SDSC, 2 -> v2+ SDSC, 3 -> v2+ SDHC or SDXC
   Gosub Sdinitfs
End If

If Sdstatus = 0 Then
#if Debug_sd = 1
   Print "SD OK!"                                           ' SD Rendben
#endif
' 8+3CHR File keresés a gyökér könyvtárban
   Sdstartdirclusterd = 0
   Sdclusterd = Sdstartdirclusterd
   Sddirlistarraycounter = 0
   Sddirlistdirection = 0
   Sdentrynames = Sdfindentrynames

   Do
      Sdstatus = 0
      Gosub Sddirlist
'    Ha fájlt talált
      If Sdstatus = 26 Then                                 ' File found
         Sdtempb = 1
         Ib = 0
         Jb = 1
         Do                                                 ' Hasonlítsa össze a könyvtár bejegyzés nevét és megadott belépési nevét
            If Sddirlistdirentry(sdtempb) <> Sdentrynameb(sdtempb) Then       ' Compare this directory entry name and specified entry name
               Sdstatus = 38
            End If
            Incr Sdtempb
         Loop Until Sdtempb = 12 Or Sdstatus = 38
         If Sdstatus <> 38 Then
            Sdstatus = 37
         End If
       End If
   Loop Until Sdstatus = 37 Or Sdstatus = 32 Or Sddirlistendpoint = 1       ' Entry names match or end of directory
'   Belépés nevek megegyeznek vagy végére ért a könyvtárnak
   If Sdstatus = 37 Then
      Sdstatus = 0
   End If

' Open file and print the contents
' Fájl megnyitása: a tartalmát Tárolja és (ki irja)
   If Sdstatus = 0 Then
#if Debug_sd = 1
      Print "Open File Name: " ; Sdentrynames
#endif
      Sdsecincluster = 0

      Sdstr = ""
      Iw = 1
      Ib = 0
' Ciklús a File vége jelig:
      While Sdeof < 1
         Gosub Sdreadbyte                                   ' Következő Byte beolvasása
         Sb = Chr(sdbyterw)
#if Debug_sd = 1
         Print Sb ;
#endif
         Select Case Sb

            Case "0" To "9" :                               ' Számok kiszedése
                  Sdstr = Sdstr + Sb
                  Incr Ib
            Case ";" :                                      ' Ha Két érték közti elválasztó jel: ";"
                  If Ib > 0 Then
                      If Iw < 1279 Then                     ' Ne lépje át a tömb határát
                         Select Case Sorok                  ' Az első 3 sort külön lekezeljük
                              Case 1 :
                          '        A file koordináta adatai (Sorszám, X, Y)
                                  Effekt_i(jb) = Val(sdstr) ' 1 Byte / ASCII Számok Váltás és tárolás
                                  Incr Jb
                              Case 2 To 3 :                 ' 2. és 3. sort eldobjuk
                                     Sdstr = ""
                              Case Is > 3 :                 ' 4. sortól jöhetnek az adatok
                                 Effekt(iw) = Val(sdstr)
                                 Incr Iw
                         End Select
                      End If
                     Ib = 0
                     Sdstr = ""                             ' Üríti az átmeneti tárolót
                  End If
          End Select
'     Sorvégén végzet műveletek
          Select Case Sdbyterw
                  Case &H0D :
                         If Ib > 0 Then                     ' Ha sorvége előtt még értékes adat volt
                           If Iw < 1279 And Sorok > 3 Then
                              Effekt(iw) = Val(sdstr)       ' Tároljuk
                              Incr Iw
                           End If
                           Ib = 0
                           Sdstr = ""
                         End If

                  Case &H0A :                               ' Ez az utolsó karakter a sorban ?
                        Incr Sorok                          ' Sorszámlálót növeljük
                        Sdstr = ""
                        Ib = 0
            End Select
      Wend

#if Debug_sd = 1
' Ki irja a Tárolt File tartalmát

      Print "A Fenyero ertekek tombje:"
  '   Az 1 sór adatai 3 Byte
      Ib = 1
      Print Effekt_i(ib) ; " " ;

      Incr Ib
      Print Effekt_i(ib) ; " " ;
      Effekt_x = Effekt_i(ib) + 2
      Incr Ib

      Print Effekt_i(ib)
' File méret számolása
      Effekt_y = Effekt_i(ib)
      Jw = Effekt_y * Effekt_x
' Ha nagyobb a File mint a tároló tömbünk  ( IDÉGLENES ERROR figyelése!!!!!!!!.)
' Még nincsen lekezelve ha nagyobb a file mint a tömbünk!!!!!!!!!!!!!!!!!!!!!.)
      If Jw > 1280 Then
         Ful = 1280 - Jw                                    ' A maradék Byte
         Print "Tomb Ful+: " ; Ful
         Jw = 1280                                          ' Csak ekkora a tárolónk
      End If
' Tömb soronkéntti ki írása elválasztó szóközökkel
      Ib = 0
      For Iw = 1 To Jw
         Print Effekt(iw) ; " " ;
         Incr Ib
         If Ib = Effekt_x Then
             Print
             Ib = 0
         End If
      Next
      Print


   Else
      Sdstr = Str(sdstatus)
      Print " NO FILE! " ; Sdstr
#endif
   End If

#if Debug_sd = 1
Else
   Sdstr = Str(sdstatus)
   Print "SD ERROR!" ; Sdstr
#endif

End If
#if Debug_sd = 1
   Print "END Program!"
#endif

End                                                         'end program

'===============================================================================
' A {(Mega64 - M128), (Lcd = 20 * 4), Terminál}-ok hoz  beállítot "KokkeKat_FAT-free_SD_lib_code.bas" példánya
$include "M64_KokkeKat_FAT-free_SD_lib_code.bas"

''


A létrehozott kód mérete Debug kiírások kikapcsolásával 9356 Bytes.

Remélem hasznos lesz!
8)
A hozzászólást 2 alkalommal szerkesztették, utoljára kapu48 2012. szeptember 27. csütörtök, 12:16-kor.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2011. augusztus 7. vasárnap, 14:00

Az előző hsz-ben szereplő Effektxx.csv fájlok szerkesztéséhez szükséges Excel VB. rutin használata:

Excel LED fény Effekt táblázat Szerkesztő Help!

A rendszer csak 2007-es Excel-töl felfele működik! (És szükséges hozzá némi Exceles alapismeret!)

Elindítod a szerkeszt.xlsm filet, Engedélyezed a makrókat!!!!!!!!! (Fontos!)
A szerkesztő fájl, csak a szerkesztéshez szükséges elemeket tartalmazza, abban dolgozni nem kell.
Utána Elindítod a megfelelő „Effektxx.csv” fájlt, és bele kattintasz.
Ekkor a Makrók Szerkeszthető formátumra hozzák a táblázatot.
(Sajnos még csak így működik! Új Fájlt csak 1 régi minta átszerkesztésével tudsz létrehozni.)
Betöltöd a Régit elmented Új néven és szerkesztheted!
( A mentések mindég „*.CSV” formátumban történnek. Rákérdezéskor ezt engedélyezni kel!)
Ez a megszerkesztet, és kipróbált Effektek javíthatósága miatt van így!
(Hordozhatod az SDn levő Fileokat: PC Excel – AVR LED vezérlő között, oda - vissza.)

Az első sorban „zöld cellák”-at kel kitölteni, jelentésük:
1.: Az Effekt sorszáma (Ha több effekted is van adjál nekik növekvő sorszámot. Max. 1 - 255-ig)
2.: Az Effekt Oszlopok száma. (Ahány kimeneti PVM csatornát vezérelni akarsz. (MAX: 18 kimenet lehet))
3.: Az Effekt Sorok száma. (Ahány sorból áll az effekted. (MAX: 104 sor lehet))
A második sorban rendszer szín kódok vannak tárolva. Ezt ne bántsd!

A táblázat kitöltése:
A sárga hátterű cellák védettek, csak a szerkesztés segítése céljából vannak. Ezeket ne bántsd!
1. Oszlopban megadjuk a MilliSzekundum értéket (Alapból 20ms. Max 255 lehet).
(Az adott Fényerő érték sor, Ennyi ideig fog látszani.)
2.- tol további oszlopokban megadjuk az egyes csatornák pillanatnyi fényerő értékét. (Csak: 1 – 32 értékek lehetnek. 1 = nem világit az adott kimeneten levő LEDsor. … 32 = Max fényerő)
A táblázatban minden cellát megfelelően ki kel tölteni. Mert Hibaellenőrzés nincsen a programokban!

További szolgáltatások:
1. Ha az első sorban módosítod (X = Oszlopok), vagy (Y = Sorok) értékét újra rajzolja neked a táblázatot.
A már benne levő értékek megmaradnak.
2. Ha a táblázat 1. sorában levő fényerő oszlopokat tároló cellák (Excel C4 cellától-) Betű színét megváltoztatod (jobb gombos menü) az egész alatta levő oszlop betű színe azonosra változik.
(Ez még az előző 1. pont újra alkalmazásakor nem javítja magát!)
3. Automatikus *.csv formátumú mentés. amit rákérdezéskor engedélyezni kel!

Fontos betartani, hogy az elmentett file nevek csak DOS formátumú 8.3 karakteresek lehetnek! (Ékezetek nélkül.)
Mert csak ezeket tudjuk megtalálni az AVR keresőjével.

Az elmentet Fileok bármilyen *.TXT szövegszerkesztőbe betölthetők, és akár szerkeszthetőek.
Csak Elmentéskor a formátumuknak „DOS *.CSV pontosvesszővel tagolt”-nak kel maradnia!

NE BÁNSD a: „SzerkesztMESTER.xlsm” biztonsági másolat. Csak a másolatát használd!
Még az ellenőrzések nincsenek, de legalább a fájlkérdés megoldódott. Így bármelyik eddig elkészült effekt fájlt simán lehet újra szerkeszteni.

Azért ne légy ideges, ha használod, és nem megy. Megdumáljuk.
:)

Az Excel VB rutinokat: Sanyisay Forum társ készítette, és fejleszti!

Bár szerinte még nincsen készen! De a közléséhez hozzájárult.
Köszönet neki érte!

Szerintem már használható, de amint lesz javítás felrakom újra és az alábbi linket lecserélem!
Az egészet 1-ben innen tölthetitek:
http://data.hu/get/4109487/PC_SD.zip

Így már tudjuk használni i az új „KokkeKat_FAT-free_SD_lib_code” Find és Read rutinjait, 1 bizonyos formátumú táblázat tartalmazó File megkeresésére és betöltésére.

Ui.: Ha valakinek régebbi Excelje-van annak létezik táblázat VB.net makrók nélkül.
Itt sajnos mindent kézzel kel beállítani, de használható kis gyakorlással.
Az egész lényege, hogy a végtermék azonos formájú legyen. A 2.sor legyen üres.
Sőt az egész táblázat szövegszerkesztőben is megírható, mondjuk ahhoz végtelen nagy türelem kel!
8)
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2011. augusztus 7. vasárnap, 21:30-kor.

Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 998
Csatlakozott: 2009. február 28. szombat, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: SanyiSay » 2011. augusztus 7. vasárnap, 18:42

Alfa verzió.
Még nem bolondbiztos. :)
Valamint Excel is kézzel lábbal tiltakozik egykét megoldás ellen, így ötleteket is elfogadunk.
Pld. .csv fájl mentés, betöltés terén.

Noés talán a leghasznosabb tanács a fenti leírásban.

kapu48 írta: Azért ne légy ideges, ha használod, és nem megy. Megdumáljuk.
:)

Avatar
aaszabo
Bitmanipulátor
Hozzászólások: 125
Csatlakozott: 2012. január 22. vasárnap, 7:00
Tartózkodási hely: Budapest

Re: Bascom 2.0.5.0 és az új SD kártya / FAT kezelő

HozzászólásSzerző: aaszabo » 2012. március 20. kedd, 12:05

Sziasztok!

Remélem él még ez a téma!

Elkezdeném használni az SD kártyás memóriát. Kokekkat FAT-ot választottam, mert nem lehet már 2G-nél kisebb kártyákat kapni és az enyém is 2G. Meg ingyenes, meg minden, amit Róbert megírt az összehasonlításban.

Natehát az a problémám, hogy még a saját példaprogramja (MAIN.bas) sem fordul le nekem, mert az első értékadásnál (Example_WIPE.bas 4. sora) 46 Assignment Error hibát ad, ezen a soron:
Sdyear = 2011

Olyan, mintha az include nem valósulna meg, mert nem ismeri az Sdyear változót. Viszont, ha a hibára kattintok, akkor automatikusan megnyitja az include fájlt és rááll a hibás sorra.

Bascom verzió 2.0.7.1
Mi lehet a gond?
Köszi előre is a segítséget.

Ákos

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. március 20. kedd, 13:24

Adni kel kezdő értékeket a fordításhoz!
Csináltam anó helpet magamnak, itt megtalálod a beállításokat!

Kód: Egész kijelölése

'KokkeKat_FAT_HELP_Hu.bas
' By: kapu48. 2011 07.

'(
' Magyar nyelvű HELP az alábbi Library rutinjaihoz:
' "KokkeKat FAT-free SD library code" for SDSC, SDHC, and SDXC - INCLUDE at the end of your code

A "KokkeKat_FAT-free_SD_lib_decl.bas" Fő alapp elve, hogy csak a szükséges részeket fordítjuk be a kódba!
Optimális Memória használat céljából! Ezért vannak Constansok létrehozva a feltételes fordítások bealításához.
Ha valahól nem talál, vagy duplán talál valamit a fordító, akkor itt keresgéld  a hibát először!

' Alap SD kártyakezelő rutinok:
................................................................................


>>>    SDINIT:

   SD kártya inicializálása és azonosítás
   Az inicializálás sorrendje határozza meg a kártya SPI módban meghatározza kártya típusát, és ellenőrzi a kártyán
   Lévő támogatott feszültségtartomány. Befejezését követően, a kártya készen áll a tényleges olvasás és írásra
   Hamarosan meg tesszük.

   Van 2 féle iniciálás.
   1.:   Ha Sdinitdetail = 1  Minimum detail  (csak győződjön meg róla, hogy az init sikeres)  Kevesebb helyet foglal

   2.:   Ha Sdinitdetail = 0  Teljes részletességgel (visszatérés részletesen, ha az init sikertelen)
         Változókban vissza kapot értékek:

            Sdresponse(6) Byte   : A <= 48 bites  SD válassza az aktuális utasítás végrehajtása után.
                                Amiket vizsgálni kel:
               Sdresponse(1) = 255 Időtúllépés a CMD8

            Sdcardtype Byte =    : A Kártya típus kódja

            Sdstatus Byte        : Állapot jelző Byte. Kódértelmező tábláztat a Help végén összefoglalva!

   A rutin végén a SPI-t 2*es sebességre állítja!

................................................................................

>>>    Sdcheckr1:

   SD vissza adott ellenőrző érték (Sdresponse) konvertálása (Sdstatus) kódokká.
      Részletezve a lap alján!>>

................................................................................

>>>    Sdreadsector:

    Olvassa 1 szektort SD

      Bemenő változók:

          Sdcardtype

          Sdsectord

      Kimenő változók:   Ha  Sdstatus = 0

         Ha Sdwmode = 1 és Sdreaddestination = 0, Az adatok a Sdbuffer(1 - 512)bekerülnek

         Ha Sdwmode = 1 és Sdreaddestination > 0, Az adatok a Sdfatbuffer(1 - 512)bekerülnek


................................................................................

>>>    Sdwritesector:

   Ír 1 Szektort. Ha fordítási: Sdwmode > 0

      Bemenő változók:

          Sdcardtype

          Sdsectord

      Kimenő változók:

         Ha Sdwmode = 1 és Sdwriteorigin = 0, Írja ki az adatblokkot a Sdbuffer-ból

         Ha Sdwmode = 1 és Sdwriteorigin > 0, Írja ki az adatblokkot a Sdfatbuffer-ból

         Sdstatus = 0   :  Irás OK

--------------------------------------------------------------------------------

#HA Sdfsactive = 1  FAT16/32 fájlrendszer aktív

>>>    Sdinitfs:

   SD Adatok beolvasása:


       Kimenő változók:

         Sdbuffer(1-255)   :  Főbb Értékek Leírása:
                                 00h ismeretlen vagy semmi
                                 01h 12-bites FAT
                                 04h 16-bites FAT (partíció kisebb, mint 32MB)
                                 05h kiterjesztett MS-DOS partíció
                                 06h 16-bites FAT (partíció nagyobb, mint 32MB)
                                 0BH 32-bites FAT (partíció akár 2048GB)
                                 0Ch Ugyanaz, mint 0BH, de használ LBA1 13h-bővítmények
                                 0Eh Ugyanaz, mint 06h, de használ LBA1 13h-bővítmények
                                 0Fh Ugyanaz, mint 05h, de használ LBA1 13h-bővítmények
                                 ...
                                 ...
                                 ...
................................................................................

>>>    Sdlocatesector:

   Keresse SD szektort

      Bemenet változó:

         Sdclusterd = jelenlegi klaszter
         Sdclusterb (4) Byte Vagy
         Sdclusterd Duplaszó Aktuális klaszter száma

     Kimeneti változó:

         Sdsectord  =  az abszolút szektor száma ebben a csoportban


................................................................................

>>>    Sdlocatenextcluster:

   Keressen következő klasztert (fürtöt)

      Bemeneti változó:
         Sdclusterd = jelenlegi klaszter
         Sdclusterb (4) Byte Vagy
         Sdclusterd Duplaszó Aktuális klaszter száma

       Kimeneti változó:

         Sdclusterd = következő klaszter


................................................................................

>>>    Sdcalculatefat1sector:

   SD cím kiszámításához  FAT 1 szektor

      Bemeneti változó:

         Sdclusterd = jelenlegi klaszter

         Sdclusterb (4) Byte Vagy

         Sdclusterd Duplaszó Aktuális klaszter száma


#END--------------------------------------------------------------------------------

#HA Sdrmode = 1 And Sdfsactive = 1 ( 1 = olvasott és ' 1 = FAT16/32 fájlrendszer olvasás aktív )

>>>    Sdreadbyte:

   Használható olvasni egy byte az aktuális fájlból, ahogy helyezkedik el Gosub Sdfindentryindirectory vagy Gosub Sddirlist

      Hívása előtt ellenőrizze, hogy:

         Sdfilesized > 0,

         Sdstatus = 0, és

         Sdeof = 0

      Bemeneti változók:

         Sdclusterd = Aktuális fájl klaszter Sdclusterb (4) Byte Vagy Sdclusterd Duplaszó Aktuális klaszter száma

         Sdsecincluster = szektor száma ebben a klaszterben, 0-ra, mielőtt az első hívás

         Sdbufferpos = buffer pos ebben a szektorban

         Sdsectord = abszolút szektor száma

      Kimeneti változók:

         Sdbyterw       : az olvasott byte

         Sdbytesread    : olvasott byte számláló

         Sdeof = 1      : End Of fájl található, egyébként 0

         Sdstatus       : Byte


#endif--------------------------------------------------------------------------

#if Sdusefind = 1    ( Használ FIND rutint )

>>>    Sdfindentryindirectory:

   Megkeres 1 bejegyzést a könyvtárban

      Használd, hogy találj egy fájlt, alkönyvtárt, Eszköz ID, vagy rendelkezésre álló könyvtár elérhető belépést

      Bemeneti változók:

         Sdclusterd         : A klaszter száma a könyvtár, amelyben keresni szeretne (tényleges klaszter vagy
                              0 a root könyvtárban)

         Sdsecincluster = 1 : ha csinálsz az első keresés, egyébként a tényleges Sdsecincluster

         Sdbufferpos = 1    : ha csinálsz az első keresés, egyébként a tényleges Sdbufferpos

         Sdentrynames       : A fájl vagy alkönyvtár nevét

         Sddirectorymode    : 0 = találtam fájlt, 1 = találtam alkönyvtárt, 2 = találtam SD Névet ID,
                              3 = találtam elérhető könyvtárat bejegyzést, 4 találtam szülő könyvtárat

            Ha Sdrwmode = 2 Vagy Sdrwmode = 4 :
         Sdbuffer()         : Sdreaddestination = 0    vagy
         Sdfatbuffer()      : Sdreaddestination = 1

     Kimeneti változók:

         Sdstatus:
            28 = A rendelkezésre álló könyvtár helyet találtam
            31 = EOC End Of klaszter lánc talált (könyvtár)
            32 = EOD End Of Directory marker található
            34 = A kötet ID találtam
            47 = Szülő könyvtár mutató találtam
            48 = A fájl vagy alkönyvtár található

         Sddirectorymode = 2:
            Sdclusterd    = Következő klaszter száma (ahol a file / alkönyvtár található)
            Sdentrynames  = A kötet id neve

         Sddirectorymode <> 2:
            Sddirclusterd     = Cluster száma ehhez a könyvtárhoz belépés
            Sddirsecincluster = Lánc start szektor száma az aktuális könyvtárban klaszter, 1 a Sdsecincluster
            Sddirbufferpos    = Lánc induló könyvtárát számlálópozíció, 1-512
            Sdclusterd        = Következő klaszter száma (ahol a file / alkönyvtár tartózkodik)


................................................................................

>>>    Sddirsectorloop:

   Keres következő Lehívható bejegyzést a SD könyvtárban.

      Bemenő változók:

         Sdsectord       = abszolút könyvtár szektor száma

         Sdbufferpos     = 1, ha csinálsz az első keresés, egyébként a tényleges Sdbufferpos

         Sddirectorymode
            0 = Fájlkeresés
            1 = találni alkönyvtárban
            2 = találni kötet ID
            3 = találni elérhető könyvtár bejegyzést
            4 = találni szülő könyvtár
            5 = vissza teljes bejegyzés, kivéve, ha EOD (csak ha engedélyezett Sdusefindstoreentry = 1)

      Kimeneti változók:

         Sdstatus:
            28 = Egy szabad könyvtár helyet találtam
            32 = EOD End Of Directory marker található
            34 = A kötet ID találtam
            47 = Szülő könyvtár mutató találtam
            48 = A fájl vagy alkönyvtár található

         Ha Sddirectorymode = 2:
         Sdclusterd       = Következő klaszter szám (adott fájl / alkönyvtár található)
         Sdentrynames     = A kötet ID

         Ha Sddirectorymode <> 2:
         Sddirclusterd       = Cluster száma ehhez a könyvtárhoz bejegyzés
         Sddirsecincluster   = lánc start szektor számát az aktuális könyvtárban klaszter, 1 Sdsecincluster
         Sddirbufferpos      = lánc induló könyvtárát számlálópozíció, 1-512
         Sdclusterd          = Következő klaszter szám (adott fájl / alkönyvtár található)

         Sdbuffer            : ???


................................................................................

>>>    Sdcheckclusterreference0:

   Ellenőrizze, amennyiben ez jelzi a EOC (>=&HFFF8 or >=&H0FFFFFF8)

      Kimeneti változók:

         Sdstatus = 31    EOC Vége a klaszter láncnak találat ' EOC End OF Cluster chain found


................................................................................

>>>    Sdgetclusterandsize:

   Sd kapni klaszter és mérete:

      Bemenő változók:

         Sdfattype
         Sdbuffer
         Sdbufferpos


      Kimeneti változók:

         Sdclusterb()  =   Fájl / alkönyvtárt cluster száma      ' File/subdirectory cluster number
         Sdfilesizeb() =   Fájl mérete byte-ban    'File size in bytes


#ENDIF--------------------------------------------------------------------------------

#if Sdwmode > 0 And Sdfsactive = 1
   2 = write unbuffered  vagy 1 = write buffered  És  1 = FAT16/32 fájlrendszer aktív

>>>    Sdcreatefileordir:

   Használd, mint az első három lépést, amikor létrehoz egy új fájlt, vagy az egyetlen lépés,
   ha létrehoz egy új alkönyvtárt

   Sdwritebyte és Sdclosefile az elkövetkező két
   Keresse szabad FAT bejegyzés található szabad könyvtár bejegyzést, és mentsd meg a könyvtár bejegyzést
   vissza az SD kártyára

      Bemeneti változók:

         Sdentrynames         = a 8.3 fájlnév

         Sdcreatemode         : 0 = Fájl, 1  =  alkönyvtárt

         Sdstartdirclusterd   = a könyvtár klaszter száma (ahol a fájl vagy alkönyvtárt kell létrehozni).
                                Állítsa 0-gyökérkönyvtár.

         Sdyear      = az év
         Sdmonth     = a hónap
         Sdday       = a nap
         Sdhours     = az óra
         Sdminutes   = a perc
         Sdseconds   = a másodperc
         Sdmseconds  = az ezredmásodperc

         If Sdmaintainfsinfo = 1
         Sdfsinfofreeclustersd    = a szabad klaszterek száma
         Sdfsinfonextfreeclusterd = A következő nem használt cluster (jellemzően nem az első szabad
                                    újrafelhasználható cluster)

       Kimeneti változók:

         Sdpartitionfull      = 1, ha a partíció tele (nincs több szabad FAT bejegyzés)

         Sdfatsectornum       = a FAT szektor száma

         Sdfatbufferpos       = a helyzet ebben az ágazatban

         Sddirclusterd        = a könyvtár klaszter

         Sddirsecincluster    = az ágazat ebben a klaszterben

         Sddirbufferpos       = a helyzet ebben az ágazatban

         Sdwclusterd          = A klaszter száma vagyunk írásban

         Sdwsecincluster      = az ágazat ebben a klaszter (1)

         Sdwbufferpos         = a helyzet ebben az ágazatban (0) - Felhívjuk a figyelmét!

         Sdwfilesized         = a fájl méretét (0)

         If Sdmaintainfsinfo = 1
         Sdfsinfofreeclustersd      = a szabad klaszterek
         Sdfsinfonextfreeclusterd   = A következő nem használt cluster (jellemzően nem az első szabad újrafelhasználható
                                       cluster)
         Sdstatus = 0      : OK


................................................................................

#if Sduseappend = 1    Jelezze Sdapp véget

>>>    Sdpreparetoappend:

   Használható hozzáfűzhet egy már létező fájlban

      Bemeneti változók:

        Sdentrynames       = a 8.3 fájlnév

        Sdyear       = az év
        Sdmonth      = a hónap
        Sdday        = a nap
        Sdhours      = az óra
        Sdminutes    = a perc
        Sdseconds    = a másodperc

        Sdstartdirclusterd       = az első klaszter ennek a (szub-) könyvtárban

        Sdfsinfofreeclustersd    = a szabad klaszterek

        Sdfsinfonextfreeclusterd = A következő nem használt cluster (jellemzően nem az első szabad újrafelhasználható
                                    cluster)
     Kimeneti változók:

        Sdwclusterd              = A klaszter száma vagyunk írásban

        Sdwsecincluster          = az ágazat ebben a klaszterben

        Sdwbufferpos             = a helyzet ebben az ágazatban

        Sdwfilesized             = a fájl mérete

        Sdfatsectornum           = a FAT szektor száma

        Sdfatbufferpos           = a helyzet ebben az ágazatban

        Sddirclusterd            = a könyvtár klaszter

        Sddirsecincluster        = az ágazat ebben a klaszterben

        Sddirbufferpos           = a helyzet ebben az ágazatban

        Sdfsinfofreeclustersd    = a szabad klaszterek

        Sdfsinfonextfreeclusterd = A következő nem használt cluster (jellemzően nem az első szabad újrafelhasználható
                                    cluster)

        Sddirclusterd, Sddirsecincluster és Sddirbufferpos pontja ebbe a könyvtárba belépés

        Sdwclusterd, Sdwsecincluster és Sdwbufferpos pontja az utolsó bájt a fájl

        Sdfatclusterd, Sdfatsectornum és Sdfatbufferpos pontja az utolsó FAT belépés (klaszter szám)


................................................................................


>>>      Sdwritebyte:

   Használható, hogy írjon egy byte egy megnyitott fájl
      Mindig győződjön meg arról, hogy Sdclosefile = 0 mielőtt írás

      Bemeneti változók:

         Sdclosefile kell 0 - ellenkező esetben a fájlt le kell zárni

         Sdwclusterd       = A klaszter száma vagyunk írásban (eredetileg a Sdcreatefileordir vagy Sdappendfile -
                              Touch csak írásban> 1 file)

         Sdwsecincluster   = az ágazat ebben a klaszter (eredetileg a Sdcreatefileordir vagy Sdappendfile -
                              touch csak írásban> 1 file)

         Sdwbufferpos      = a helyzet ebben az ágazatban (eredetileg a Sdcreatefileordir vagy Sdappendfile -
                              touch csak írásban> 1 file)

         Sdwfilesized      = A fájl mérete (eredetileg a Sdcreatefileordir vagy Sdappendfile - touch csak írásban>
                              1 file)

         Sdfatsectornum    = a FAT szektor számát (kezdetben által meghatározott Sdcreatefileordir vagy Sdappendfile -
                              touch csak írásban> 1 file)

         Sdfatbufferpos    = a helyzet ebben az ágazatban (eredetileg a Sdcreatefileordir vagy Sdappendfile -
                           touch csak írásban> 1 file)

         Sdbuffer ()       (érintse meg csak akkor, ha írásban> 1 file)

         Sdbyterw          = az adatokat byte vagyunk arról írni


      Kimeneti változók:

         Sdwclusterd       = A klaszter száma vagyunk írásban

         Sdwsecincluster   = az ágazat ebben a klaszterben

         Sdwbufferpos      = a helyzet ebben az ágazatban

         Sdwfilesized      = a fájl mérete

         Sdfatsectornum    = a FAT szektor száma

         Sdfatbufferpos    = a helyzet ebben az ágazatban

         Sdbuffer ()

         Sdpartitionfull   = 1, ha a partíció teljes (nincs több szabad FAT bejegyzés)

         Sdclosefile       = 1, ha a fájlt be kell zárni a visszatérés a gosub


      Visszatért állapotok:

         Sdstatus = 0 Sikeres
         Sdstatus = 7 Timeout
         Sdstatus = 41 adatokat elutasította CRC hiba miatt
         Sdstatus = 42 adatok miatt visszautasításra írási hiba
         Sdstatus = 43 szabad FAT bejegyzés található
         Sdstatus = 44 A partíció teljes - tárolni FAT EOC marker


................................................................................


>>>      Sdfinalizeafterwriting:

   Használható, hogy zárja be a fájlt, miután az utolsó hívás Sdwritebyte

      Bemeneti változók:

         Sdwclusterd       = A klaszter száma vagyunk írásban (meghatározott Sdwritebyte - touch csak írásban> 1 file)

         Sdwsecincluster   = az ágazat ebben a klaszter (meghatározott Sdwritebyte - touch csak írásban> 1 file)

         Sdwbufferpos      = a helyzet ebben az ágazatban (meghatározott Sdwritebyte - touch csak írásban> 1 file)

         Sdwfilesized      = a fájl méretét (meghatározott Sdwritebyte - touch csak írásban> 1 file)

         Sdfatsectornum    = a FAT szektor száma (meghatározott Sdwritebyte - touch csak írásban> 1 file)

         Sdfatbufferpos    = a helyzet ebben az ágazatban (meghatározott Sdwritebyte - touch csak írásban> 1 file)

         Sddirclusterd     = a könyvtár klaszter egyre fájlméret (rögzített vagy Sdcreatefileordir Sdappendfile -
                              touch csak írásban> 1 file)

         Sddirsecincluster = az ágazat ebben a klaszter (rögzített vagy Sdcreatefileordir Sdappendfile -
                              touch csak írásban> 1 file)

         Sddirbufferpos    = a helyzet ebben az ágazatban (rögzített vagy Sdcreatefileordir Sdappendfile -
                              touch csak írásban> 1 file)

         Sdbuffer ()       (érintse meg csak akkor, ha írásban> 1 file)

         Sdfatbuffer ()    (érintse meg csak akkor, ha írásban> 1 file)

         Sdsavedatasector  = 1, ha az adatokat el kell menteni az SD (meghatározott Sdwritebyte -
                              touch csak írásban> 1 file)

      Kimeneti változók:

         Sdclosefile       = 0, ha a fájl lezárás sikeres volt

      Visszatért állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 időtúllépés
         Sdstatus = 41 adatok elutasította CRC hiba miatt
         Sdstatus = 42 adatok miatt visszautasításra írási hiba


................................................................................


>>>      Sdstoredirentry:

   Tárol minden információt egy új könyvtárat bejegyzés, kivéve a fájl mérete,
   hogy frissülni fog a végén a második olvasási + írni ezt a könyvtárat szektor

      Bemeneti változók:

         Sdentrynames   = a neve az új fájl vagy alkönyvtár (vagy. .. Ha a Bevezető subirectory bejegyzés)

         Sdcreatemode   : 0 = Fájl 1 = alkönyvtár

         Sdclusterd     = A klaszter számát, ahol az új fájlt vagy alkönyvtárt indul

         Sdwfilesized   = A fájl mérete (0 alkönyvtár, vagy ha létre egy új fájlt)

         Sdbufferpos    = a puffer pozícióját a jelenlegi szektorban az aktuális könyvtár klaszter

         Sdbuffer ()    = az aktuális könyvtárban szektor

         Sdyear = az év
         Sdmonth = a hónap
         Sdday = a nap
         Sdhours = az óra
         Sdminutes = a perc
         Sdseconds = a másodperc
         Sdmseconds = az ezredmásodperc


      Kimeneti változók:

         Sdbuffer()  = az aktuális könyvtárban szektor

         Sddatew     = a dátumot DateTime formában (általában nem használt utána)

         Sdtimew     = az idő DateTime formátumban (általában nem használt utána)



................................................................................


>>>      Sdstore19_26:

   Adja meg a fájl méretét a könyvtárra vonatkozó bejegyzés


................................................................................


>>>      Sdstore29_32:

   Adja meg a fájl méretét a könyvtárra vonatkozó bejegyzés


................................................................................


>>>      Sdfindfreefat:

   Használható keresni FAT1 a szabad belépés, kezdve Sdsectord, és tárolni pozíciók számának és a FAT1 szektor


      Bemeneti változók:

         Sdsectord      = a FAT1 szektor vagyunk től (> = Sdfat1location, <Sdfat2location)

         Sdbufferpos    = 1 vagy az aktuális pozíció


      Kimeneti változók:

         Sdfatsectornum    = a FAT1 ágazat, amelyben találtunk egy szabad belépőt

         Sdfatbufferpos    = a helyzet ebben az ágazatban

         Sdfatclusterd     = A klaszter szám megfelel a fenti FAT1 helyzetben

         Sdwclusterd       = A klaszter szám megfelel a fenti FAT1 helyzetben

         Sdwsecincluster   = 1

         Sdwbufferpos      = 0 (praktikusabb kiindulási pont, mint 1)

         Sdwfilesized      = 0


      A visszatérési állapotok:
         Sdstatus = 0      = Sikeres
         Sdstatus = 7      = időtúllépés



................................................................................


>>>      Sdfindfreefatentry:

   Használható keresni FAT1 a szabad belépőt, kezdve Sdsectord

      Bemeneti változók:

         Rendeljen Sdsectord     (> = Sdfat1location, <Sdfat2location)

         Hozzárendelése Sdbufferpos = 1 vagy tényleges helyzet


     Kimeneti változók:

         Sdsectord      = a FAT1 ágazat, amelyben találtunk egy szabad belépőt

         Sdbufferpos    = a helyzet ebben az ágazatban


     A visszatérési állapotok:

         Sdstatus =  0 = Sikeres
         Sdstatus =  7 = időtúllépés
         Sdstatus = 43 = szabad FAT bejegyzés található
         Sdstatus = 44 = vége   FAT és nem találtak szabad belépőt


................................................................................


>>>      Sdwclearcluster:

    Használható írni nullák a szektor 2-Sdsecspercluster (ami majd ezt követően akár nulla az ágazati 1 vagy az új
    könyvtár bejegyzés vagy. .. Bejegyzések)

      Bemeneti változók:

         Sdclusterd     = A klaszter vagyunk arról törléséhez


      Kimeneti változók:

         Sdbuffer()     tartalmaz, 512 * nulla


      A visszatérési állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 időtúllépés
         Sdstatus = 41 adatok elutasította CRC hiba miatt
         Sdstatus = 42 adatok miatt visszautasításra írási hiba


................................................................................


>>>      Sdsavefatsec:

   Tárol következő klaszter vagy EOC marker SD / FAT / buffer () a Sdfatbufferpos és mentse vissza az SD kártya
   (FAT1 és FAT2)

      Bemeneti változó:

         Sdfatbufferpos = a FAT bejegyzés helyzetben

         Sdfatsectornum = a FAT szektor száma

         Sdclusterd     = a következő cluster számát vagy EOC marker

     Kimeneti változó:

         Sdbuffer ()

     A visszatérési állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 időtúllépés
         Sdstatus = 41 adatok elutasította CRC hiba miatt
         Sdstatus = 42 adatok miatt visszautasításra írási hiba


................................................................................

#if Sdwmode > 0 And Sdfsactive = 1


>>>      Sdcalculatefatentrycluster:

   Kiszámításához használt klaszter számot a FAT bejegyzés által meghatározott Sdsectord és Sdbufferpos

      Bemeneti változók:

         Sdsectord      = az aktuális FAT szektor

         Sdbufferpos    = a pozíció azon belül

      Kimeneti változó:

         Sdclusterd     rendelkezik a klaszter szám



................................................................................


>>>      Sdlocatedirsector:



................................................................................

#if Sdwmode > 0
   #if Sdfsactive = 1 Or Sdusewipe = 1

>>>      Sdpreparedatetime:

   Kiszámítására használt dátum és idő a formátumot használják a könyvtár bejegyzések

      Bemeneti változók:
        Sdyear
        Sdmonth
        Sdday
        Sdhours
        Sdminutes
        Sdseconds

        Kimeneti változók:
        Sddatew tartja a dátumot
        Sdtimew tartja az időt

        Belsőleg használt változók:
        Sdtempb

        Dátum és idő formátumok
        Sok FAT fájlrendszer nem támogatja a dátum / idő nem DIR_WrtTime és DIR_WrtDate.
        Emiatt DIR_CrtTimeMil, DIR_CrtTime, DIR_CrtDate és DIR_LstAccDate valójában opcionális mezőket.
        DIR_WrtTime és DIR_WrtDate támogatni kell, de.
        Ha a másik dátum és idő mező nem támogatja, akkor be kell 0-ra a fájlt hoz létre, és figyelmen kívül hagyja a többi fájl műveletek.

        Dátum formátum. A FAT könyvtárra vonatkozó bejegyzés a bélyegzőt egy 16-bites mező, amely alapvetően egy időpontot képest az MS-DOS korszaka 1980/01/01.
        Itt van a formátumot (bit 0 a LSB a 16 bites szó bit 15 az MSB a 16-bit):

        Bits 0-4 : A hónap napja, érvényes tartomány 1-31 beleértve.
        Bits 5-8 : Hónap év, 1 = január, érvényes tartomány 1-12 beleértve.
        Bits 9-15: gróf éve 1980-tól érvényes tartomány 0-127 inclusive (1980-2107).

        Idő formátum. A FAT könyvtárra vonatkozó bejegyzés időbélyeg egy 16-bites mező, amely finomsága 2 másodpercig.
        Itt van a formátumot (bit 0 a LSB a 16 bites szó bit 15 az MSB a 16 bites szó).

        Bits 0-4  : 2 másodperces szám, érvényes tartomány 0-29 inclusive (0 - 58 másodperc).
        Bits 50-10: Perc, érvényes tartomány 0-59 beleértve.
        Bits 11-15: óra, érvényes tartomány 0-23 beleértve.

        Az érvényes idő tartománya Midnight 0:00:00-23:59:58.



................................................................................


#if Sdusefsinfo = 1

>>>      Sdreadfsinfo:

   Használható olvasni a fsinfo változók

      Bemeneti változó
         Egyik sem

      Kimeneti változók:

         Sdfsinfofreeclustersd      : rendelkezik a számú szabad klaszterek

         Sdfsinfonextfreeclusterd   : pont a következő használt klaszter (jellemzően nem az első szabad
                                       újrafelhasználható cluster)

      A visszatérési állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 időtúllépés



................................................................................


>>>      Sdwritefsinfo:

   Használható írni a fsinfo változók vissza az SD kártya (miután frissítve)

     Bemeneti változók:

         Sdfsinfofreeclustersd    : rendelkezik a számú szabad klaszterek

         Sdfsinfonextfreeclusterd : pont a következő használt klaszter (jellemzően nem az első szabad
                                    újrafelhasználható cluster)

     Kimeneti változó
         egyik sem

     A visszatérési állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 időtúllépés
         Sdstatus = 41 adatok elutasította CRC hiba miatt
         Sdstatus = 42 adatok miatt visszautasításra írási hiba


................................................................................


>>>      Sdupdatefsinfo:

   Használható, amikor egy újabb klaszter kerül üzembe helyezett

      Bemeneti változók:

         Sdfatclusterd           = A klaszter imént elkezdte használni

         Sdfsinfofreeclustersd   = tartja a korábbi számú szabad klaszterek

         Sdfsinfonextfreeclusterd : mutat az előző használt klaszter (jellemzően nem az első szabad újrafelhasználható cluster)

      Kimeneti változók:

         Sdfsinfofreeclustersd     :  rendelkezik a frissített számú szabad klaszterek

         Sdfsinfonextfreeclusterd   : pont a következő használt klaszter (jellemzően nem az első szabad
                                    újrafelhasználható cluster)


................................................................................

#if Sdusedirlist = 1

>>>      Sddirlist:

   Jelenleg feltételezi, soha nem töltse ki az SD kártya teljesen!
     Használható, hogy lépjünk előre és hátra keresztül az aktuális könyvtárban
     Hívja a rutin egy ciklus, amelyben ellenőrizni bizonyos Sdstatus értékek
     Visszaállítása Sdstatus 0-ra, mielőtt a következő lépés a hurok

     Az első hívás egy új könyvtárat, hozzá valódi vagy látszólagos Sdclusterd.
     Ha felsorolja a gyökér, állítsa dummy értékét 0 és támogatja a FAT16 könyvtárat.
     Az első hívás egy új könyvtárat, hozzá Sddirlistarraycounter = 0
     Mindig hozzá Sddirlistdirection, 0 = előre, 1 = hátra

         Rutin-specifikus Sdstatuses:
            26 = A fájl bejegyzés találtam
            27 = A könyvtár bejegyzést találtam
            28 = Egy szabad könyvtár helyet talált
            32 = EOD End Of Directory marker található
            33 = Alkönyvtár. vagy .. bejegyzést találtam
            34 = A kötet ID találtam
            36 = Hosszú fájlnév találtam


................................................................................


#if Sdusedirlist = 1

>>>      Sdcheckclusterreference:

    Ellenőrizze, hogy ez azt jelzi, EOC (> = & HFFF8 vagy> = & H0FFFFFF8)  Check if it indicates EOC (>=&HFFF8 or >=&H0FFFFFF8)


................................................................................


#if Sduselfn = 1

>>>      Sdlookforlfn:

    Hívás után Sddirlist visszatért a Sdstatus = 26 (file) vagy 27 (alkönyvtár)


................................................................................


#if Sduselfn = 1

>>>      Sdcalculatelfnchecksum:



................................................................................

#if Sduselfncompare = 1

>>>     Sdcomparefilenames:


................................................................................

#if Sdusewipe = 1       használja a törlést

>>>     Sdwipe:

   Tisztítására használt, és alaphelyzetbe álit FAT1, FAT2, gyökérkönyvtár, és fsinfo szektorban.
      Ez NEM egy valódi formázást!

      Bemeneti változók

         Sdentrynames minden 11 karakter szóközökkel

         Sdentrynames minda 11 Karakter szóközökkel

         Sdyear
         Sdmonth
         Sdday
         Sdhours
         Sdminutes
         Sdseconds


................................................................................

 1 = használja A méret info rutin
#if Sdusesizeinfo = 1

>>>      Sdreceivebuffer18:


................................................................................

>>>      Sdrequestcid:



................................................................................


>>>      Sdrequestcsd:

   ' 16 bytes, MSB first


................................................................................


>>>      Sdcalculatesize:

   Sdrequestcsd után lehet hívni

      ' v2+
   ' Bits 127-126 = 01 (byte 1.6 = 1, 1.7 = 0)
   ' C_SIZE 22 bits 69-48 (bytes 8&B00111111,9,10)
   ' Size = C_SIZE * 2^19

   ' v1.x:
   ' Bits 127-126 = 00
   ' C_SIZE 12 bits 73-62 (bytes 7&B00000011, 8, 9&B11000000)
   ' C_SIZE_MULT 3 bits 49-47 (bytes 10&B00000011, 11&B10000000)
   ' READ_BL_LEN 4 bits 84-80 (byte 6&B00001111)
   ' Size = (C_SIZE+1) * 2^(C_SIZE_MULT+2) * 2^READ_BL_LEN


................................................................................


>>>      Sdrequeststatus:

   SD kérés állapota


................................................................................


#if Sdusecrc7 = 1

>>>      Sdcheckresponsecrc7:

   Fogadja az SD választ, és ellenőrzi a CRC


................................................................................

>>>      Function Sdcrc7(byval Sdarray As Byte) As Byte

   Kiszámítja CRC7 az 5 Első byte Sdarray




================================================================================

Sd status kódok:

   0 = Siker (nincs hiba található)
   1 = Időtúllépés az inicializálás CMD0
   2 = Időtúllépés az inicializálás CMD8
   3 = Időtúllépés az inicializálás first CMD58
   4 = Időtúllépés a kezdeti CMD55 + ACMD41 hurok
   5 = Időtúllépés az inicializálás második CMD58
   6 = Időtúllépés a CMD13
   7 = Időtúllépés várakozás közben & H00 & HFE
   8 = Minimális inicializálási részletesen meg nem határozott hiba 1
   9 = Minimális inicializálási részletesen meg nem határozott hiba 2
   10 = R1 tétlen (futás inicializálás)
   11 = R1 törli alaphelyzetbe
   12 = R1 illegális parancs
   13 = R1 parancsot CRC hiba
   14 = R1 sorozat törlés hiba
   15 = R1 cím hiba
   16 = R1 paraméter hiba
   17 = R3 nem egy SD-kártyát
   18 = R3 tápfeszültség határon kívüliek
   19 = R7 nem támogatott feszültség vagy VHS hiba CMD8 parancs
   20 = R7 meghatározatlan hiba CMD8 válasz
   21 = Nem támogatott FAT32 gyökér cluster számát (nem 2)
   22 = R3 kártyával bekapcsolás foglalt (OCR.31 = 0)
   23 = Nem támogatott fájlrendszer
   24 =
   25 =
   26 = A fájl bejegyzés talált
   27 = A könyvtár bejegyzést talált
   28 = A rendelkezésre álló (korábban törölt) könyvtárban helyet talált
   29 = Nem támogatott szektorok számát klaszter
   30 =
   31 = EOC End Of Cluster lánc jelző található
   32 = EOD End Of Directory jelző található
   33 = Alkönyvtár. vagy .. bejegyzést találtam
   34 = A kötet ID talált
   35 = Nem támogatott szektor mérete
   36 = Hosszú fájlnév találtam
   37 =
   38 =
   39 =
   40 =
   41 = Adat elutasította CRC hiba miatt
   42 = Adat elutasította Write Error miatt
   43 = Szabad FAT bejegyzés található
   44 = vége FAT és nem szabad belépés talált (partíció tele)
   45 =
   46 = kerestünk a teljes FAT16 gyökérkönyvtárba, de nem talált, amit kerestünk
   47 = Szülő könyvtár mutató talált
   48 = A fájl vagy alkönyvtár található

Állapot bitek:

   Sdeof = 1 :  EOF jelző                               (Vége jelző)
   Sdreaddestination    : 0 = Sdbuffer, 1 = Sdfatbuffer    Olvasáskór (Választás a 2 Adat(512Bytes) buffer kőzőt)
   Sdwriteorigin        : 0 = Sdbuffer, 1 = Sdfatbuffer  Íráskor    (Választás a 2 Adat(512Bytes) buffer kőzőt)
   Sdcreatemode         : 0 = Fájl 1 = alkönyvtár
   Sdclosefile = 1      : Lezárja az aktuális fájlt
   Sdpartitionfull = 1  : a partíció tele van (nincs több szabad FAT bejegyzés)
   Sdsavedatasector = 1 : menteni az aktuális adatok szektorba
   Sdfatcontinue = 1    : tovább hurok segítségével az aktuális FAT szektor
   Sddirlistdirection   : 0 = előre, 1 = hátra         Haladás iránya jelző
   Sddirliststartpoint = 1 : A könyvtár hátra lista elérte kiindulópontja
   Sddirlistendpoint = 1   : A könyvtár előre lista végére ért pontja
   Sddirlistoutside = 1 : Vagyunk kívül a könyvtár klaszter tömb, amikor felsorolja a könyvtárat
   Sdlfncontinue = 1    : Folyamatos összeállítása vagy nyomtatás a hosszú fájlnév
   Sdlfnfound = 1       : Utolsó könyvtár bejegyzést a hosszú fájlnév találtak
   Sdappendcontinue = 1 : Továbbra is összehasonlítja a fájlnév
   Sdappendfound = 1    : Fájlt talált
   Sderaseall = 1       : Minden adatot töröl szektorban is


A téma elég nagy ezért a help ís!
A gépi fordítás néhól ramaty, de az idő sürgetett!
:roll:

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. március 20. kedd, 14:04

Példáúl a változókat létre kell hozni előbb:

Kód: Egész kijelölése

Sdyear = 2011
Sdmonth = 5
Sdday = 01
Sdhours = 15
Sdminutes = 57
Sdseconds = 32

Sderaseall = 1   


Ezek a demók csak útmutatások nem kész dolgok!

Itt találod a beállitandó Constansokat:
KokkeKat_FAT-free_SD_lib_decl_Const.bas

Van még ilyen helpem! Ha még érdekel a téma?
Először meg kel érteni. Csak aztán tudod használni!

8)

Avatar
aaszabo
Bitmanipulátor
Hozzászólások: 125
Csatlakozott: 2012. január 22. vasárnap, 7:00
Tartózkodási hely: Budapest

Bascom 2.0.5.0 és az új SD kártya / FAT kezelő

HozzászólásSzerző: aaszabo » 2012. március 20. kedd, 16:43

Kedves kapu48!


Közben rájöttem. A változók deklarálása is változó vezérelt.
Sdwmode=0 esetén az Sdyear változó nincs deklarálva. Ez az alap beállítás.
Gondolom az Sdwmode dönti el, hogy mit akarok csinálni a programomban és ezt előre meg is kell hogy adjam. Gondolom ez azért jó, mert így gondolta a fejlesztője optimalizálni a memória használatot.

Lehet, hogy csak az én programozói stílusom más, mert magas szintű nyelveken fejlesztettem sokáig és csak eleinte dolgoztam ASM-ben, de ez a lib gyalázatosan kesze-kusza. Persze meg lehet érteni, meg fel lehet fedezni, de pont ezt nem akartam, csak használni.

Mindenesetre köszönöm a segítő szándékot!
Ákos

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. március 20. kedd, 17:45

Ez még csak demo lib!
És pont azzal a kéréssel tette közzé a szerző, hogy találjon közreműködő fejlesztőket a projecthez!

Csak akkor jó ha szűkében vagy a program memóriának.
Különben nem olyan bonyolult csak 1* kel belőni a saját konfighoz!

Van 1 működő „Main” változatom. LCD helyett monitorra dolgozik.
Mintának, ha érdekel felteszem a File csere Bere oldalra : KoKK_Main_read.zip

Ha az "Effekt2.csv" feltöltöd PC-röl a MMC-re, akkor AVR beolvassa!
(Még ez is csak demó! A kész változat nem kerül fel ide!)

8)
Ajándék Lónak ne nézd a fogát!
Ahhoz képest elég jól mükszik!
:lol:

Avatar
aaszabo
Bitmanipulátor
Hozzászólások: 125
Csatlakozott: 2012. január 22. vasárnap, 7:00
Tartózkodási hely: Budapest

HozzászólásSzerző: aaszabo » 2012. március 21. szerda, 10:27

Köszönöm a példát. Megnézem.

Ajándék ló akkor ajándék, ha legalább rá tudok ülni és menni vele. Ha csak pusztítja a zabot ( az időmet), de nem megy, akkor hiába ajándék.

Azért nem adom fel és próbálkozom vele, mert meg kell oldanom a problémát. Csak szerettem volna, ha a megoldást nem kell mélységeiben megértenem, csak használnom.

Mindenesetre köszönöm a lelkes segítséget!

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. március 21. szerda, 10:35

A lelkes segítőd abban bízik, hogy Te is teszel valami többlet ismeretet a projecthez!
Mert ha tényleg csak (ki)használni akarod akkor megette a fene a fejlődést!
:wink:

Viszont Robert tanácsát érdemes megfogadni:
„- A változókat a szubrutinokba használod (frames részen ideiglenes fogallás a LOCAL utasítással a DIM helyett)”
Ezt én sem alkalmaztam mivel volt elég helyem.
De a kisebb AVR-ek memóriáját hamar túllépi ez a nagy feladat!
8)

Rengeteg változót és tömböket használ a program. Ha ezeket a területeket használat után felszabadítanánk, sokat nyernénk vele! Csak ehhez át kellene szervezni az egészet.
Ami csak nagyobb darabszámnál éri meg, különben inkább használj nagyobb AVRt!
Igaz abba meg már a AVR-Dos is beleférne, csak az meg sajnos fizetős.
:?

Avatar
ekkold
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2012. szeptember 25. kedd, 6:00

HozzászólásSzerző: ekkold » 2012. szeptember 25. kedd, 13:31

kapu48: írtam privát üzenetet, de nem jelenik meg nálam az üzenetek között (lehet, hogy nem kaptad meg). AVR programozásban kezdő vagyok, és segítséget szeretnék kérni. Meg tudnád adni valamilyen elérhetőségedet? A mail címem:
ekkoldKUKACfreemailPONThu

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. szeptember 27. csütörtök, 12:13

Ne kímélj!

Írjad. Mi a probléma?
8)

Avatar
ekkold
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2012. szeptember 25. kedd, 6:00

HozzászólásSzerző: ekkold » 2012. október 31. szerda, 10:54

Üdv! Most jutottam el oda hogy sikerült az SD kártya főkönyvtárában fájlokat olvasni, és újakat létrehozni a KokkeKat FAT rutinjait felhasználva.

Az lenne a kérdésem, hogy fájl korrekt törlése is megoldható? Nem kell legyalulni csak a helyét szabaddá tenni (az elavult, régi logfájlokat automatikusan törölné a program, így sosem telne meg a kártya)

A másik kérdésem: ha a kártya írása közben elmegy a táp, akkor annyi az egész fájlnak, vagy csak az adott bejegyzés fog elveszni? Illetve hogyan lehetne a fájlok esetleges sérülését megakadályozni (vagy a sérülés valószinüségét csökkenteni)?


Vissza: “Bascom/Arduino/Wiring frissítések”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég