Accéléromètre BMA180. Comment parvient-il à partager les broches entre I2C et SPI?

11

L'accéléromètre BMA180 peut être esclave SPI ou esclave I 2 C. Les broches des deux bus sont partagées.

SPI mode                    I2C mode
---------------------------------------------------
SDI  input                  SDA  bidirectional (!)
SDO  output                 ADDR address bit, input
SCLK input                  SCL  input
CSB  chip select, input     I2C  mode select, input

Selon la fiche technique (voir chapitre 8) , la sélection entre les bus se fait via la broche CSB. Lorsque CSB est faible, l'appareil est un esclave SPI. Lorsque CSB est élevé, l'appareil est un esclave I 2 C.

Voici un mode d'échec qui m'inquiète. Supposons que le BMA180 se trouve sur le bus SPI. Il y a aussi un autre appareil sur le même bus avec sa propre sélection de puce. Supposons que le maître du bus SPI communique avec cet autre périphérique. CSB pour BMA180 est élevé, c'est donc I 2 C qui devrait être activé. Le BMA180 voit les fronts d'horloge sur SCL (SCLK de SPI) et les bits sur SDA (MOSI de SPI) passer. Que se passe-t-il si certains de ces bits ressemblent à BMA180 comme le début d'une transaction de lecture I 2 C valide et si BMA180 commence à sortir des données et à assimiler la transaction SPI existante? Comment la conception du BMA180 empêcherait-elle cela?

C'est une question de curiosité. Je n'ai pas encore expérimenté ces problèmes. J'utiliserai BMA180 sur SPI.

Toute suggestion, idée ou référence est vraiment appréciée!

Mise à jour. J'ai trouvé quelque chose dans la fiche technique (voir 7.7.11) . Il recommande de désactiver I 2 C en réglant le dis_i2cbit, si vous communiquez avec BMA180 via SPI.

Lorsque l'interface SPI est utilisée, il est fortement recommandé de définir dis_i2c sur 1 pour éviter tout dysfonctionnement.

Le BMA180 possède une EEPROM intégrée. Le contenu du registre peut être stocké dans l'EEPROM et automatiquement chargé lors de la mise sous tension. Il est donc possible de faire ignorer complètement et toujours I 2 C au BMA180 .

Mise à jour. Le gyroscope L3GD20 est un autre CI, qui partage les broches entre I 2 C et SPI de manière similaire. Il ne semble pas avoir un peu de réglage pour désactiver le mode I 2 C. Donc, cela nécessiterait une porte OU comme ADXL345, que @markrages a évoquée.

La tête haute! Bosch a cessé d'expédier le BMA180 ( lettre officielle ici ).

Nick Alexeev
la source

Réponses:

14

J'ai vu exactement le comportement dont vous avez peur sur un ADXL345, qui utilise le même schéma de sélection I2C / SPI. J'avais un autre appareil SPI qui utilisait une polarité d'horloge différente et il s'est avéré qu'il émulait un code de démarrage I2C, l'ADXL345 a essayé de parler hors de tour comme I2C. Mauvaises nouvelles.

J'ai soigneusement réécrit le SPI en bit bang au lieu d'utiliser le périphérique, en veillant à ne pas changer la ligne MOSI pendant que l'horloge était haute. (Il s'agit de la condition de démarrage I2C.) Cela semblait résoudre les choses.

Si je partais de zéro, j'essaierais d'utiliser le bus I2C à la place ou un port SPI dédié pour l'ADXL345.

Apparemment, je ne serais pas le seul à rencontrer ça. Ce paragraphe est apparu dans une révision ultérieure de la fiche technique ADXL345:

entrez la description de l'image ici

markrages
la source
+1 et merci! Je viens de découvrir dans la fiche technique que le BMA180 possède un bit de désactivation I2C (voir 7.7.11). Il est possible que le BMA180 ait également une porte OU intégrée, et ce n'est tout simplement pas mentionné explicitement dans la fiche technique.
Nick Alexeev
1
La porte OU désactive efficacement le mode I2C, il n'est donc pas intégré à la puce. (Si le concepteur de puces pouvait épargner la broche supplémentaire, la situation pourrait être entièrement évitée.)
markrages
Je n'aurais pas dû écrire "trop" dans le post précédent. Par «trop» signifiait «en plus du bit de désactivation I2C». J'avais aussi tort que dans ce schéma, la porte OU puisse être intégrée de façon permanente dans l'accéléromètre IC. Cela désactiverait définitivement l'I2C. Je vais réécrire ce commentaire précédent.
Nick Alexeev
Le BMA180 a 3 broches DNC / réservées. Peut-être, ils sont déjà utilisés à des fins d'usine.
Nick Alexeev
1
J'ai remarqué que les accéléromètres numériques ont tendance à être compatibles entre eux. Cela pourrait expliquer les broches inutilisées. Ou test en usine comme vous l'avez dit.
markrages