Visiteurs :

 
 
.: http://kudelsko.free.fr :.
 

 

Google
 
Navigation :

 Page d'accueil


Programmateurs :
 Prog PIC / EEPROM Centronic
 Prog PIC / EEPROM RS232
 Prog PIC / EEPROM USB V2
 Prog 68HC11F1

Instruments de mesure :
 Oscilloscope pour PC  
 Testeur de composants  
 Inductancemètre USB 
 Isolateur optique oscilloscope
 Capacimètre USB 
 Analyseur logique 30MHz
 Loupe vidéo 
 Générateur de fonctions DDS
 Volt / Amp. Mètre LCD USB
 Oscillateur 1kHz - 68MHz  

Projets Divers :
 Horloge / Calendrier
 
Serrure à iButton
      
Présentation
       Fonctionnement
       Réalisation
       Programmation
       Utilisation
       Datasheets
 Serrure à transpondeurs
 Décodage trame UM3750

 
Commutateur IR dual
 Gradateur IR dual
 Récepteur IR/PC 16 canaux 
 Déport IR à courant porteur  
 Décodeur 2 ou 4 canaux HF 
 Récepteur HF pour K6706B  
 Disjoncteur différentiel  

Interfaces Réseau WIFI :
 Module ESP8266

Domotique :
 Présentation des dispositifs
 Interface PC domotique
 Contrôleur Telis 4 Dual
 Contrôleur Velux Trio
 Emetteur HF - RS232
 Récepteur HF
 Contrôleur Ethernet

Ensemble domotique :
 Présentation des dispositifs
 Power Switch IR - 3 canaux
 CPL émetteur
 CPL récepteur
 Power Clock USB 

Interfaces Réseau Ethernet :
 ENC28J60, Config. et Delphi  Interface Ethernet 8 in 8 out
 Interface Ethernet 16 sorties
 Interface Ethernet LCD
 Interface Eth. n°1 multi IN-OUT
 Interface Eth. n°2 multi IN-OUT
 Interface Eth. LCD Graphique

Interfaces USB :
 Interface USB à 16 sorties
 Interface LCD USB
 Récepteur IR USB
 Interface Therm/Hygro USB
 Interface universelle USB
 Interface USB 16 out, 8 in
 Interface LCD graphique USB
 Timer USB programmable 

Interfaces RS232 :
 LCD - RS232
 CAN 12 bits - RS232 et //
 Clavier RS232 et //
 LCD 4 x 40 - RS232
 OSD - RS232
 Interface universelle RS232
 Afficheurs 7 seg. RS232
 Interface LCD graphique
 Interface OSD - RS232 V2

Applications Vidéo :
 Stabilisateur de recopie vidéo
 Générateur de mires
 Transcodeur PAL-RVB / SECAM
 Distributeur audio-vidéo 1-3  
 Commutateur Péritels 4 / 2  
 PiP Box  

Applications Audio :
 Commutateur audio 4 voies

Téléphonie :
 Sélecteur lignes téléphoniques
 Sélecteur lignes téléphoniq. V2
 Sélecteur lignes téléph. V3  

Mesures dans l'environnement :
 - température;
 - pression;
 - humidité relative;
 - orientation...
 Thermo-PC Dual
 Thermomètre
 Baromètre
 Météo OSD
 Thermomètre pour PC
 Boussole électronique 

Chargeurs/déchargeurs accus :
 Chargeur Accus R6 - 6F22

Logiciels :
 Atténuateurs HF
 Réseau d'adaptation résistif

Articles de la presse :
 Mipot HF
 Transformateur
 Radiateur
 Mosfet
 Alimentation
 AOP
 AOP2
 Applications des régulateurs
 Convertisseurs de tension
 Convertisseurs DC -DC
 Les filtres électroniques
 Le NE555
 Le triac
 Le réglage offset des AOP
 Les régulateurs
 
Les multiplieurs

L'indispensable :
 Code couleur résistances
 Valeurs normalisées résistances
 Code couleur condensateurs

Publicité :

 

 

Fonctionnement de la serrure iButton


 
Schéma fonctionnel de deuxième degré de la serrure électronique :

 

 

  Protocole d'échange de données avec le iButton :

         Etablissement des rôles entre le microcontrôleur et le iButton :

  La lecture des informations contenues dans la clé est effectuée par contact momentané du iButton avec le dispositif de lecture. La transmission des données dans un sens ou dans l'autre se fait bit par bit en commençant par le bit de poids faible (LSB), jusqu'à que le message de 64 bits soit complètement envoyé.
  Remplissant la fonction de
