Čtečka identifikačních prvků Dallas Touch Memory s přenosem dat do PC
- Zabezpečení přístupu do programu

Navržené zařízení bylo vyvinuto v rámci semestrální práce do předmětu Mikroprocesorová technika na VOŠ v Kutné Hoře.

Autoři: Michal Fuksa, Michal Jirsák, Tomáš Havel

Zadání semestrální práce:
Postavte zařízení řízené jednočipovým mikropočítačem Atmel AT89C2051 (nebo jiným kompatibilním s 8051), které bude řídit přístupová práva k programu, který běží na PC. K autentifikaci osob použijte identifikační prvky DALLAS TOUCH MEMORY. Navržené zařízení bude číst údaj z přiloženého identifikačního prvku a po sériové lince ho předávat do PC, kde bude spuštěný program čekat na autentifikaci. Po autentifikaci osoby napíše její jméno a přidělí oprávnění k manipulaci s programem (správce, běžný uživatel). Navržené zařízení realizujte na desce plošných spojů. Napište program pro PC.

Požadavky na navrhované zařízení
Navrhované zařízení bude realizováno na desce plošných spojů, pokud možno co nejmenších rozměrů, spoje by dále měli být vedeny v jedné vrstvě. K napájení celého zařízení bude potřeba jedno napájecí napětí 5V ss, pokud možno stabilizovaných. Zařízení musí plnit funkce dle zadání, což mimo jiné představuje bezproblémové čtení prvků Touch Memory (předpokládá se použití prvků řady DS1990A), komunikaci s připojeným PC po sériové lince tvořené třívodičovým kabelem, ošetření chybových stavů, na straně připojeného PC pak vyhodnocování přijatých dat z mikrokontroléru.

Možnosti a použití prvků TOUCH MEMORY
Prvky Touch Memory (dále jen TM) mohou být díky své jednoduchosti a praktičnosti použity v mnoha odvětvích lidské činnosti. Jako identifikační prvek mohou být použity např. ve zdravotnictví (nemocniční pacient má na zápěstí řemínek s TM), ve skladovém hospodářství, v evidenci zaměstnanců (osobní kartička s TM), v automobilech (náhrada klasického startovacího klíčku), v počítačové oblasti (např. jako autentifikační prvek k přihlášení do počítač. sítě), obecně tedy k jakékoliv identifikaci. Systém se skládá ze samotného ident. prvku (tzv. iButton) a čtečky těchto prvků. Existuje několik variant prvků TM s různými možnostmi (viz tabulka č.1). Prvek TM je čip uzavřený do ocelového pouzdra, elektrické rozhraní je zredukováno na minimum - tzn. jeden datový vodič + zem. Napájení TM potřebné pro všechny operace je v podstatě "ukradeno" z datového vodiče nebo je bráno z externí lithiové baterie (pokud je připojena). Základní typ DS1990A, pro který je námi navržené zařízení určeno, nemá žádnou paměť ani RTC obvod, nese v sobě pouze sériové číslo. Ostatní typy (DS1991 až DS1920) nabízejí kromě sér. čísla např. i paměť NVRAM (nonvolatile), do TM tak mohou být data i zapisována. Další typy mají paměť EPROM, nelze je však elektricky mazat, data tak mohou být pouze přidávána. Typ DS1994 je navíc doplněn obvodem reálného času RTC. Každý typ má svůj Family kód, který jej jednoznačně identifikuje.

Tab. č.1

Typ

Family kód

Sériové číslo

Velikost a typ paměti

Počet chráněných bitů NV RAM

Hodiny reálného času

DS1990A

01H

ano

– – –

– – –

– – –

DS1991

02H

ano

512,NVRAM

3*384

– – –

DS1992

08H

ano

1k,NVRAM

– – –

– – –

DS1993

06H

ano

4k,NVRAM

– – –

– – –

DS1994

04H

ano

4k,NVRAM

– – –

ano

DS1995

0AH

ano

16k,NVRAM

– – –

– – –

DS1996

0CH

ano

64k,NVRAM

