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