logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Zamek na karty SMART CARD + pamięć EEPROM 24C32

darekwaw 25 Maj 2010 23:00 6124 21
  • #1 8117714
    darekwaw
    Poziom 11  
    Witam kolegów

    Wzorując się na opisywanym na tym forum zamku na karty SMART CARD postanowiłem przerobić ten układ rozbudowując go o pamięć zewnętrzną EEPROM.

    Oto mój proponowany schemat
    Zamek na karty SMART CARD + pamięć EEPROM 24C32

    Prosił bym Was o uwagi i spostrzeżenia - dopiero zaczynam naukę i właśnie taki zamek na 130 kart był by mi potrzebny

    Mam jeszcze kłopot z obsługą tej pamięci w assemblerze, więc jeśli i tu mogę prosić o jakieś uwagi to będę wdzięczny.
  • #2 8117860
    OlekM
    Poziom 17  
    Mam kilka sugestii dotyczących schematu:

    - brakuje diody zabezpieczającej tranzystor sterujący przekaźnikiem
    - nóżkę AVCC należy podłączyć do zasilania, nawet jeśli nie używa się ADC
    - szyna zasilająca '+12V' prawdopodobnie powinna być także dołączona gdzieś za mostkiem prostowniczym a przed stabilizatorem - aby Eagle zrobił połączenie
    - złącze do kart, można znaleźć w bibliotece con-amphenol (komponent C7021214 lub C7022064)

    Nie widziałem projektu, na którym się wzorujesz - ale jeśli to możliwe, proponuję sygnał zegarowy do karty wyprowadzić z nóżki, która może być wyjściem jednego z timerów (czyli np. z PORTB.3). Umożliwiłoby to generowanie sygnału zegarowego "automatycznie" - za pomocą timera.

    //edit:

    Już pamiętam :-)
    https://www.elektroda.pl/rtvforum/topic779952.html
  • #3 8118206
    darekwaw
    Poziom 11  
    Dziękuję za wskazówki. Poprawiłem schemat zgodnie z nimi.

    Zamek na karty SMART CARD + pamięć EEPROM 24C32

    Pozostaje jeszcze oprogramowanie - a dokładnie obsługa zapisu i odczytu do pamięci EEPROM. Czy w tym temacie ktoś mógłby mi pomóc ?
  • #4 8118311
    OlekM
    Poziom 17  
    Wrócę jednak jeszcze raz do schematu :-)

    1. dioda przy przekaźniku powinna być w drugą stronę
    2. czy na pewno styki przekaźnika chcesz podłączyć do mikrokontrolera (jeśli szukasz "po prostu przycisku" zajrzyj do biblioteki switch-omron)
  • #5 8118490
    darekwaw
    Poziom 11  
    Masz rację, pomyłka z mojej strony. SW1 to styk czujnika wsadzonej karty w dniazdku czytnika i faktycznie nie powinien to być styk przekaźnika.

    Zamek na karty SMART CARD + pamięć EEPROM 24C32

    Teraz poprawiona wersja
  • #6 8118582
    utak3r
    Poziom 25  
    darekwaw napisał:
    styk czujnika wsadzonej karty


    Od razu zwracam uwagę na zadbanie w kodzie programu o "debouncing". Styki w postaci dwóch cieniutkich blaszek lubią dawać całe serie impulsów, zamiast oczekiwanego 0 -> 1.
  • #7 8118768
    darekwaw
    Poziom 11  
    Jan na razie w złożonym przezemnie prototypie nie zauważyłem tego zjawiska ale dziękuję za uwagę. Ma to w końcu obsługiwać około 130 osób i każda taka uwaga jest naprawdę ważna.
  • #8 8118882
    utak3r
    Poziom 25  
    A tak już całkiem na boku... smartcard to smartcard - ma bolączkę w postaci wytrzymałości styków - zwłaszcza czytnika.
    Ja już od kilku projektów używam tylko RFID - w zależności od potrzeby albo Unique albo Mifare :)
  • #9 8119064
    darekwaw
    Poziom 11  
    Karty SMART są już u nas używane przez kierowców do bezobsługowej stacji paliw. Dlatego też te same karty chcę wykorzystać do otwierania pomieszczenia.

    Projekt jest taki, że w pomieszczeniu będą przechowywane sprzęty do których kierowcy będą mieć dostęp.
    System ma sprawdzić czy dana karta ma dostęp do pomieszczenia
    Zapisać 8 ostatnich wejść (tu wykorzystam wewnętrzny EPROM attiny)

    Baza kart z dostępem ma być w zewnętrznym EEPROMIE 24C32

    Tak to mam mniej więcej działać
  • #10 8178012
    darekwaw
    Poziom 11  
    Coś mi zapis do tej kostki 24C32 nie działa

    Wykonałem mały programik testowy:

    
    $crystal = 4000000
    
    Config Sda = PortB.5
    Config Scl = PortB.7
    Config I2cdelay = 10
    
    Config Pind.0 = Output
    Config pind.1 = Output
    
    '$sim
    
    Dim Adres As Byte                                           'deklaracja zmiennej ADRES
    Dim Test As Byte
    Dim Dana as Byte
    
    Dim Adr_2 As Byte
    Dim Adr_3 as Byte
    
    Dim L as Byte
    test = 0
    
    For Adres = 150 To 200 Step 2
       Dana = 255
       Gosub Zapis_24c256
    
       Gosub Odczyt_24c256
       Test = Dana
    
       Wait 1
       If Test = 255 then GoSub Mrugaj_Zielona
       if Test <> 255 then GoSub Mrugaj_Czerwona
    Next Adres
    
    End
    '***************** ZIELONA ****************
    Mrugaj_Zielona:
          For L = 0 To 20                                       'OK mruga zielona
             Set Portd.1
             Waitms 50
             Reset Portd.1
          Waitms 50
       Next L
    Return
    '***************** CZERWONA ****************
    Mrugaj_Czerwona:
        For L = 0 To 20
          Set Portd.0
          Waitms 50
          Reset Portd.0
          Waitms 50
       Next L
    Return
    
    Odczyt_24c256:
      Adr_2 = Adres / 256
      Adr_3 = Adres Mod 256
    
      I2cstart
      I2cwbyte 160
      I2cwbyte Adr_2
      I2cwbyte Adr_3
      I2cstart
    
      I2cwbyte 161
      I2crbyte Dana , Nack
    
      I2cstop
    Return
    
    Zapis_24c256:
      Adr_2 = Adres / 256
      Adr_3 = Adres Mod 256
    
      I2cstart
      I2cwbyte 160
      I2cwbyte Adr_2
      I2cwbyte Adr_3
      I2cwbyte Dana
      I2cstop
    Return
    


    Podpiołem tą pamięć do ATtiny2313 tak że PB.7 do lini SCL pamięci a PB.5 do SDA pamięci.

    Linie A0,A1,A2 oraz WP podpiołem do masy
    Niestety żadna dioda nie mruga. Czy ktoś z Was może mi pomóc ?

    Procedury zapisu i odczytu wziołem ze strony
    Link
  • Pomocny post
    #11 8178115
    utak3r
    Poziom 25  
    Jest podciągnięcie obu linii do Vcc przez np.4k7?
  • #12 8178225
    darekwaw
    Poziom 11  
    To chyba ta temperatura tak działa na mnie.
    Faktycznie nie podciągłem linii.

    Teraz postaram się coś zapisać do tych pamięci numery kart
    Mam ich ponad 130.

    Czekam na Waszą pomoc - bo elektronik ze mnie początkujący
  • #13 8178440
    utak3r
    Poziom 25  
    Nie znam protokołu tej pamięci akurat, ale zazwyczaj proces działa tak:

    Zapis:
    - start
    - wyślij adres urządzenia (najmłodszy bit = 0)
    - wyślij adres komórki pamięci
    - wysyłaj po kolei dane, odbierając ACK z urządzenia
    - stop

    Odczyt:
    - start
    - wyślij adres urządzenia (najmłodszy bit = 0)
    - wyślij adres komórki pamięci
    - restart
    - wyślij adres urządzenia (najmłodszy bit = 1)
    - odczytuj po kolei dane, wysyłając po każdym bajcie ACK.
    - po ostatnim bajcie nie wysyłaj ACKa
    - stop
  • #14 8190987
    darekwaw
    Poziom 11  
    Zaczołem pisać oprogramowaine do mojgo układu. Zmieniłem także procesor na ATtiny2312. Ale niestaty program nie chce się kompilować.

    To dopiero początki programowania w Bascomie. Jak na razie kiepsko mi idzie.
    Oparłem się na schemacie załączonym w pliku dodając pamięć 24C32. Za linie SDA i SCL posłużą mi wyjści PD5 i PD6

    Możecie mi pomóc. Proszę.
  • #15 8265350
    darekwaw
    Poziom 11  
    Już wiem jakiego typu karty są używane w naszym systemie. Z opisu wynika, że są to SLE5528.
    Niestety nie potrafię ich odczytać. Czy może któryś z kolegów spotkał się z mini i mógłby mi pomóc w odczytcie tych kart w BASCOM-ie ?

    W załączniku plik PDF z opisem tej karty.
    Załączniki:
  • #16 8279843
    saper_2
    Poziom 18  
    Pozwolę sobie zwrócić uwagę odnośnie schematu :)
    Jak zapewne wiesz styki Vcc i GND są naprzeciwko siebie i jeśli nie masz podstawki do kart ze stykami opadającymi, to przy wkładaniu katy jest duże prawdopodobieństwo ,że karta stykami zewrze Vcc i GND - miałem tak i musiałem dorobić tranzystor do załączania zasilania karty po włożeniu.
    A co do kart SLE5528 mam takie 2szt i czekają na uruchomienie :) ,a karty te są nowszą wersją SLE4428 ,a do tych można znaleźć notę katalogową. W każdym razie jak dostanę notę od sprzedawcy (tam gdzie kupiłem) to mogę ci podesłać.

    A co do bascoma to ci nie pomogę gdyż jestem akurat jego przeciwnikiem :|.
  • #17 8280811
    darekwaw
    Poziom 11  
    Witaj

    Szanuję tych którzy programują w innych językach, po to właśnie one powstają. Jeśli chodzi o kart SLE to interesuje mnie ich sposób odczytu.

    Kartę katalogową oczywiście proszę prześlij na forum może i nie tylko mi się przyda.
  • #18 8369828
    rianrian
    Poziom 10  
    Mam ten sam problem z kartą 4428. Przeszukałem różne fora i nic. Jest wiele informacji ale mało konkretów. Czy może w końcu ktoś napisać aplikację w BASCOM-ie z odczytem i zapisem tej karty?
  • #19 8372180
    darekwaw
    Poziom 11  
    Mi się jak na razie nie udało jej odczytać :(
  • #20 8373470
    saper_2
    Poziom 18  
    Mi się "chyba" udało odczytać ATR ale ze zapomniałem dać rezystora pullup na IO więc nie wiem czy dobrze mi czyta :) . Kod pisałem na STM8.
    uint32_t sle5528_atr(void) {
    	uint8_t t;
    	uint32_t res=0;
    	// after port reset
    	delay1ms(10); // wait for Vcc
    	sle_rst_hi;
    	delay1us(10); // td4=4us
    	sle_clk_hi;
    	delay1us(80);
    	sle_clk_lo;
    	delay1us(10); // td4=4us
    	sle_rst_lo;
    	sle_io_in;
    	delay1us(20); // at least 6us for data setup
    	// bit 0
    	if (sle_io_get) {
    		// LSB first
    		res |= 0x80000000;
    		usart_char('1');
    	} else {
    		usart_char('0');
    	}
    	//res >>= 1;
    	
    	for (t=1;t<32;t++) { // take 31 bits
    		sle_clk_hi;
    		delay1us(SLE_CLK_DELAY);
    		sle_clk_lo;
    		delay1us(10); // at least 6us for data setup
    		
    		res >>= 1;
    		
    		if (sle_io_get) {
    			// LSB first
    			res |= 0x80000000;
    			usart_char('1');
    		} 
    		else {
    			usart_char('0');
    		}
    		
    		
    		if (t%8 == 0) usart_char(' ');
    		
    		delay1us(SLE_CLK_DELAY);
    	}
    	return res;
    }
    A w tej chwili nie siedzę nad tym gdyż karta ma tylko zabezpieczenie przed zapisem ,a nie odczytam więc mi to mało przydatne (przynajmniej nie mam pomysłu co zrobić na niej :D ) ale za parę dni będę przekładał kod na avr'a bo się szybciej programuje i testuje kod niż na stm8.
  • #21 8377390
    rianrian
    Poziom 10  
    Co znaczy "chyba"? Mój czytnik odczytuje dla jednej karty same zera (skp4428) a dla innej (Orlen) same FFFFFFFFFF... To raczej nie jest ATR.

    Mój poprzednik wspomniał coś o rezystorze pulup... -co to takiego? W moim układzie noga z procesora jest bezpośrednio podpięta do styku Io.
  • #22 8380128
    saper_2
    Poziom 18  
    rianrian napisał:
    Co znaczy "chyba"? Mój czytnik odczytuje dla jednej karty same zera (skp4428) a dla innej (Orlen) same FFFFFFFFFF... To raczej nie jest ATR.


    Nie napisałem ,że kod musi działać :)
    Zresztą "chyba" : http://sjp.pwn.pl/slownik/2448904/chyba_I :D (bez urazy :) )

    rianrian napisał:
    Mój poprzednik wspomniał coś o rezystorze pulup... -co to takiego? W moim układzie noga z procesora jest bezpośrednio podpięta do styku Io.


    do sle4428 są noty... A karta ma wyjście OD (albo OC) czyli musisz podciągnąć do plusa, np 10k albo mniej jak chcesz szybciej przesyłać. Mi ten kod "coś" odczytuje ale nie jestem w stanie powiedzieć czy to ATR czy nie na razie się nie doszukałem info jak on powinien wyglądać dla tej karty.
    Jak pisałem będę przenosił kod na avr gdyż stm8 mają zbyt upierdliwe programowanie :) => już to zrobiłem :)

    -- Dodane 23:00 09-08-2010 --

    Potrafię odczytać coś co karta wysyła po resecie i dla SLE5528 jest to 0x91102392 ale czy to dobrze to nie wiem :/ ,w każdym razie zrobiłem na swoim chomiku katalog i w nim jest wersja alfa co odczytuje ATR - czy dobrze to nie wiem :)
    http://chomikuj.pl/sapers_2/Elektronika/sle5528

    Aha, mam 2 karty Glimar kker ( ?? jakaś karta stałęgo klienta - jedna podobno chyba czysta jeszcze) i z tych też "coś" odczytuje :) (nie same 0 lub F :) ) oprócz tego ze starych 3 kart telefonicznych (2 nie polskie i 1 Centertel (polska karta)) też coś potrafi odczytać.

    A tak wygląda schemat, dopóki nie dałem na wszystkie linie pullupów to miałem "cuda" (raz odczytał dobrze ,a 5 następnych razy źle :/ )
    Zamek na karty SMART CARD + pamięć EEPROM 24C32
REKLAMA