Les codes de conditions I2C et les codes Hexadécimaux sont envoyés tels quels sur le bus I2C. Les
codes suivants sont reconnus:
• {S} et {P} pour envoyer des conditions Start / Stop
• {R} pour envoyer une condition Restart
• xx pour lire un byte
• {A} et {N} pour confirmer une réception avec un ACK ou on NACK
Quand le format brut est utilisé, les bytes d'adresse doivent contenir le bit de lecture/écriture. Le
Yocto-I2C est capable de corriger automatiquement certaines incohérences dans les transition d'état
afin de pouvoir envoyer des trames I2C valides.
EXPECT
La commande expect attend que des données correspondant à un certain pattern apparaissent sur
la ligne I2C, elle prend en argument une chaîne de caractères. Certaines expressions régulières sont
supportées:
• . (point) correspond à n'importe quel caractère
• [] définit une union, par exemple [123a-z] correspond à n'importe quel caractère parmis 1...
3,a...z
• [^] définit une exclusion, par exemple [^,] correspond à n'importe quel caractère sauf la
virgule
• * permet de répéter la dernière correspondance zéro, une ou plusieurs fois: .* correspond à
tous les caractères jusqu'à la fin de la ligne
• + permet de répéter la dernière correspondance une ou plusieurs fois. Par exemple, [0-9]+
correspond à un chiffre ou plus
Des expressions spéciales permettent d'effectuer des décodages et d'affecter la valeur lue à l'un des
genericSensor du module ou à une variable qui pourra être réutilisée par suite.
• ($x:INT) permet de reconnaître une valeur entière (en base 10) qui sera affectée à la fonction
genericSensorX. Par exemple, {$3:INT} permet de reconnaître un nombre entier et l'affecter à
la fonction genericSensor3 alors que {$v:INT} permet de reconnaître un nombre entier et
l'affecter à la variable v.
• ($x:FLOAT) permet de reconnaître une valeur décimale (nombre à virgule), qui sera affectée
à la fonction genericSensorX. La notation scientifique (par ex. 1.25e-1) est reconnue.
• ($x:DDM) permet de reconnaître une valeur décimale en degrés-minutes-décimales telle
qu'utilisée dans le standard NMEA.
• ($x:BYTE) permet de reconnaître une valeur entière entre 0 et 255 codée en hexadécimal
(comme c'est le cas pour les protocoles en mode binaire). Si la valeur est dans la plage
-128...127, on utilisera ($x:SBYTE) à la place (signed byte). La valeur décodée sera affectée
à la fonction genericSensorX
• ($x:WORD) ou ($x:SWORD) permet de la même manière de décoder une valeur en
hexadécimal sur 16 bits, respectivement non signée ou signée, qui sera affectée à la fonction
genericSensorX. On suppose alors que les octets sont dans l'ordre d'écriture usuel, soit l'octet
de poids fort en premier (big-endian), comme par exemple 0104 pour représenter la valeur
260.
• ($x:WORDL) ou ($x:SWORDL) ont le même effet que les deux précédentes, mais supposent
que les octets sont d'en l'ordre little-endian, c'est-à-dire l'octet de poids faible en premier (par
exemple 0401 pour représenter la valeur 260).
• ($x:DWORD) ou ($x:SDWORD) permettent de la même manière de décoder un nombre sur
32 bit en big-endian (non-signé ou signé).
• ($x:DWORDL) ou ($x:SDWORDL) permettent de la même manière de décoder un nombre
sur 32 bit en little-endian (non-signé ou signé).
• ($x:DWORDX) ou ($x:SDWORDX) permettent de la même manière de décoder un nombre
sur 32 bit en mixed-endian, soit deux mots de 16 bits chacun représenté en big-endian, mais
le mot de poids faible en premier et celui de poids fort ensuite.
• ($x:HEX) permet de reconnaître une valeur en hexadécimal de longueur indéfinie (1 à 4
octets), qui sera affectée à la fonction genericSensorX.
www.yoctopuce.com
6. Mesures automatiques
31