Bascom 2.0.5.0 és az új SD kártya / FAT kezelő
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
A létrehozott kód mérete Debug kiírások kikapcsolásával 9356 Bytes.
Remélem hasznos lesz!
(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"
''
Remélem hasznos lesz!
A hozzászólást 2 alkalommal szerkesztették, utoljára kapu48 2012. szeptember 27. csütörtök, 12:16-kor.
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!
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!
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2011. augusztus 7. vasárnap, 21:30-kor.
Re: Bascom 2.0.5.0 és az új SD kártya / FAT kezelő
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
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
Adni kel kezdő értékeket a fordításhoz!
Csináltam anó helpet magamnak, itt megtalálod a beállításokat!
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!
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 gépi fordítás néhól ramaty, de az idő sürgetett!
Példáúl a változókat létre kell hozni előbb:
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!
Kód: Egész kijelölése
Sdyear = 2011
Sdmonth = 5
Sdday = 01
Sdhours = 15
Sdminutes = 57
Sdseconds = 32
Sderaseall = 1
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!
Bascom 2.0.5.0 és az új SD kártya / FAT kezelő
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
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
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!)
Ajándék Lónak ne nézd a fogát!
Ahhoz képest elég jól mükszik!
É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!)
Ajándék Lónak ne nézd a fogát!
Ahhoz képest elég jól mükszik!
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!
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!
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!
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!
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.
Mert ha tényleg csak (ki)használni akarod akkor megette a fene a fejlődést!
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!
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.
Ü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)?
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)?