– – –

– – –

DS1982

09H

ano

1k,EPROM

– – –

– – –

DS1985

0BH

ano

16k,EPROM

– – –

– – –

DS1986

0FH

ano

64k,EPROM

– – –

– – –

DS1920

10H

ano

16,EEPROM

Temperature iButton


Typ DS1990A
Vyrábí se ve dvou variantách lišících se od sebe pouze tloušťkou prvku.
Obr. č.1 Varianty prvku DS1990A
F3 F5


Touch Memory DS1990A správně pracuje dle výrobce při teplotě -40°C až +85°C.
Obsahuje unikátní 64-bitové registrační číslo, laserem vypálené ve struktuře TM při výrobě, skládající se z 8-bitového Family kódu, 48-bitového sériového čísla, 8-bitového kontrolního součtu. Je zaručeno, že neexistují dva stejné prvky TM. Komunikace mezi nadřízeným (MASTER) mikroprocesorem a podřízeným (SLAVE) prvkem TM probíhá za použití protokolu 1-Wire rychlostí až 16,3 kb/s. Pro kontrolu správného sériového čísla je použito cyklického kódu CRC, který je vypočten z datových bytů 0 až 6 (viz obrázek níže) a uchován v 7.bytu. Na přijímací straně se tento kontrolní součet vypočítá z prvních 56 přijatých bitů a porovná s kontrolním součtem uloženým v 7.bytu TM DS19xx. Kontrolní součet ale dle potřeby nemusí být využíván ke kontrole správnosti sér. čísla.

Čtečka TM
Zajišťuje fyzický kontakt s TM, její snímací část je vyrobena rovněž z oceli, je uzpůsobena i k montáži do panelu. Nejjednodušší provedení čtečky (Touch Memory Probe) má označení DS9092.
Obr. č.2 Čtečka DS9092, možná montáž do panelu
Čtečka DS9092 Umístění v panelu


Sériové rozhraní RS-232C
Protože standard RS-232C byl vytvořen v době, kdy se ještě běžně nepoužívaly obvody TTL, nepoužívá standard logické úrovně 5V a zem. Namísto toho je vysoká úroveň definována jako rozsah napětí +5V až +15V, nízká úroveň jako rozsah -5V až -15V. Tyto hodnoty platí pro výstupní část. V přijímací části jsou jednotlivé úrovně definovány tak, že poskytují 2V "šumové" pásmo : vysoká úroveň je +3V až +15V, nízká úroveň je -3V do -15V. Dále je důležité to, že nízká úroveň (-3V až -15V) je definována jako log. 1 , někdy je označována jako značka ("mark"). Stejně tak je tedy vysoká úroveň (+3v až +15V) definována jako log. 0 , někdy je označována jako mezera ("space"). Předchozí označení nízké a vysoké úrovně tedy nebylo příliš správně zvoleno, důležité ale zůstává to, že je zde uplatněna negativní logika.Přehledně jsou úrovně zakresleny na obr. č. 3.

Obr. č.3 Definice logických úrovní rozhraní RS-232C
Definice RS-232C

Rozhraní standardu RS-232C má definováno určité funkce signálů, které toto rozhraní obsahuje. Tyto signály lze rozdělit do čtyř skupin: společné, datové, řídící a časovací. Celkem je těchto signálů asi 24. Popis všech signálů je nad rámec tohoto seznámení, budu se soustředit pouze na signály, které v našem zařízení využíváme. A to jsou 2 datové a společná zem. Z toho jeden datový signál je pro čtení - Received Data (RD), druhý pro zápis dat - Transmitted Data (TD). Existují 2 typy konektorů, které se od sebe liší počtem vyvedených signálů. Konektor je tedy buď 25-pinový nebo 9-pinový (viz obr. č.4). Ne všechny aplikace však vyžadují použití všech 24 signálů, např. počítačový modem jich potřebuje pouze 8. My pro naše zařízení potřebujeme tedy pouze 3 uvedené signály (RD,TD,GND), stačí nám totiž pouze přenos dat bez dalšího řízení. Maximální přenosová rychlost definovaná standardem je 20kb/s. Maximální vzdálenost mezi dvěma komunikujícími zařízeními , potažmo maximální délka propojovacího kabelu je odvozena od kapacity právě použitého kabelu. Např. pro 3 vodičový kabel o kapacitě jednoho 20pF/0,3m lze dosáhnout vzdálenosti až 24 m.

