12 votos

BMA180 acelerómetro. ¿Cómo se las arreglan para compartir entre los pines I2C y SPI?

BMA180 acelerómetro puede ser SPI esclavo o I2C esclavo. Los pines de ambos buses son compartidos.

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

De acuerdo a la hoja de datos (ver capítulo 8), la selección entre los autobuses se realiza a través de la CSB pin. Cuando CSB es baja, el dispositivo es un SPI esclavo. Cuando CSB es alta, el dispositivo es un I2C esclavo.

He aquí un modo de fallo, lo que me preocupa. Supongamos, BMA180 es en el bus SPI. También hay otro dispositivo en el mismo bus con su propio chip select. Supongamos, bus SPI maestro se comunica con otro dispositivo. CSB para BMA180 es alta, por lo que es I2C debe ser activa. BMA180 ve reloj bordes en SCL (SPI SCLK) y bits en SDA (SPI MOSI) volando. Qué pasa si algunos de estos bits vistazo a BMA180 como un comienzo de una tarjeta de I2C transacción de lectura, y BMA180 se inicia la salida de datos y clobbers la existente SPI transacción? Cómo sería el diseño de BMA180 evitar eso?

Esta es una cuestión de curiosidad. No he experimentado con estos problemas aún. Voy a estar usando BMA180 en el SPI.

Cualquier sugerencia, idea o referencia es muy apreciada!

La actualización. Encontró algo en la hoja de datos (ver 7.7.11). Se recomienda desactivar el I2C mediante el establecimiento de la dis_i2c bits, si se está comunicando con BMA180 a través de SPI.

Cuando SPI se utiliza la interfaz, es muy recomendable establecer dis_i2c a 1 para evitar problemas de funcionamiento.

BMA180 se ha incorporado en la memoria EEPROM. Registrar el contenido que puede ser almacenado en la EEPROM y se carga automáticamente en la secuencia de encendido. Así, es posible hacer BMA180 ignorar I2C completamente y para siempre.

La actualización. L3GD20 gyro es otro de los IC, que comparte pines entre I2C y SPI en una manera similar. No parece tener un poco de configuración para deshabilitar el I2C modo. Así, se requeriría de una puerta or como ADXL345 que @markrages.

Heads up! Bosch se detuvo el envío BMA180 (carta oficial aquí).

14voto

AnonJr Puntos 111

He visto exactamente el comportamiento que tienes miedo de que en un ADXL345, que utiliza el mismo I2C/SPI esquema de selección. Yo tenía otro SPI dispositivo que utiliza diferentes del reloj de la polaridad y pasó a emular un I2C código de inicio, el ADXL345 trató de hablar fuera de turno, como I2C. Las malas noticias.

Con mucho cuidado se reescribió el SPI como bit bang en lugar de utilizar el periférico, asegurándose de no cambiar la línea MOSI mientras el reloj se fue alto. (Este es el I2C condición de inicio.) Que parecía resolver las cosas.

Si yo estaba empezando desde cero, me gustaría probar a usar el bus I2C de lugar o un dedicado puerto SPI para el ADXL345.

Al parecer, yo wan no el único para el encuentro con esto. Este párrafo aparece en una revisión posterior de la ADXL345 de hoja de datos:

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X