SD kártya ISP módban fájl formátum nélkül

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
bertom69
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2008. április 5. szombat, 6:00

SD kártya ISP módban fájl formátum nélkül

Hozzászólás Szerző: bertom69 »

Üdvözlök mindenkit a fórumon !

A problémám a következő:
SD memória kártyát használok adattárolásra Dos nélkül szabadon. Az itt közölt keretprogramot használva tudok írni és olvasni 512 Byte-os szektoronként, ahogy kell.
A projektemhez 16 és 32 MByte -os SD kártyát használok, mert ez a kisméretű memória nekem eddig megfelelt mérési adatok tárolására, de szeretném bővíteni az adatbázisomat. 256 MByte és az 1GByte -os kártyánál már csak az inicializáláson jut túl, írni és olvasni már nem tud. van valakinek ötlete, hogy mit változtassak rajta ? (a kártyák jók)
A mikrovezérlőmben rengeteg egyéb program lapul, így nem szeretnék AVR-DOS -t használni.
A segítségeteket előre is köszönöm: Tom

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

'-------------------------------------------------------------------------------
'
' ATMega328 3,3V 8MHZ
' 1 szektor = 512 Byte
'
'-------------------------------------------------------------------------------

' Ez tetszőleges kiosztású lehet, az én eszközömhöz így volt célszerű
Config Portb.7 = Output                                     ' SD - CS
Config Pind.5 = Input                                       ' SD - MOSI
Config Portd.6 = Output                                     ' SD - CLK
Config Portd.7 = Output                                     ' SD - MISO

Cs Alias Portb.7
Mosi Alias Portd.5
Clk Alias Portd.6
Miso Alias Pind.7

Const Msbl = 0

Dim Dat As Byte
Dim Addr As Long
Dim Eaddr As Long
Dim Adat As Byte

Dim A As Byte
Dim B As Byte
Dim J As Long
Dim Puffer(512) As Byte
Dim Mondat As String * 16

'Szubrutinok
Declare Sub Sdinit
Declare Sub Sdread(byval Addr As Long )
Declare Sub Sdwrite(byval Byval Addr As Long )

Waitms 100

Config Spi = Soft , Din = Pind.5 , Dout = Portd.7 , Ss = Portb.7 , Clock = Portd.6
Enable Interrupts
Enable Spi
Spiinit

'============================== F Ő P R O G R A M ==============================

'-------------
'Inicializálás
Sdinit
'-------------

'-------------
'Kezdő cím
Addr = 0
'-------------

Kezd:


'--------------------------
'Olvasás rutin -> Start cím
Sdread Addr
J = 0
For A = 1 To 32
          Mondat = ""
          For B = 1 To 16
          Incr J
          Mondat = Mondat + Chr(puffer(j))
          Next B
          Print Mondat
Next A
'--------------------------

'-----------------------
'Írás rutin -> Start cím
'Mwrite Addr
'-----------------------


'Addr = Addr + 512
'Goto Kezd

End

'====================== I N I C I A L I Z Á L Á S ==============================

Sub Sdinit
Set Cs
Dat = &HFF
For J = 1 To 10
  Shiftout Mosi , Clk , Dat , Msbl
Next J
Adat = &HFF
Reset Cs
Cmd0:
Dat = &H40
Shiftout Mosi , Clk , Dat , Msbl
Addr = &H00000000
Shiftout Mosi , Clk , Addr , Msbl
Dat = &H95
Shiftout Mosi , Clk , Dat , Msbl
While Adat <> &H01
   Shiftin Miso , Clk , Adat , Msbl
Wend
Set Cs
   Waitms 50
Reset Cs
Dat = &HFF
Cmd1:
While Adat <> &H00
   Set Cs
   Shiftout Mosi , Clk , Dat , Msbl
   Shiftin Miso , Clk , Adat , Msbl
   Reset Cs
   Dat = &H41
   Shiftout Mosi , Clk , Dat , Msbl
   Addr = &H00000000
   Shiftout Mosi , Clk , Addr , Msbl
   Dat = &HFF
   Shiftout Mosi , Clk , Dat , Msbl
   Shiftout Mosi , Clk , Dat , Msbl
   Shiftin Miso , Clk , Adat , Msbl
