Port Série

buguetj Messages postés 76 Date d'inscription lundi 25 octobre 2004 Statut Membre Dernière intervention 5 avril 2012 - 3 mars 2006 à 19:41
Hades122 Messages postés 4 Date d'inscription vendredi 17 mars 2006 Statut Membre Dernière intervention 26 mai 2008 - 26 mai 2008 à 17:21
Bonjour,
J'ai une puce électronique branchée sur le port Série (Com1)
Sur delphi, Grâce au composant TComPort (TApdComPort) j'ai réussi à ouvrir et à fermer le port série (Com1), maintenant j'aurais besoin d'un petit coup de pousse de votre part pour m'aider à lire le contenu de la puce dans un Memo.

Ma form s'apelle (Form1)
Mon Memo séapelle (Memo1)

Je voudrais un petit coup de main pour avoir une procédure pour réaliser ce projet.
Merci Beaucoup et A bientôt

14 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
3 mars 2006 à 20:43
salut,

quel est le protocole de communication de ta puce?

Sans cela je ne te serais d'aubune aide



@+

jlen
0
buguetj Messages postés 76 Date d'inscription lundi 25 octobre 2004 Statut Membre Dernière intervention 5 avril 2012
5 mars 2006 à 10:27
Salut,
Qu'est ce que tu entends par le protocole de communication de ma puce?
A+
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
5 mars 2006 à 14:51
étant donné que tu utilises un TComport il est alors évident que tu cherches à communiqué avec une carte à puce de type asyncrone(Style carte Bancaire, Carte SIM ect..), les cartes syncrones quant à eux on un protocole différent(telle que les télécartes).

Donc dans notre contexte le protocole est connu d'avance puisque à moins de me trompé c'est celui d'une carte à puce ISO7816, j'estime alors que tu dois avoir au moins un coupleur de carte à puce, genre Infinity USB où tout autre coupleur compatible phoenix.

seulement voilà il ne suffit pas de connecter une carte à puce à un coupleur, encore faut-il avoir une connaissance de base de la norme ISO7816-(3-4), en effet ces cartes sont régis par cette norme à savoir

Cla Ins P1 P2 Len (Data)

Cla = Classe c'est donc la classe qui est propre au distributeur de celle-ci
Ins = Instruction, cette instruction est propre au distributeur également..
P1 = 1er Paramètre spécifique
P2 = Second Paramètre spécifique
Len = Longueur des données qui suivent(voir Data)

Data = nBytes Data aussi est lié à Ins + P1 + P2 + Len, d'ailleurs

il existe aussi un protocole au sein même de celui-ci, sachant que le protocole T0 est le plus fréquemment utiliser.

il est à Noter également que la norme prévoit une parité des données, ce qui complique un peu les choses car non seulement il faut configuré le port avec la parité adequate mais également rajouter une petite routine pour l'envoi où la reception des données, ici on parle ISO-Convention(ISO 1177) et il en existe deux

- ISO-DIRECTE
- ISO-INVERSE

l'ISO-DIRECTE : bit de poids faible en premier suivi d'une logique à niveau haut, c'est le meilleur, port->parité-Even, pas de conversion à faire on parle avec la carte directement(suivant la structure de la norme 7816 biensur)

l'ISO-INVERSE : bit de poids fort en premier suivi d'une logique à niveau bas, un peu plus compliquer, port->parité-odd, et oui le dialogue s'effectue avec une parité impaire, ce qui implique un petit algo pour l'envoi des données et la reception.

Example

caractère binaire inverse binaire
0 0000 F 1111
1 0001 7 0111
A 1010 A 1010

et donc une classe A0 s'écrit FA(inverse puis swap)

il faut savoir que généralement avant l'envoi d'une commande il faut faire un reset et lire l'ATR(AnswerToReset)
en autre l'ATR contient des données spécifiques à la convention

TS TO TA1 TB1 TC1 TD1 TA2.. T1..TK TCK

TS c'est le caractère initial, c'est celui qui donne la convention

le reste concerne la fréquence de l'horloge, le vpp(c'est de moins en moins utiliser, généralement vpp=vcc soit 5v)

T1..TK on appel ça des caractères historiques, maximum 15 caractères, le contenu est généralement secret, seul le constructeur/distributeur est censé en connaître le sens, mais généralement on y met la version logiciel, le constructeur de la puce, ça dépend du bon vouloir du constructeur puisque une partie est parfois publique
TCK c'est le checksum, ce caractère est ignoré dans le protocole T0

si le sujet interresse je pourrais plus tard faire une petite appli pour lire le repertoire téléphonique d'une carte SIM, et ainsi mettre en oeuvre mes explications, en attendant voici un lien pour mieux comprendre la norme ISO7816
une notion anglaise est fortement recommader !!!
http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-3.aspx

Shining-Freeman.
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
5 mars 2006 à 15:02
je n'avias pas encore eu le temps de répondre mais bel exposé shinning

@+

jlen
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
buguetj Messages postés 76 Date d'inscription lundi 25 octobre 2004 Statut Membre Dernière intervention 5 avril 2012
5 mars 2006 à 20:25
Tu ne t'est pas trompé sur le protocol celi ci est bien ISO7816
J'ai un coupleur de carte à puce: un Coupleur branché sur Com1.
0
buguetj Messages postés 76 Date d'inscription lundi 25 octobre 2004 Statut Membre Dernière intervention 5 avril 2012
6 mars 2006 à 17:05
Salut, belle démonstration sur le protocole de communication d'une puce.
Mais concrètement mon coupleur est branché sur Com1 et le protocole de communication de ma puce est: ISO7816