maître, le microcontrôleur est chargé d'orchestrer le dialogue avec le iButton, ce dernier faisant office d'esclave. Le maître assure une synchronisation des bits par l'application d'une transition de flancs haut / bas sur la ligne de données selon un protocole très précis. En fonction du sens de transfert des données, ce sera soit au maître, soit à l'esclave d'échantillonner la ligne 1 wire pour en récolter les informations nécessaires, comme nous allons le voir ci-après...
 

         Remise à zéro (RESET) du iButton :

  Lorsque l'on connecte le iButton, le montage alimente celui-ci. Le maître abaisse le niveau logique de la ligne 1 wire durant 720µs toutes les 1 ms en moyenne afin d'initialiser un éventuel iButton présent sur la ligne (Master Reset Pulse) . Pour informer au maître sa présence, le iButton force la ligne 1 wire à un niveau logique bas entre 60µs et 240µs, une soixantaine de microsecondes après le niveau logique bas du maître.

                 Signal officiel du RESET (document Dallas) :


 

                 Signal simplifié du RESET :

 

                 Oscillogramme réel du RESET :

En jaune : la durée du Master Reset Pulse de 720us

En vert : initialisation interne du composant iButton de l'ordre de 120us

 

    Une fois cette phase terminée, le niveau logique bas forcé par le iButton est relâché au profit de la résistance de pull-up R11 comme ci-dessous :

 

         Transmission au iButton du code d'autorisation de lecture :

    Après le démarrage du processus par un flanc descendant, la transmission des bits en direction du composant iButton dans le cadre de créneaux d'écriture (durée comprise entre 60 et 120us) peut avoir lieu. Cette écriture doit correspondre au code d'autorisation de lecture (code ROM) permettant par la suite le rapatriement vers le maître des 64 bits du composant iButton.
    Ce code d'autorisation de lecture vaut :
$33 = %00110011.

     Pour effectuer cette écriture, le maître transmet par une suite de niveaux haut et bas judicieusement calibrés, le code d'autorisation de lecture $33 en commençant par son LSB.
    A cet instant, le iButton
échantillonne la ligne de données de 15µs à 60µs après le début du flanc descendant de la synchronisation.  S'il détecte dans la fenêtre d'échantillonnage un niveau haut, le iButton l'interprète comme un "1", s'il découvre un niveau bas, il le considère comme un "0".
  Il convient en raison de cette tolérance entre
15µs et 60µs de veiller à ce que la ligne reste parfaitement stable pendant le dit intervalle.

 

                 Signal officiel d'écriture d'un "1" du maître (document Dallas) :

 

                 Signal simplifié d'écriture d'un "1" du maître :

     Pour effectuer l'écriture d'un "1", le niveau logique de la ligne "1 wire" doit retourner au niveau haut 15µs au maximum après le front descendant engendré par le maître.

 

                 Signal officiel d'écriture d'un "0" du maître (document Dallas) :

 

                 Signal simplifié d'écriture d'un "0" du maître :

     Pour effectuer l'écriture d'un "0", le niveau logique de la ligne "1 wire" doit rester au niveau bas durant 60µs au minimum après le front descendant engendré par le maître.

 

                 Oscillogramme réel d'écriture du code d'autorisation de lecture $33 = %00110011:

 

         Lecture des 64 bits d'identification du iButton :

     Le composant "1 wire" requiert après écriture du code $33, un temps de récupération d'au minimum 1µs avant que la transmission ne puisse se poursuivre. Pour des raisons purement logicielle, le temps de récupération choisi dans la présente réalisation est de l'ordre de 200µs.     Cette surévaluation du temps de récupération ne pose aucun problème car l'esclave (le iButton) doit toujours se plier dans une certaine limite, aux exigences logicielles du maître (le microcontrôleur).

     Le maître opère de façon similaire pour la phase de lecture des 64 bits en provenance du composant iButton. Le maître lance une synchronisation (front descendant) et doit maintenir cet état entre 1µs et 15µs maximum !!!  Le iButton "émet" ensuite le bit (0 ou 1) de la zone adressée dans l'espace de la fenêtre d'échantillonnage du maître.

     Deux cas se profilent :
          Si il s'agit d'un bit "
1" le composant iButton n'a rien à faire vu que la ligne de données se trouve forcée au niveau haut pas une résistance de pull-up.
          Si il s'agit d'un bit "
0" le composant iButton force la ligne de données au niveau bas pendant 15µs au maximum. Le maître doit avoir échantillonné la ligne au cours de cet intervalle, sinon le bit sera définitivement perdu...  Le iButton met entre 0 et 45µs pour libérer la ligne de données.
 

     La transmission de la totalité des bits s'effectue à la queue leu leu en commençant comme toujours par le LSB pour finir par le MSB des 64 bits d'identification.

 

          Signal officiel de lecture d'un "1" ou "0" synchronisé par le maître (document Dallas) :

 

          Signal simplifié de lecture d'un "1" synchronisé par le maître :

 

          Signal simplifié de lecture d'un "0" synchronisé par le maître :

 

          Oscillogramme réel des 27 premiers bits "0" et "1" de ma clé :

 

     Dans l'oscillogramme précédent, nous pouvons vérifier les trois premiers octets de la trame 64 bits de ma clé iButton, à savoir :

Octets iButton

Octet 2

Octet 1

Code Family (CF)

Binaire

%00111000

%11110000

%00000001

Hexadécimal

$38

$F0

$01

Décimal

56

240

1


    Je vous rappelle que
ma clé iButton possède le code hexadécimal 64 bits suivant :