Obr. č.4 Rozmístění signálů v 25-pinovém a 9-pinovém konektoru CANNON
Popis pinů v konektorech
Dále je tedy pro naše potřeby nutné upravit napěťové úrovně signálu TTL (89C2051) na úrovně RS-232C (PC) a naopak. K tomu jsme tedy použili IO MAX232 od výrobce fy MAXIM. Ten zajišťuje právě zmíněný převod napěťových úrovní. Obecně tyto IO obsahují tzv. řidiče(vysílače) linky, který generují napěťové úrovně vyžadované rozhraním RS-232C a přijímače linky, který zpracovává napěťové úrovně z RS-232C. Řidič i přijímač linky navíc signál invertují, protože RS-232C pracuje se zápornou logikou. MAX232 je dvojitý RS-232C vysílač(řidič)/přijímač podporující všechny specifikace standardu RS-232. Vyžaduje pouze jedno napájecí napětí +5V a 4 externí kondenzátory. Má nízkou spotřebu, maximální přenosová rychlost je 120kb/s. Obvod navíc obsahuje napěťový zdvojovač a invertor(na principu tzv."nábojové pumpy"), který z jednoho napětí +5V vytváří +10V a -10V.

Námi navrhnuté řešení, provedení:

Funkce zařízení:
Pokud je zařízení v klidu (TM není přiložen ke čtečce), kontrolní LED dioda nesvítí. Zařízení čeká na přiložení TM. Pokud je TM přiloženo, mikrokontroler (dále jen MK) začne pracovní cyklus zjištěním tzv. family kódu, pokud je tento kód roven kódu TM typu DS1990A (tedy kód 01H) , začne číst sériové číslo z TM. Pokud tento kód není nalezen (je přiloženo TM jiného typu než DS1990A, čtečka má být záměrně "ošizena" např. přímým propojením obou kontaktů) , kontrolní LED dioda se rozsvítí a zůstává rozsvícena i při "uvolnění" čtečky. MK čeká na přiložení dalšího TM. Po nalezení správného family kódu se rozsvítí LED dioda a pokračuje se čtením sériového čísla TM. Po dokončení čtení sér. čísla MK začne vysílat zjištěné sér. číslo sériovou linkou na port připojeného PC. Během vysílání není možné testovat další TM (program nevyužívá přerušovací systém MK). Po odvysílání sér. čísla LED dioda s určitým zpožděním (přibližně 0,5 sekundy) zhasne a MK přechází do stavu čekání na další TM.

