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.