$79 $00 $00 $04 $0C $38 $F0 $01

 

      Etablissement du CRC permettant le contrôle d'intégrité des 64 bits :

     Toute la transmission de données fait l'objet d'un contrôle d'intégrité par CRC (Cyclic Redondance Check) envoyé en fin de trame (MSB).
      Pour ce faire, le constructeur Dallas a développé un procédé permettant de recalculer le
CRC en utilisant un algorithme basé sur un polynôme 8 bits tel que :

      Ainsi, si la valeur calculée du CRC à partir du polynôme 8 bits est identique à la valeur du CRC lue dans la clé, on considère la trame transmise correcte. Inversement, si il y a inégalité entre les deux CRC, on considère la trame transmise erronée.

     Dans le chapitre qui va suivre, nous allons nous intéresser à l'aspect pratique du code CRC sans nous soucier de la démonstration fastidieuse de la précédente relation. Si vous souhaitez en savoir plus, consulter les [ Datasheets ] fournies avec cette réalisation.
 

         Table résultante du polynôme 8 bits :

     Dallas démontre que la résultante du polynôme 8 bits peut s'écrire sous la forme de 256 valeurs rassemblées dans une table comme ci-dessous :

N

Valeurs du polynôme = code courant CRC

0

0

94

188

226

97

63

221

131

194

156

126

32

163

253

31

65

16

157

195

33

127

252

162

64

30

95

1

227

189

62

96

130

220

32

35

125

159

193

66

28

254

160

225

191

93

3

128

222

60

98

48

190

224

2

92

223

129

99

61

124

34

192

158

29

67

161

255

64

70

24

250

164

39

121

155

197

132

218

56

102

229

187

89

7

80

219

133

103

57

186

228

6

88

25

71

165

251

120

38

196

154

96

101

59

217

135

4

90

184

230

167

249

27

69

198

152

122

36

114

248

166

68

26

153

199

37

123

58

100

134

216

91

5

231

185

128

140

210

48

110

237

179

81

15

78

16

242

172

47

113

147

205

144

17

79

173

243

112

46

204

146

211

141

111

49

178

236

14

80

160

175

241

19

77

206

144

114

44

109

51

209

143

12

82

176

238

176

50

108

142

208

83

13

239

177

240

174

76

18

145

207

45

115

192

202

148

118

40

171

245

23

73

8

86

180

234

105

55

213

139

208

87

9

235

181

54

104

138

212

149

203

41

119

244

170

72

22

224

233

183

85

11

136

214

52

106

43

117

151

201

74

20

246

168

240

116

42

200

150

21

75

169

247

182

232

10

84

215

137

107

53

     Avec N représentant l'index du code courant caractérisé par la première case de la ligne considérée. Exemple : Index 0 = 0, Index 97 = 59, Index 210 = 235, etc...

     A partir de cette table, nous allons calculer l'octet CRC en utilisant seulement les 7 octets lus dans la clé, c'est à dire pour le cas présent :

$00 $00 $04 $0C $38 $F0 $01 => 7 octets

     et en appliquant la relation tel que :

CRC = Table [ Index du code courant CRC XOR octet lu dans la clé ]

     Note : XOR = fonction OU exclusif.

 

         Exemple de calcul du code CRC à partir des 7 octets de ma clé Dallas : 

    Octets lus dans ma clé iButton :

$00 $00 $04 $0C $38 $F0 $01 => 7 octets

     et sa valeur CRC lue : $79 mais qui reste à contrôler !!!
 

Valeurs courantes du CRC

Octets lus dans la clé

Valeurs de l'index du code courant

Valeurs contenues dans la table

On commence toujours par $00

CF = $01

$00 XOR $01=$01
1 en décimal

Table [1] = 94
$5E en hexa

$5E

$F0

$5E XOR $F0 = $AE
174 en décimal

Table [174] = 176
$B0 en hexa

$B0

$38

$B0 XOR $38 = $88
136 en décimal

Table [136] = 78
$4E en hexa

$4E

$0C

$4E XOR $0C = $42
66 en décimal

Table [66] = 250
$FA en hexa

$FA

$04

$FA XOR $04 = $FE
254 en décimal

Table [254] = 107
$6B en hexa

$6B

$00

$6B XOR $00 = $6B
107 en décimal

Table [107] = 69
$45 en hexa

$45

$00

$45 XOR $00 = $45
69 en décimal

Table [69] = 121
$79 en hexa

$79

CRC = $79

$79 XOR $79 = $00
0 en décimal

Table [0] = 0
$00
en hexa

     Vous pouvez constater que nous avons l'octet CRC calculé égal à l'octet CRC lu dans la clé.      
      Ainsi nous sommes certains de
l'exactitude de la trame lue par le microcontrôleur.

     Si
l'octet CRC calculé était différent de l'octet CRC lu dans la clé, nous aurions considéré cette trame érronnée.  Simple et efficace !
 

 


 


 

 

 


 


 


 



Copyright © 2000 - 2016. F.KUDELSKO. Tous droits réservés.
Reproduction interdite sans autorisation.