TP5 : LECTURE DE CARTE A PUCE ASYNCHRONE

Transcription

TP5 : LECTURE DE CARTE A PUCE ASYNCHRONE
IUT GEII Rouen
TPA2I-21 (2005-2006)
TP5 : LECTURE DE CARTE A PUCE ASYNCHRONE
ldaa
staa
A) Introduction
Ce TP porte sur la mise en oeuvre d'un système de lecture de carte à puce. Vous allez découvrir
comment fonctionne une carte à puce asynchrone (à ne pas confondre avec les carte synchrones,
type carte bancaire...).
L'objectif est de réaliser un programme réalisant un contrôle d'accès: selon la carte placée dans le
lecteur, un afficheur LCD indiquera si l'accès est autorisé ou interdit. Vous utiliserez pour cela le
fichier "rout_lcd.asm", développé au TP précédent.
Ce TP vous permettra également de vous familiariser avec les instructions de manipulation de bits
du 68hc11. Vous verrez aussi comment réaliser une conversion série/parallèle d'un octet.
1) Aspect Hardware
La carte sera insérée dans un lecteur de carte universel, connecté au Port C du 68hc11. Sur les 8
bits du connecteur ISO de la carte, outre l'alimentation (5V), seuls 3 seront utilisés :
- CLK : pour incrémenter le compteur d'adresse, et amener le bit suivant sur la sortie
- RST : pour réinitialiser le compteur d'adresse, et amener le 1er bit sur la sortie
- I/O : broche de lecture du bit de donnée
#%_____________
DDRC
-b3) Conversion série parallèle
Celle-ci repose sur un décalage à gauche d'un cran à chaque bit lu, avec "injection" à droite du bit
lu. Au bout de 8 décalages, on retrouve l'octet lu, avec le premier bit en poids fort. Ceci est illustré
ci-dessous (sur 4 bits), en supposant qu'on lise la séquence : "1001":
Etape
1
2
3
4
Avant décalage
0000
0001
0010
0100
Après décalage
0001
0010
0100
1001
bit lu
1
0
0
1
Pour l'implémentation en assembleur, on utilisera une instruction de rotation à gauche, et on
positionnera le bit C (Carry) selon la valeur du bit lu. Ecrire une implémentation de cet algorithme
sous forme d'un sous-programme READ_BYTE, qui renverra dans A l'octet lu..
Un contact "fin de course" sur le lecteur de carte est connecté à STRA, et servira à déclencher la
routine de lecture.
READ_BYTE
2) Aspect Sofware
A <-0
Le programme principal réalisera uniquement l'affichage d'une "invite" ("Insérez la carte"), une
routine d'interruption réalisant la lecture de la carte et la conversion série/parallèle. La routine lira
le 3ème octet de la carte (bit 16 à 23), et fera une comparaison avec une constante définie dans le
programme, puis affichera un message adéquat: si égalité entre le code et l'octet lu, "accès
autorisé", sinon, "accès interdit".
O
bit I/O = 1 ?
CARRY <- 0
CARRY <- 1
Les opérations sur la carte (signal CLK et RST) seront gérés via des sous-programmes.
B) Préparation
Rotation gauche A
(voir document dernière page)
-b1) Pour manipuler les bits CLK et RST, qui seront en pratique les 2 seuls que vous aurez à gérer,
vous utiliserez les instructions BSET et BCLR (voir TD). A cet effet, il faudra définir dans l'en-tête
du programme les étiquettes CLK et RST
AVANCE
N
CLK
equ
%_____________
RST
equ
%_____________
-b2) Quelle sera la valeur à programmer dans DDRC pour avoir les bits CLR et RST configurés en
sortie sur le Port C.
8 bits lus ?
O
Fin
Nota: pour tester le bit lu, on pourra utiliser le fait que celui-ci arrive sur le bit 7 du PortC, et que
celui ci sera donc recopié dans le bit N du registre CC (bit de signe), testé facilement avec
BMI/BPL
Page 1/3
IUT GEII Rouen
TPA2I-21 (2005-2006)
C) Travail Demandé
-5) Sous-programmes gestion carte à puce
-1) Créer un nouveau fichier en utilisant le fichier modèle, et le renommer en TP5.asm. Stocker
dans la zone de données, avec la directive FCC, les chaînes suivantes. Vous placerez cette zone à
l'adresse $0000 (ORG $0)
Ecrire les 2 sous programmes AVANCE et RESET, qui devront respecter les algorigrammes
proposés. Vous utiliserez les instructions BSET et BCLR.
Adresse
msg1
msg2
msg_lect
msg_non
msg_oui
Chaîne
Inserez...
... la carte
Lecture en cours
Accès Interdit
Accès Autorisé
Déclarer également une constante CODE en mémoire (avec FCB).
AVANCE : enverra un front montant sur CLK, suivi d'un front descendant
RESET : Enverra un front montant sur CLK, avec RST mis à '0', afin de réinitialiser le compteur
d'adresse interne à la carte
RESET
RST <- 0
AVANCE
CLK <- 1
-2) Programme principal
Ecrire un programme principal, qui va faire afficher alternativement les messages 1 et 2,
entrecoupés d'un appel à un sous-programme TEMPO. Penser à placer dans le bloc "Initialisations"
un appel au sous-programme INIT_AFF, et ajouter en fin de listing (avant la zone de données !) la
ligne pour inclure le fichier de gestion de l'afficheur:
#include
Avance
RST <- 1
Tempo
CLK <- 0
rout_lcd.asm
Validez le fonctionnement
Fin SP
-3) Bloc d'initialisation
Tempo
Fin
Ecrire le bloc d'initialisations qui devra effectuer les tâches suivantes :
- Initialisation pile
- Initialisation affichage
- Réinitialisation "initiale" du bit d'état de l'interruption
- Configuration du Port C (sens des broches)
- Configuration des interruptions (3 items... voir TD)
-4) Routine d'interruption
Ecrire une routine d'interruption minimale qui devra (pour l'instant...) uniquement :
- Réinitialiser le bit d'état
- Afficher le message "lecture en cours", suivi d'un appel à TEMPO
-6) Conversion série / parallèle
Ecrire le sous-programme READ_BYTE.
-7) Lecture 3ème octet et comparaison
Compléter la routine d'interruption: après l'affichage du message, faire un appel au sousprogramme RESET, puis 3 appels à READ_BYTE, afin de lire le 3ème octet de la carte.
Puis le comparer à la valeur du code (variable CODE), et selon le résultat de la comparaison,
afficher le message "Accès Interdit" ou "Accès Autorisé".
Validez le fonctionnement, et imprimer.
Valider le départ en interruption en lançant le programme ('Go 100'): lors de l'insertion d'une carte,
le message "Lecture en cours" doit s'afficher, puis après l'écoulement de la tempo, les 2 messages
initiaux doivent revenir.
Page 2/3
IUT GEII Rouen
TPA2I-21 (2005-2006)
TP "CARTE A PUCE" : DOCUMENTS RESSOURCES
1) Description d'une carte à puce type "télécarte France Télécom"
4) Connecteur ISO :
Les cartes à puces asynchrones 8 contacts sont constituées d'une EPROM 256 bits (256 x 1), à
accès série, associée à un compteur d'adresse. Les bits sont initialement tous à zéro, et un procédé de
programmation permet de les "claquer" à 1, de façon non réversible.
Vcc 1
5
2
6
3
7
4
8
Tous sont lisibles, mais les 96 premiers ne peuvent être écrits qu'en usine puisqu'un fusible de
protection (contact ISO 8) est grillé en fin de fabrication. Ce groupe de 96 bits est unique pour
chaque télécarte fabriquée, cela à des fins de sécurité.
Parmi ceux-ci, les bits 8 à 15 forment le "code application" de la carte : il peut prendre la valeur 03,
04, 05 ou 06 pour une télécarte française, mais sera toujours supérieur ou égal à $80 pour une
application différente. En effet, FT à réussi à imposer aux fabricants de circuits intégrés pour cartes
à puces de pré-programmer à 1 le bit n°8 des puces livrées à d'autres clients.
Toute la zone de 96 à 255 est affectée au comptage d'unités. Initialement à 0, elle se remplit
progressivement de 1 à raison d'un par unité consommée. Théoriquement, la capacité d'une telle
carte pourrait donc atteindre 160 unités. En pratique, il est d'usage d'en "griller" 10 en usine, ce qui
limite à 150 unités la valeur des cartes basées sur cette technologie.
Gnd
5) Brochage de la carte (norme ISO):
Broche
1
2
Nom
VCC
R/W
Rôle
+5V
Lecture/écriture
Broche
5
6
Nom
GND
Vpp
3
4
CLK
RST
Avance
Reset
7
8
I/O
Fus
Rôle
0V
tension prog.
(21V)
Sortie bits
Fusible protection
Quand la carte a épuisé sa valeur faciale, les 8 derniers bits sont grillés à 1
6) Protocole "français" :
2) Lecture des données
Le compteur d'adresse interne permet de faire défiler les adresses sur la mémoire, on le commande
par 2 broches : CLK, qui permet d'avancer d'un cran, et RST, qui le réinitialise.
On ne pourra lire qu'un bit à la fois, sur la broche I/O. Pour lire la carte, il faut commencer par la
réinitialiser, en envoyant un front montant sur CLK avec RST à '0' (voir tableau).
Après la réinitialisation, on peut lire le 1er bit sur la sortie, et à chaque front montant, on lira le
suivant. Il est impossible de faire décrémenter le compteur d'adresse.
63
64
95
96 1111
1111
11
instruction
0
1
Up
1
1
Program (0 -> 1)
Reset
31
32
zone
protégée
PORT C
ISO
7
7
I/O
6
3
CLK
5
4
4
RST
3
2
(FDC)
1
0
127
160
zone
des
191 unités
192
223
224
255
128
ISO 3
CLK
La carte sur laquelle est montée le support de télécarte sera connectée au Port C par une nappe 14
fils. Le brochage est le suivant :
bit France Telecom
code application
ISO 4
RST
0
7) Connexion de la télécarte au 68hc11
3) Organisation de la mémoire d'une télécarte française:
0
ISO 2
R/W
0
159
Le support de télécarte comprend un contact "Fin de course" (FDC), qui se ferme si la télécarte est
présente, générant un front descendant sur STRA. Ce signal est également ramené sur PC2. Le bit
ISO2 est mis à la masse (pas d'écriture).
Page 3/3