Wend
Dat = &HFF
Set Cs
End Sub

'====================== O L V A S Á S  (Addr léptetése) ========================

Sub Sdread(byval Addr As Long)
Set Cs
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
Reset Cs
Dat = &H51
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
While Adat <> 0
   Shiftin Miso , Clk , Adat , Msbl
Wend
While Adat <> &HFE
   Shiftin Miso , Clk , Adat , Msbl
Wend

'---------------
For J = 1 To 512
          Shiftin Miso , Clk , Adat , Msbl
          Puffer(j) = Adat
          Next J
'---------------

Set Cs
End Sub

'====================== Í R Á S   (Addr léptetése) =============================

Sub Sdwrite(byval Addr As Long)
Cmd24:
Set Cs
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
Reset Cs
Dat = &H58
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
While Adat <> 0
   Shiftin Miso , Clk , Adat , Msbl
Wend
Dat = &HFE
Shiftout Mosi , Clk , Dat , Msbl

'---------------
For J = 1 To 512
             Adat = Puffer(j)
             Shiftout Mosi , Clk , Adat , Msbl
             Next J
'---------------

Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
'Ha Adat=229 -> Írás létrejött
'Ha Adat=0   -> Kártya foglalt
Shiftin Miso , Clk , Adat , Msbl
While Adat = 0
   Shiftin Miso , Clk , Adat , Msbl
Wend
Set Cs
End Sub

'-------------------------------------------------------------------------------
Avatar
Higgins
Tranzisztorgyógyász
Hozzászólások: 169
Csatlakozott: 2006. február 23. csütörtök, 7:00

Hozzászólás Szerző: Higgins »

Így én még nem használtam SD kártyát, de szerintem a címzésen változtass, mert szerintem egy nagyobb kártyának alapvetően más címei vannak!

Üdv: Higgins
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Igen a nagyobb memóriának más lehet a címregiszter szervezése!
Ezért tudni kellene a típusát, hogy megkeressük az adatlapját!
És hozzá igazítsuk az írás/olvasás szervezését!

8)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Mintha a blokkméret 512 byte helyett ezekben 1024, majd 2048 byte lenne...
Avatar
bertom69
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2008. április 5. szombat, 6:00

Hozzászólás Szerző: bertom69 »

Kipróbáltam 1024, illetve 2048 -ig pörgetni a léptetést és akkor is ezt dobja ki a tartalom helyett, tehát ez van a tömb elején: "Invalid partition table Error loading operating system Missing operating system" és egy rakás krix-krax még. Biztos, hogy a címregiszter kezelése is ludas a dologban, de pont ebben nem tudok okosabb lenni. Valaha ezt a kódot átírtam, nem nagyon, de eredetileg MMC kártyához használta egy fórumozó külföldi társ, aki hanglejátszót épített és ennek a forrását tette közzé. Az általam használt SD kártyák: PANASONIC RP-SD016B, RP-SD032B ezekkel megy. Amivel nem megy, az pl. KINGSTON SD-M256B1. A kártya minden más készülékkel együttműködik.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Egy Nonem „S222MT256” SD ramom van. Azzal ment hibátlanul, az alábbi teszt írás olvasás.

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

'M128_SDRam01.bas

'AVR-Stamp M128 F MMC SW_SPI
$regfile = "m128def.dat"                                    ' specify the used micro
$crystal = 11059200
$baud = 19200                                               ' USB use baud rate
'$baud1 = 19200                                              ' RS485 use baud rate
$hwstack = 64                                               ' default use 32 for the hardware stack
$swstack = 64                                               ' default use 10 for the SW stack
$framesize = 64                                             ' default use 40 for the frame space

 ' Ez tetszőleges kiosztású lehet, az én eszközömhöz így volt célszerű
 ' 1 szektor = 512 Byte
 'MMC SD-RAM bekötése
Config Portb.0 = Output                                     ' SD - CS
Config Portb.1 = Output                                     ' SD - CLK
Config Pinb.2 = Input                                       ' SD - MOSI
Config Portb.3 = Output                                     ' SD - MISO