Postup práce s TM (způsob čtení a zápisu)
Do TM musí MK (obecně MASTER) poslat tzv. Reset puls, kterým se TM inicializuje, pokud je připojeno; když připojeno je, tak TM po inicializaci vyšle MK zpět tzv. Presence puls. Ten dává MK vědět, že je TM přítomno. Potom musí MK začít vysílat do TM log.1, čímž je umožněno čtení z TM (port 8051 musí být v log.1, aby byl schopen číst hodnotu na něj přivedenou). TM buď log.1 nechá nezměněnu (TM vysílá log.1) nebo přizemní dat. vodič do nuly na 15µs (TM vysílá log.0). Během těchto 15µs je stav dat.vodiče rozhodující pro správné přečtení mikrokontrolerem. Reset puls je definován jako přizemnění dat. vodiče po dobu min. 480µs tRSTL(jinými slovy 8 time slotů zápisu log.0) a následně přivedením dat. vodiče do log. 1 po dobu rovněž 480µs tRSTH. Poté, co je Reset puls odeslán (jen část v log.0), v případě, že je TM připojeno, tak TM čeká po dobu tPDH (nominálně 30µs - viz obrázek) a potom vygeneruje Presence puls o délce tPDL (nominálně 120µs). Jestliže je TM odpojeno od čtečky, přizemní se tak dat. vodič a to v podstatě reprezentuje Reset puls nekonečné délky. TM pracuje v prostředí otevřeného kolektoru při napěťových úrovních začínajících od 2,8V do 6V. Napětí větší než 2,2V jsou interpretována jako log.1, napětí menší než 0,8V jako log.0. Napětí přivedené na plus TM (přes rezistor) musí být minimálně 2,8V, aby bylo možné nabít vnitřní kondenzátor, který napájí TM během period, kdy je datový vodič v log.0. TM pracuje s jednovodičovým přenosem dat (po bitech), kde je log. 1 a log.0 representována různými napěťovými úrovněmi v časovém průběhu. Průběhy sloužící k zápisu do TM se nazývají write-1 a write-0 time sloty (viz obrázky níže). Jak je z těchto průběhů vidět, k zápisu log. 1 musí být na dat. vodiči přidrženo 0V po dobu menší než 15µs, k zápisu log.0 musí být přidrženo 0V nejméně na 60µs. Průběh aktivní části time slotu může být prodloužen nad 60µs. Maximální prodloužení je limitováno faktem, že přizemnění dat. vodiče na dobu větší než 480µs je definováno jako Reset puls. Vlivem určitých tolerancí však může být jako Reset puls vyhodnoceno přizemnění trvající už kolem 120µs. Proto je dobré brát těchto 120µs jako doporučené maximum. Na konci každého time slotu potřebuje TM alespoň 1µs pro sebe k tomu, aby se mohlo "připravit" na další bit.
Podrobné informace o způsobu práce s Touch Memory najdete zde.
Podrobný popis standardu Dallas Touch Memory (iButton) najdete zde.

Sekvence přístupu k TM je názorně zobrazena ve vývojovém diagramu

Vývojový diagram Tx představuje vysílání

Time slot zápisu log.1
Zápis log.1

Time slot zápisu log.0
Zápis log.0

Time slot čtení
Čtení

Průběh Reset a Presence pulzu
Reset a Presence puls


Princip obsluhy sériového přenosu dat z mikrokontroleru do PC
Práce se sériovou linkou spočívá v těchto základních bodech:
1) nastavení sériové linky
2) samotný přenos po sériové lince, přičemž ten může být řešen
    a)bez využití přerušovacího systému
    b)s využitím přerušovacího systému

Nastavení sériové linky
Nejprve je důležité se rozhodnout, s jakými parametry bude přenos probíhat. Volba parametrů závisí především na tom, jaký "komunikační protokol" si zvolíme a je nutné je volit i v návaznosti na parametry zařízení, s kterým bude mikroprocesor komunikovat. Jedná se především o nastavení:
- komunikační rychlosti
- délce datového slova (počet přenášených datových bitů)
- počet stop bitů
- typ parity

Tato nastavení se provádějí volbou pracovního módu sériové linky. My jsme zvolili mód 1 - asynchronní 8-bitový UART. Pro dosažení některé ze standardních komunikačních rychlostí (2400,4800,9600,19200) bylo nutné zvolit krystal o frekvenci 11,0592MHz. My jsme zvolili přenosovou rychlost 19200 b/s. Vyšších rychlostí je totiž možné dosáhnout pouze v režimech 1 a 3, kde je přenosová rychlost odvozena od periody přetečení časovače/čítače 1. Přenosová rychlost je zde odvozena dle vztahu:
Přenosová rychlost
Pro rychlost 19200 b/s pak z tohoto vztahu vyšly tyto nastavení:
Přenosová rychlost 19200b/s
tzn. nastavení bitu SMOD v registru PCON, časovač 1 v módu 2, v registru TH1 hodnota 253
Náš komunikační protokol přenosu dat přes sériovou linku má tyto parametry:
- přenosová rychlost 19200 b/s, 8 datových bitů, bez parity, 1 stop bit
- přenos bude prováděn bez využití přerušení od sériové linky MK
- data budeme pouze vysílat (z MK do PC)

