El acelerómetro BMA180 puede ser SPI esclavo o I 2 C esclavo. Los pines para 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
De acuerdo con la hoja de datos (ver capítulo 8) , la selección entre buses se realiza a través del pin CSB. Cuando CSB es bajo, el dispositivo es un esclavo SPI. Cuando CSB es alto, el dispositivo es un esclavo I 2 C.
Aquí hay un modo de falla , que me preocupa. Supongamos que BMA180 está en el bus SPI. También hay otro dispositivo en el mismo bus con su propia selección de chip. Supongamos que el maestro de bus SPI se está comunicando con ese otro dispositivo. CSB para BMA180 es alto, por lo que es I 2 C debería habilitarse. BMA180 ve bordes de reloj en SCL (SCLK 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 activa la transacción SPI existente? ¿Cómo evitaría eso el diseño de BMA180?
Esto es cuestión de curiosidad. Todavía no he experimentado con estos problemas. Usaré BMA180 en SPI.
¡Cualquier sugerencia, visión o referencia es realmente apreciada!
Actualizar. Encontré algo en la hoja de datos (ver 7.7.11) . Recomienda deshabilitar I 2 C configurando el dis_i2c
bit, 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 un mal funcionamiento.
BMA180 tiene EEPROM incorporada. El contenido del registro puede almacenarse en la EEPROM y cargarse automáticamente en la secuencia de encendido. Por lo tanto, es posible hacer que BMA180 ignore I 2 C por completo y siempre.
Actualizar. El giroscopio L3GD20 es otro IC, que comparte pines entre I 2 C y SPI de manera similar. No parece tener una configuración de bits para deshabilitar el modo I 2 C. Por lo tanto, requeriría una puerta OR como ADXL345, que trajo @markrages.
¡Aviso! Bosch dejó de enviar BMA180 ( carta oficial aquí ).