Sdcs Alias Portb.0
Clk Alias Portb.1
Mosi Alias Portb.2
Miso Alias Pinb.3

Const Msbl = 0

Dim Dat As Byte
Dim Addr As Long
Dim Eaddr As Long
Dim Adat As Byte

Dim A As Byte
Dim B As Byte , C As Byte
Dim I As Long , J As Long
Dim Puffer_w(512) As Byte , Puffer_r(512) As Byte
Dim Mondat As String * 16

'Szubrutinok
Declare Sub Sdinit
Declare Sub Sdread(byval Addr As Long )
Declare Sub Sdwrite(byval Addr As Long )

Waitms 100

' SW-SPI is configured
Config Spi = Soft , Din = Pinb.2 , Dout = Portb.3 , Ss = Portb.0 , Clock = Portb.1
Enable Interrupts
Enable Spi
'
Spiinit

'============================== F Ő P R O G R A M ==============================

'-------------
'Inicializálás
Sdinit
'-------------

'-------------
'Kezdő cím
Addr = 0
'-------------


Kezd:
For I = 1 To 255                                            '255 * 512 bytes teszt irás - olvasás
   Print "I= " ; I
' Blokk irás
   Print "START! MMC write Addr: " ; Addr ; " Hex: " ; Hex(addr)

   J = 0
   For A = 1 To 32
'          If A < 10 Then Print " " ;
'          Print A ; ": " ;
'          Mondat = ""
          For B = 1 To 16
            Incr J
            C = A + B                                       'Változó adat feltöltéshez összeadjuk az indexeket
            Puffer_w(j) = C + I
'            Print Hex(puffer_w(j)) ; " " ;
'            If Puffer_w(j) > 31 And Puffer_w(j) < 127 Then  'Ha megjeleníthető karakter
'               Mondat = Mondat + Chr(puffer_w(j))
'            Else
'               Mondat = Mondat + " "                        'Ha nem az, kihagyja a helyét
'            End If
          Next B

'          Print  " " ; Mondat
   Next A
'Írás rutin -> Start cím
   Sdwrite Addr


'--------------------------
   Print "START! MMC  read Addr: " ; Addr ; " Hex: " ; Hex(addr)
'Olvasás rutin -> Start cím
'Kezdő cím
'Blokk olvasás
   Sdread Addr
   J = 0
   For A = 1 To 32
          If A < 10 Then Print " " ;
          Mondat = ""
          Print A ; ": " ;
          For B = 1 To 16
            Incr J
            If Puffer_r(j) > 31 And Puffer_r(j) < 127 Then  'Ha megjeleníthető karakter
               Mondat = Mondat + Chr(puffer_r(j))
            Else
               Mondat = Mondat + " "           'Ha nem az, kihagyja a helyét
            End If
            Print Hex(puffer_r(j)) ; " " ;
          Next B
         If Mondat <> "                " Then     'Ha nem üres a sór ki írjuk
            Print " " ; Mondat
         Else
            Print                      'Újsor. Nem töltjük kiírással a drága időt
         End If
   Next A
'--------------------------

   Addr = Addr + 512

Next I
'Goto Kezd

End

'====================== I N I C I A L I Z Á L Á S ==============================

Sub Sdinit
Set Sdcs
Dat = &HFF
For J = 1 To 10
  Shiftout Mosi , Clk , Dat , Msbl
Next J
Adat = &HFF
Reset Sdcs
Cmd0:
Dat = &H40
Shiftout Mosi , Clk , Dat , Msbl
Addr = &H00000000
Shiftout Mosi , Clk , Addr , Msbl
Dat = &H95
Shiftout Mosi , Clk , Dat , Msbl
While Adat <> &H01
   Shiftin Miso , Clk , Adat , Msbl
Wend
Set Sdcs
   Waitms 50