POZNÁMKA k výpisu programu : Místo přímé adresy 87H lze psát MOV PCON,#10000000B. Přímá adresa je zde uvedena proto, že námi použitý překladač symbolické označení PCON neakceptoval.

Dále je nutné zajistit stejné nastavení komunikační parametrů u protějšího zařízení, s kterým bude mikroprocesor komunikovat. V našem případě tedy šlo o komunikaci 8051 s osobním počítačem PC, kde jsou obvykle přítomny dva sériové porty standardu RS-232C.

Doporučené zapojení konektorů
V našem případě jsme použili tzv. bezmodemové spojení - bez řízení toku dat (bez žádného tzv. handshakingu-viz rozhraní RS-232C) Pro spojení zařízení 8051 s PC byl použit kabel sestávající ze 3 vodičů s 9-pinovými konektory CANNON na obou koncích kabelu. Na straně 8051 potřebujeme 3 signály (RxD,TxD,GND), na straně PC jich je potřeba trochu více. Nejlépe je způsob zapojení vidět na obrázku č.5.

Obr. č. 5 Spojení 8051 s PC (RS-232C)

Strana
8051
Spojení 8051 s RS232
Strana PC
(RS-232C)
Čísla ve sloupci D25 nebo D9 znamenají čísla vývodů v 25-pinovém nebo 9-pinovém konektoru.
Z obrázku je patrné nutné křížení vodičů RD aTD mezi 8051 a PC. U 8051 odpovídá označení RD vývodu RxD a TD vývodu TxD, SG znamená GND(zem).
Signály DTR,DSR,CD,RTS a CTS je nutné pospojovat dle obrázku. Význam těchto signálů je následující (jejich popis jsem provedl tak, jako by byl MK 8051 připojen jako modem; právě proto, že s 8051 lze komunikovat pouze "bezmodemově" - 8051 nemá signály pro řízení toku dat, je nutné tyto signály na straně PC "ošidit"):
DTR (Data Terminal Ready) - signál vysílaný z PC, sděluje MK, že je PC funkční
DSR (Data Set Ready) - signál vysílaný z MK, sděluje PC, že je funkční a připravený komunikovat
CD (Carrier Detect) - signál vysílaný z MK, sděluje PC, že byl detekován signál vysílaný modemem na opačném konci komunikačního kanálu
RTS (Request To Send) - signál vysílaný z PC, sděluje MK, že PC je připraveno přijímat data
CTS (Clear To Send) - signál vysílaný z MK, sděluje PC, že MK je připraven přijímat data a vysílat je do komunikačního kanálu

Softwarová obsluha na straně PC
Je možná jak v DOSu, tak ve Windows 95/98. My jsme zvolili případ obsluhy programem napsaným v Turbo Pascalu 7.0. Programová obsluha sestává z programové jednotky ibmcom, která obsahuje procedury využívající služeb DOSu a "sahá" přímo na hardware, a z hlavního programu, který volá tyto procedury se zde nastavenými parametry. Základní verze programu (TPCOM.ZIP) byla stažena ze zajímavé stránky o programování , kde lze najít obsluhy sériového rozhraní i v jiných programovacích prostředcích (Delphi,Visual Basic,C++).

Popis vývodů IO AT89C2051, MAX232
pohled shora
Pouzdro AT89C2051 Pouzdro MAX232


Elektrické zapojení zařízení

Vychází z doporučených zapojení výrobců. U ATMELu 89C2051 jsou dodrženy doporučené hodnoty kondenzátorů u krystalu, dále pak hodnoty součástek obvodu pro RESET (reset se aktivuje úrovní log.1). U obvodu MAX232 jsou dodrženy doporučené hodnoty externích kondenzátorů a uzemnění některých nevyužitých vývodů obvodu. Obvod pro čtení TM vychází ze zapojení výrobce DALLAS Semic., ten kromě použitého rezistoru doporučuje připojit i ochrannou Zenerovu diodu 5,6V mezi dat. vodič a zem paralelně k vývodům čtečky DS9092, která má chránit mikroprocesor před zničením vlivem elektrostatického náboje, který může vzniknout při přiložení TM ke čtečce. Ke každému IO je připojen ochranný blokovací kondenzátor paralelně k napájení, jeden ochranný kondenzátor je připojen hned za svorkovnici napájení celé desky.

