RASP-FT232H-MPSSE-Usage-I2C
FT232 en mode Bus I2C
Le protocole I2C est un autre protocole de communication populaire utilisé par de nombreux senseurs et périphériques. I2C est plus complexe et parfois plus lent que SPI mais il ne nécessite que deux lignes de données (et la masse), ce qui le rend désirable dans de nombreuses situations. Nous avons de la chance, le composant MPSSE du FT232H implémente également le protocole I2C , ce qui vous permet de dialoguer avec les périphériques I2C via un breakout FT232H.
Pour utiliser le bus I2C avec la bibliothèque Adafruit Python GPIO du FT232H, il sera nécessaire de placer notre circuit dans un état spécial. Plus particulièrement, vous aurez besoin de raccorder les broches D1 et D2 ensemble à l'aide d'un fil. Une des broches sera "lue" par le F232H (comme une entrée), et l'autre sera utilisée comme sortie. Lorsqu'elles sont raccordées ensemble, ces deux broches forme le canal SDA (ligne de donnée) du bus I2C.
La broche D0 (seule) deviendra le signal d'horloge SCL du bus I2C.
La deuxième chose qu'il sera nécessaire de faire avec le circuit, c'est d'ajouter des résistance pull-up de SDA et SCL du FT232H vers 3.3 ou 5 volts. Cela est nécessaire car le FT232H, conçu pour utilisation très générale, n'inclus pas ces résistances pull-up.
Nous recommandons l'utilisation de résistances de 4.7 kilo-ohms.
Pour résumer, vous devrez opérer à la configuration matérielle suivante:
- Connectez les broches D1 et D2 du FT232H ensemble (à l'aide d'un fil). Cette connexion représente la ligne SDA du bus I2C.
- Ajouter une résistance de 4.7 kilo-ohms entre la ligne SDA (ligne de donnée, les broches D1 et D2) vers le +5V du FT232H.
- Ajouter une résistance de 4.7 kilo-ohms entre la ligne SCL (ligne d'horloge, la broche D0) vers le +5V du FT232H.
Utilisation logicielle
Pour utiliser le bus I2C avec la bibliothèque Adafruit Python GPIO, il sera nécessaire de créer une instance de la classe Adafruit_FT232.I2CDevice. Cet objet prend en paramètre l'objet FT232H et l'adresse du périphérique I2C avec lequel le FT232H va communiquer.
Par exemple, le code suivant crée un périphérique I2C pour communiquer avec un périphérique I2C ayant l'adresse 0x70:
import Adafruit_GPIO.FT232H as FT232H
# Désactive temporairement le pilote FTDI série.
FT232H.use_FT232H()
# Trouver le premier périphérique FT232H.
ft232h = FT232H.FT232H()
# Créer un périphérique I2C (utilisant l'adresse 0x70).
i2c = FT232H.I2CDevice(ft232h, 0x70)
A ce point, l'instance de la classe I2CDevice est prête à lire et écrire des valeurs 8 et 16 bits depuis/dans les registres. L'interface de la classe I2CDevice permettant de lire et écrire des données est exactement la même que l'interface Python I2C code pour Raspberry Pi. Cela permet d'adapter très facilement le code I2C pour Raspberry-Pi vers le breakout FT232H.
Par exemple, pour lire la valeur d'un registre 16 bits et écrire une valeur dans un registre 8 bit, vous pourriez lire un code comme celui-ci:
# Lecture d'un valeur 16 bit non-signé (little endian) depuis le registre 0x01.
response = i2c.readU16(0x01)
# Ecrire une valeur 8 bits (0xAB) dans le registre 0x02.
i2c.write8(0x02, 0xAB)
C'est tout ce qui nous avons besoin de savoir pour utiliser le bus I2C du FT232H à l'aide de la bibliothèque Adafruit Python GPIO!
Vous pourriez également être intéressé dans le tutoriel qui montre comment utiliser le breakout FT232H breakout avec un périphérique I2C (une bibliothèque portée par Adafruit pour utiliser la bibliothèque Python GPIO).
Autre bibliothèque I2C
Il existe qu'il y a d'autres bibliothèques que vous pourriez utiliser pour communiquer en I2C via le FT232H. Vous pouvez utiliser libmpsse pour utiliser le protocole I2C depuis du code C ou Python. Voyez ce guide qui utilise un senseur de couleur pour plus d'informations sur l'utilisation de libmpsse et de périphérique I2C.
Une autre alternative est l'utilisation de la bibliothèque libMPSSE-I2C utilisant les pilotes FTDI D2XX. Voyez cette note applicative pour plus de détails sur l'utilisation de libMPSSE-I2C.
Enumeration des périphériques I2C
Vous pouvez exécuter le script suivant pour énumérer toutes les adresses du bus I2C et détecter la présence d'un périphérique (c'est un script similaire à la commande i2cdetect sous Linux). Toules les adresses sont donc énumérée (ignorant les quelques adresses réservée) et vérifie si un quelconque périphérique renvoi un ACK sur le bus (pour cette adresse).
import Adafruit_GPIO.FT232H as FT232H
# Désactive temporairement le pilote série FTDI.
FT232H.use_FT232H()
# Trouver le premier périphérique FT232H.
ft232h = FT232H.FT232H()
print 'Scanne toutes les adresses du bus I2C...'
# Enumere toutes les adresses I2C (sur 7 bits)
for address in range(127):
# Saute les adresses I2C réservées.
if address <= 7 or address >= 120:
continue
# Créer un objet I2C pour l'adresse souhaitée.
i2c = FT232H.I2CDevice(ft232h, address)
# Voir si le périphérique répond.
if i2c.ping():
print 'Trouvé un periphérique I2C a l adresse 0x{0:02X}'.format(address)
print 'Fin!'
Source: Adafruit FT232H Breakout Add a serial protocol 'swiss army knife' to your computer and talk directly to devices with SPI, I2C, serial UART, GPIO's, and more!
Créé par Toni DiCola pour AdaFruit Industries.
Traduction réalisée par Meurisse D pour MCHobby.be.
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.
Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com