Reset Sdcs
Dat = &HFF
Cmd1:
While Adat <> &H00
   Set Sdcs
   Shiftout Mosi , Clk , Dat , Msbl
   Shiftin Miso , Clk , Adat , Msbl
   Reset Sdcs
   Dat = &H41
   Shiftout Mosi , Clk , Dat , Msbl
   Addr = &H00000000
   Shiftout Mosi , Clk , Addr , Msbl
   Dat = &HFF
   Shiftout Mosi , Clk , Dat , Msbl
   Shiftout Mosi , Clk , Dat , Msbl
   Shiftin Miso , Clk , Adat , Msbl
Wend
Dat = &HFF
Set Sdcs
End Sub

'====================== O L V A S Á S  (Addr léptetése) ========================

Sub Sdread(byval Addr As Long)
Set Sdcs
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
Reset Sdcs
Dat = &H51
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
While Adat <> 0
   Shiftin Miso , Clk , Adat , Msbl
Wend
While Adat <> &HFE
   Shiftin Miso , Clk , Adat , Msbl
Wend

'---------------
For J = 1 To 512
          Shiftin Miso , Clk , Adat , Msbl
          Puffer_r(j) = Adat
          Next J
'---------------

Set Sdcs
End Sub

'====================== Í R Á S   (Addr léptetése) =============================

Sub Sdwrite(byval Addr As Long)
Cmd24:
Set Sdcs
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
Reset Sdcs
Dat = &H58
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
While Adat <> 0
   Shiftin Miso , Clk , Adat , Msbl
Wend
Dat = &HFE
Shiftout Mosi , Clk , Dat , Msbl

'---------------
For J = 1 To 512
             Adat = Puffer_w(j)
             Shiftout Mosi , Clk , Adat , Msbl
             Next J
'---------------

Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
'Ha Adat=229 -> Írás létrejött
'Ha Adat=0   -> Kártya foglalt
Shiftin Miso , Clk , Adat , Msbl
While Adat = 0
   Shiftin Miso , Clk , Adat , Msbl
Wend
Set Sdcs
End Sub
8)
És második kísérletre már az írást kihagytam. Csak a visszaolvasás is OK volt! :lol:
A hozzászólást 3 alkalommal szerkesztették, utoljára kapu48 2010. november 17. szerda, 9:25-kor.
Avatar
strigo
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2006. február 17. péntek, 7:00

Hozzászólás Szerző: strigo »

Szia!
Lehet, hogy itt lesz a probléma:

forrás:

http://www.eefocus.com/%E8%AE%BE%E8%AE% ... 0e65e.html

INITIALIZATION PROCEDURE
While interfacing an SD card with an AVR microcontroller, SD cards of different makes and capacities were procured:a Transcend (1 GB), a SanDisk(1 GB), a Kingston (512 MB), and a Kingston (256 MB)。 To support backward compatibility with the MultiMediaCard(MMC), lower capacity 256-MB and 512-MB SD cards from Kingston support the command CMD1 for card initialization by default.

A 1-GB card from SanDisk would not accept the CMD1 command because the card fully complies with the SD card standard "Physical Layer Specification" (Version 2.00)。 According to these specifications, CMD1 is reserved. It should not be used for SD card initialization.

There is an initialization sequence for a SanDisk 1-GB SD card. A different set of commands needs to be transmitted after CMD0 (i.e., the SD card is in "idle state")。 The R1 response is 0x01. Now the initialization sequence is different. Transmit CMD55 is the prefix command for application-specific command ACMDxx. The command format is(0x40 | 0x37), 0x00, 0x00, 0x00, 0x00,0xFF. Check for the R1 response by transmitting 0xFF eight times (the maximum Ncr response time)。 The R1 response for CMD55 can be ignored.

Now transmit the application-specific command to start card initialization(ACMD41)。 The command format is(0x40 | 0x29), 0x00, 0x00, 0x00, 0x00,0xFF. Check for the R1 response by transmitting 0xFF eight times. The R1 response for ACMD41 should be 0x00. This indicates that the card is initialized and ready to perform a read/write operation.

Ha mégsem akkor elnézést.
Sajnos csak C forrást találtam ezen a linken:

http://www.eefocus.com/blog/link2url.ph ... 2008%2F221
Üdv:
Zsolt
Avatar
bertom69
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2008. április 5. szombat, 6:00

Hozzászólás Szerző: bertom69 »