Celkové schéma zapojení modulu
kliknutím na obrázek získáte schéma zapojení v plné velikosti
Náhled schématu zapojení

Soupiska použitých součástek pro desku plošných spojů:
(značení součástek dle katalogu GM Electronic)

Položka

Množství

Referenční označení

Typ

1

5

C1,C2,C3,C4,C5

1uF/50V

2

2

C6,C7

33pF

3

1

C8

47uF/16V

4

1

C9

220uF/16V

5

1

C10

100nF

6

1

D1

LED červená 3mm

7

1

IO1

AT89C2051

8

1

IO2

MAX232

9

2

J1,J2

svorkovnice ARK 210/2

10

1

K1

CANNON 9-PIN (CAN 9V 90)

11

1

R1

220W

12

1

R2

47kW

13

1

R4

4k7

14

1

S1

Tlačítko P-B1720A

15

1

X1

krystal 11,0592MHz


Další použité komponenty:
1 x patice SOKL20 (20-pin DIP)
1 x patice SOKL16 (16-pin DIP)
1 x Touch Memory Probe DS9092
kabel pro sérivou komunikaci:
* 3-žilový sdělovací kablík
* 2 x konektor CAN 9Z

Zhodnocení, přednosti a nedostatky:
Navržené zařízení po sestavení pracovalo bezchybně dle stanovených požadavků. Co se týče bezpečnosti přenosu dat mezi čtečkou a MK, nevyužili jsme kontrolu správnosti přečtení sériového čísla pomocí kontrolního součtu CRC, který je uchován v TM již při výrobě. Tento kontrolní součet by se musel v MK poměrně složitě počítat z přijatých datových bytů. I když rutinu pro výpočet CRC výrobce zveřejnil přímo v assembleru 8051, její implementace do programu navrženého zařízení se nám jevila jako nepodstatná. Při přenosu dat z MK do PC by bylo vhodné použít zabezpečení přenosu paritou. Tu by nám usnadnila i velmi jednoduchá možnost MK, kdy se při uložení přenášeného bytu do akumulátoru generuje lichá parita do bitu P registru PSW. Ta by se pak uložila do bitu TB8 registru SCON (devátý datový bit při vysílání sér.linkou) a mód 3 sér.linky. Zabezpečení paritou jsme ale bohužel nemohli použít z důvodu, že pascalovská programová jednotka ibmcom neumožňovala nastavit 9-bitový režim na straně PC. Parita by šla ale zavést jinak - protože ASCII kód, v kterém jsou data vysílána, je 7-bitový, bylo by možné paritní bit uložit do 8.bitu přenášeného bytu. V pascalovém programu by tak mohl zůstat 8-bitový režim, ale o to složitěji by se musel paritní bit z přijatého bytu získávat. V aplikacích, které vyžadují velkou bezpečnost přenášených dat (nejen z pohledu chyb, ale i možného odposlechu), pouhá parita nestačí a je nutné přenos dat zabezpečit alespoň jednoduchým šifrováním.
Doporučení: (doplněno po několika týdenním provozu):
Řetězec 12 znaků (sér.číslo TM) vysílaný z 8051 do PC je lepší zakončit dalším libovolně zvoleným (kromě platných znaků pro sér.číslo), tzv.synchronizačním znakem a tento znak pak vyhodnocovat v pascalovském programu na PC. Bude tak zajištěné naprosto bezpečné přečtení sér.čísla - nemůže docházet k posunutí znaků v načítaném řetězci.

Program ASM  Výpis programu pro mikrokontroler AT89C2051
Výpis programu pro PC (Turbo Pascal 7.0)

Zpět na hlavní stránku