Est-ce que c'est tout ce qu'il te faut pour m'aider
Merci de votre aide
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
7 mars 2006 à 14:51
Okay je suis en train de dev un composant qui gère pratiquement tout, tout seul où presque ;), il y aura donc le noyau principal "SmartCardManager", et des librairies telles que ceux de la conversion ISOInverse(optimisé en assembler), mais aussi(pour plus tard), des compo wrapper entre SmartCardMan & Gsm(par exemple activé où désactivé le code Pin, lire le repertoire téléphonique, SMS ...);

bon je ne promet pas de faire tous ça now, mais ça sera au fure et à mesure des updates.

ce projet sera OpenSource sous License GPL.

Shining Freeman.
0
buguetj Messages postés 76 Date d'inscription lundi 25 octobre 2004 Statut Membre Dernière intervention 5 avril 2012
7 mars 2006 à 18:16
Salut mais en attendant que tu crée ton composant aurais-tu une procédure à me communiquer permettant simplement de pouvoir lire le contenue de ma puce dans un Memo.
A+
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
8 mars 2006 à 01:05
fonction Reset Compatible Phoenix :
SetRTS(True);
SetRTS(False);
Sleep(220);// petite pause de 220 ms pour lecture complète de l'ATR

Après ceci un événement OnRxChar va se déclencher !!

dans OnRxChar un paramètre Count donne le nombre exacte d'octets transmis par la carte.

suffit alors de lire le contenu du buffer on faisant appel à une routine GetBuffer par exemple

function GetBuffer(Count : Integer):String;
var
Buffer : array[0..255] of byte;
I : Integer;
S : String;
begin
ComPort.Read(Buffer , Count);
S := '';
for i := 0 to Count -1 do
S := S + IntToHex(Buffer[i], 2) + ' ';
result := TrimRight(S);
end;

pour l'envoi c'est simple en respectant la structure ISO7816-(3 & 4)

var
Buffer : array[0..255];
B : Byte;
begin
Buffer[0] := Class
Buffer[1] := Ins
Buffer[2] := P1
Buffer[3] := P2
Buffer[4] := Len

CmdLen := 5;// car pas de Data
for i := 1 to CmdLen do
begin
B := Buffer[i];
ComPort.Write(B, 1);
ComPort.Read (B, 1); // on vide le cache du buffer pour éviter la redondance
Timer.DelayQT(50);// petite pause de 50 microseconde entre chaque instructions; ici un Timer avec une précision en microseconde on trouve ce compo sur Torry http://www.torry.net/vcl/datetime/timers/sanostimer.zip, mais on peut s'en passer !!
end;
Sleep(250); avant la lecture
maintenant OnRxChar va recevoir les Datas, idem on lit le buffer puis translation Byte->Str

Nota : IntToHex se trouve dans l'unité SysUtils donc à mettre dans la clause Uses.
end;


bon tiens nous au courant ...

Shining Freeman.
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
8 mars 2006 à 01:10
ah oui l'exemple cité ci-dessus n'est valable que pour la convention ISO-DIRECTE en ISO_INVERSE les données sont inversé faut rajouter une routine pour remettre ça dans l'ordre

pour la config du port en mode directe

Bauds : 9600;
Parity : even

et Parity Odd en mode inverse.

@+
0
buguetj Messages postés 76 Date d'inscription lundi 25 octobre 2004 Statut Membre Dernière intervention 5 avril 2012
8 mars 2006 à 15:04
Salut, désolé de ne pas avoir pu répondre avant.
Promis je vous tiens au courant.
A+
Merci
0
buguetj Messages postés 76 Date d'inscription lundi 25 octobre 2004 Statut Membre Dernière intervention 5 avril 2012
8 mars 2006 à 15:24
Salut,


j'ai un gros problème. Quand j'essai de constituer ma source avec les procédures que tu m'a communiqués,


j'ai une centaines d'erreurs!!.


Si tu avais le temps, ce serait vraiment sympa si tu pouvais me créer cette petite application sur delphi et
me l'envoyer sur mon adresse mail: jonat100@msn.com ou buguet.jon@voila.fr

En écahange je te la renvèrais une fois finie.
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
9 mars 2006 à 17:02
Okay un prog de test
http://shining-world.chez.tiscali.fr/download/SmartCardMan.exe

1 - Setup ->Com
2 - Open
3 - Reset

là il doit y avoir l'ATR qui va s'afficher dans le champ Atr

après tu peux envoyé des Commandes

le champ maskEdit c'est pour les commandes ISO7816
Cla Ins P1 P2 Len

dans le champ Data
tu mets tes données à savoir au format
xx xx où xxxx où avec autant d'espace que tu veux, car les espaces, saut de lignes et les caractères "-" sont effacer automatiquement.

ya aussi la gestion pour coupleur SmartMouse now :)
@+
0
Hades122 Messages postés 4 Date d'inscription vendredi 17 mars 2006 Statut Membre Dernière intervention 26 mai 2008
26 mai 2008 à 17:21
bonjour, je remonte un peu ce topic car j'aimerais moi aussi me lancer dans la communication PC - carte asynchrone, possédant déjà un coupleur USB (type Phoenix).
Aprés plusieurs recherches sur le net, je suis finalement tombé sur cette partie du site qui m'a apporté pas mal d'info, et m'a surtout rassuré sur la faisabilité d'une telle action (je me doutais que c'était réalisable en assembleur...mais comment dire...mmmh, l'assembleur et moi...on n'a jamais  été trés copain ^^; ).

Du coup, j'aimerais savoir s'il existe quelques tutos (Delphi ou autre, venant personnellement du secteur C++ à la base) permettant de se familiariser avec tout ça ?  Des conseils, des techniques, des exemples (je suis plein d'espoir :) )

ps : shining, ton site n'est plus en ligne :(, il le sera à nouveau bientôt ?
0
Rejoignez-nous