Signaux I2C sur un FPGA

Posté le 06 avril 2020 dans Hardware

Attention : Ce qui suit n'est valable que pour un bus I2C alimenté en 3.3V.

Vous avez implémenté une IP I2C dans un FPGA mais la communication fonctionne mal.

Avez-vous pensé à spécifier le bon standard pour les signaux SCL et SDA ?

Le standard I2C spécifie les niveaux suivants :

  Min Max
Vil   0.3VDD
Vih 0.7VDD  
Avec VDD = 3.3V, cela donne
  • Vil max = 0.99V
  • ViH min = 2.31V

Pour diverses raisons, les signaux I2C sont souvent de mauvaise qualité. Le niveau bas, entre autres, est souvent assez éloigné du 0V. Il est donc important d'avoir un Vil le plus haut possible. Il peut également s'avérer utile d'avoir un Vih le plus bas possible.

Par défaut, les entrées/sorties d'un FPGA sont en mode LVCMOS33 (avec une alimentation de banque de 3.3V bien sûr). Dans ce mode, la documentation d'un Lattice MACHXO2 donne :

  Min Max
Vil   0.8V
Vih 2.0V  

Un Vil de 0.8V. C'est 20% de moins que le standard I2C.

Vih est trop faible. Comment faire pour l'améliorer ? La réponse est : Le mode PCI.

  Min Max
Vil   0.3Vccio
Vih 0.5Vccio  
Cela donne :
  • Vil = 0.99V
  • Vih = 1.65V

Nous avons un Vil parfait et un Vih mieux que le standard.

Conclusion : Utilisez le standart PCI pour les entrées/sorties SCL et SDA !



Attention toutefois à vérifier que la capacité en courant de sortie du mode PCI est en adéquation avec votre application.