Yoctopuce Yocto-I2C Mode D'emploi page 33

Table des Matières

Publicité

fonction i2cSendAndReceiveBin gère aussi l'enchaînement des deux actions écriture / lecture
nécessaires à l'accès en lecture d'une interface I2C. La fonction i2cSendAndReceiveBin gère aussi
automatiquement les conditions START, STOP, ACK etc.. Si une erreur de transmission est
détectée, une exception sera lancée.
Les fonctions i2cSendBin et i2cSendAndReceiveBin offrent une abstraction confortable des
protocoles I2C, cependant, si vous souhaitez travailler plus près du protocole, c'est possible grâce
au fonctions writeLine et queryLine
writeLine
La fonction writeLine permet d'envoyer une ou plusieurs trames I2C en une fois, en spécifiant
explicitement toutes les conditions sur le bus I2C et en gérant manuellement le bit de lecture/
écriture. Le paramètre de writeLine est une simple chaîne de caractères qui représente la trame I2C.
La syntaxe est la suivante:
• {S} : start condition
• {R} : repeated start condition
• {P} : stop condition
• {A} : ACK
• {N} : NACK
• xx : Lecture d'un byte
• FF (byte en hexadecimal): Ecriture d'un byte
Ainsi l'exemple du HT16K33 montré plus haut devient:
i2cPort.writeLine("{S}E021{P}"
+
+
+
+
+ "{S}E081{P}");
Notez que l'adresse 0x70 a été décalée vers la gauche (=0xE0) pour laisser la place au bit de lecture
qui est mis à zéro puisque qu'il s'agit d'une requête en écriture. C'est pourquoi le premier byte de
chaque transmission vaut 0xE0.
queryLine
La fonction queryLine permet d'envoyer une ou plusieurs trames I2C explicites, et d'analyser
manuellement la réponse pour vérifier si tout s'est bien passé. Comme pour la fonction writeLine,
vous devrez gérer vous-même le bit lecture / écriture et toutes les conditions à mettre sur le bus. La
réponse contient toutes les données envoyées par l'interface distante, y compris les ACK et les
NACK. Elle prend en paramètre une chaîne de caractères au même format que writeLine et un entier
qui indique le temps maximum qu'elle peut attendre pour recevoir une réponse. Si une erreur de
transmission survient, la réponse se terminera par un code d'erreur suivit d'un point d'exclamation.
Les codes d'erreur possibles sont:
• {C} : collision (deux transmissions se chevauchent, ou oubli du NACK à la fin de la lecture
précédente)
• {N} : NACK (pas de réponse, interface pas connectée, adresse I2C incorrecte...)
Ainsi l'exemple pour lire la température du capteur SHT25 devient:
string
response
= i2cPort.queryLine("{S}80E3{P}{S}81xx{A}xx{N}{P}",100);
if
((response
!= "") &&
(response.Substring(response.Length
{
string
strval
int
value =
int.Parse(strval,
double
t
=
-46.85
Console.WriteLine("Ambiant temperature: "
} else {
www.yoctopuce.com
"{S}E0A0{P}"
"{S}E0EF{P}"
"{S}E081{P}"
"{S}E0003c814242812481188118812442423c81{P}"
=
response.Substring(response.Length
System.Globalization.
NumberStyles.HexNumber);
+
175.72
* (double)value / 65536.0;
String.Format("{0:0.00}",
- 1) != "!"))
- 4);
+
t));
5. Le port I2C
25

Publicité

Table des Matières
loading

Table des Matières