El acelerómetro BMA180 puede ser esclavo SPI o I 2 C slave. Los pines de ambos autobuses 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
Según la hoja de datos (ver capítulo 8) , la selección entre buses se realiza a través del pin CSB. Cuando CSB está bajo, el dispositivo es un esclavo SPI. Cuando CSB es alto, el dispositivo es un esclavo I 2 C
.Aquí hay un modo de error , que me preocupa. Supongamos que BMA180 está en el bus SPI. También hay otro dispositivo en el mismo bus con su propio chip select. Supongamos que el bus maestro SPI se está comunicando con ese otro dispositivo. CSB para BMA180 es alto, por lo que es I 2 C debería estar habilitado. BMA180 ve bordes de reloj en SCL (SCIK de SPI) y bits en SDA (MOSI de SPI) volando. ¿Qué sucede si algunos de estos bits se parecen a BMA180 como el inicio de una transacción de lectura I 2 C válida, y BMA180 comienza a generar datos y afecta la transacción SPI existente? ¿Cómo evitaría eso el diseño de BMA180?
Esto es una cuestión de curiosidad. Todavía no he experimentado con estos problemas. Usaré BMA180 en SPI.
¡Cualquier sugerencia, conocimiento o referencia es realmente apreciada!
Actualización. Encontré algo en el hoja de datos (ver 7.7.11) . Se recomienda desactivar I 2 C configurando el bit dis_i2c
, si se comunica con BMA180 a través de SPI.
Cuando se utiliza la interfaz SPI, se recomienda configurar dis_i2c en 1 para evitar el mal funcionamiento.
BMA180 tiene EEPROM incorporada. El contenido del registro se puede almacenar en la EEPROM y cargar automáticamente en la secuencia de encendido. Por lo tanto, es posible hacer que BMA180 ignore I 2 C completamente y siempre.
Actualizar. L3GD20 gyro es otra IC, que comparte pines entre I 2 C y SPI de una manera similar. Parece que no tiene un poco de configuración para deshabilitar el modo I 2 C. Por lo tanto, requeriría una puerta OR como ADXL345, que @markrages trajo.
¡A la cabeza! Bosch dejó de enviar BMA180 ( carta oficial aquí ).