Elektroda.pl
Elektroda.pl
X
Relpol
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

darekwaw 25 Maj 2010 23:00 5527 21
  • #1 25 Maj 2010 23:00
    darekwaw
    Poziom 9  

    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.

    0 21
  • Relpol
  • #2 25 Maj 2010 23:37
    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/viewtopic.php?t=779952&mark=topic&sid=4e7582e49b5aef37e19692c856cc6ab6

    0
  • #3 26 Maj 2010 07:21
    darekwaw
    Poziom 9  

    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 ?

    0
  • Relpol
  • #4 26 Maj 2010 08:30
    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)

    0
  • #5 26 Maj 2010 09:49
    darekwaw
    Poziom 9  

    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

    0
  • #6 26 Maj 2010 10:33
    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.

    0
  • #7 26 Maj 2010 11:38
    darekwaw
    Poziom 9  

    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.

    0
  • #8 26 Maj 2010 12:17
    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 :)

    0
  • #9 26 Maj 2010 13:15
    darekwaw
    Poziom 9  

    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ć

    0
  • #10 11 Cze 2010 10:26
    darekwaw
    Poziom 9  

    Coś mi zapis do tej kostki 24C32 nie działa

    Wykonałem mały programik testowy:

    Code:

    $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

    0
  • Pomocny post
    #11 11 Cze 2010 10:58
    utak3r
    Poziom 25  

    Jest podciągnięcie obu linii do Vcc przez np.4k7?

    0
  • #12 11 Cze 2010 11:31
    darekwaw
    Poziom 9  

    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

    0
  • #13 11 Cze 2010 12:40
    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

    0
  • #14 14 Cze 2010 21:57
    darekwaw
    Poziom 9  

    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ę.

    0
  • #15 06 Lip 2010 10:20
    darekwaw
    Poziom 9  

    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.

    0
    Załączniki:
  • #16 10 Lip 2010 14:25
    saper_2
    Poziom 17  

    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 :|.

    0
  • #17 10 Lip 2010 21:12
    darekwaw
    Poziom 9  

    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.

    0
  • #18 06 Sie 2010 01:52
    rianrian
    Poziom 9  

    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?

    0
  • #19 06 Sie 2010 21:01
    darekwaw
    Poziom 9  

    Mi się jak na razie nie udało jej odczytać :(

    0
  • #20 07 Sie 2010 11:44
    saper_2
    Poziom 17  

    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.

    Code:
    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.

    0
  • #21 08 Sie 2010 15:23
    rianrian
    Poziom 9  

    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.

    0
  • #22 09 Sie 2010 12:00
    saper_2
    Poziom 17  

    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

    0