Gyorsan válaszolok, hogy minél előbb használhassa mindenki az új kódot !

Köszönöm a sok segítséget és a linkeket, mind-mind hasznos info ! :D

kapu48 programkódja fenomenális ! Átírtam a bekötéseket és beírtam az ATMega328 -ba. Még 2 GByte -os kártyával is tökéletesen ír és olvas !

Köszönet érte ! :lol:

Tom
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Köszönöm!
Ha már ennyire megdicsértél! Csiszoltam a tartalom megjelenítésén.
:D 8)
Avatar
bertom69
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2008. április 5. szombat, 6:00

Hozzászólás Szerző: bertom69 »

Köszönöm mindenki nevében is !

Tom :D
Avatar
bertom69
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2008. április 5. szombat, 6:00

Hozzászólás Szerző: bertom69 »

Egy újabb kódrészletet írnék ide, ami még hasznos. :!:
Nagyon gyors szektor szintű törlés.
Az előző kódhoz illeszkedik, úgyhogy az itt hiányzó részek fentebb megtalálhatók.

Jó bütykölést !

Tom

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

' - Új változók és deklaráció

Dim E_addr As Long
Dim V_addr As Long

Declare Sub Sderase(byval E_addr As Long , Byval V_addr As Long) 


'============================== F Ő P R O G R A M ==============================

'-------------
'Inicializálás
Sdinit
'-------------

'1 MByte törlése 2 MByte-tól 3 MByte-ig

'-------------
'Törlés kezdő cím
E_addr = 4096 * 512
'-------------

'-------------
'Törlés vég cím
V_addr = 6144 * 512
'-------------

Print "Torles !"
Sderase E_addr , V_addr
Print "ok"
Waitms 2000

' - Cím beállítása
' - Ellenörző olvasás

End

'=============================== T Ö R L É S ===================================

Sub Sderase(byval E_addr As Long , Byval V_addr As Long)

'A törölt byte-ok tartalma 255 (FF) lesz

'Blokk eleje
Cmd32:
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
Reset Cs
Dat = &H60
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , E_addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
While Adat <> &H00
Shiftin Miso , Clk , Adat , Msbl
Wend

'Blokk vége
Cmd33:
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
Reset Cs
Dat = &H61
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , V_addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
While Adat <> &H00
Shiftin Miso , Clk , Adat , Msbl
Wend

'A kiválasztott blokk törlése
Cmd38:
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
Reset Cs
Dat = &H66
Shiftout Mosi , Clk , Dat , Msbl
Addr = 0
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Adat , Msbl
While Adat = 0
Shiftin Miso , Clk , Adat , Msbl
Wend

Set Cs 
End Sub
A hozzászólást 1 alkalommal szerkesztették, utoljára bertom69 2010. november 13. szombat, 15:25-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

A rutin végéről hiányzik:

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

Set Cs
End Sub
A "CS" lezárása!
:wink:
Avatar
bertom69
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2008. április 5. szombat, 6:00

Hozzászólás Szerző: bertom69 »

Bár működött, de igaz, hogy kell ! :idea:

Beillesztettem !

Tom
Avatar
bertom69
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2008. április 5. szombat, 6:00

Hozzászólás Szerző: bertom69 »

Elhelyeztem egy egyszerű hanglejátszó rutint a
"Hanggenerálás AVR-rel" című fórum témába.

Tom
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Hali!
Ezt a részletet még nem értem:

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

Sub Sdinit
   Set Sdcs	’kikapcsolja az SD-krgyát
   Dat = &HFF
   For Jl = 1 To 10	’A levegőbe küld 10db. HFF Bytes-t
     Shiftout Mosi , Clk , Dat , Msbl	’ERRE MIÉRT VAN SZÜKSÉG???
   Next Jl
   Adat = &HFF
   Reset Sdcs	’Aktiválja az SD kártyát
Cmd0:
’Kártya inic….
Ez miatt HW-SPI esetén kézzel kellene vezérelnem az SD-CS lábat!
Ha ezt kihagyhatnám, mehetne Automatikusan az : NOSS=1|0 ???
Valaki próbálta már ezt?
:? :?:
Válasz küldése