O acelerômetro BMA180 pode ser escravo SPI ou escravo I 2 C. Os pinos para os dois barramentos são compartilhados.
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 acordo com a folha de dados (consulte o capítulo 8) , a seleção entre os barramentos é feita através do pino CSB. Quando o CSB está baixo, o dispositivo é um escravo SPI. Quando o CSB está alto, o dispositivo é um escravo I 2 C.
Aqui está um modo de falha com o qual estou preocupado. Suponha que o BMA180 esteja no barramento SPI. Há também outro dispositivo no mesmo barramento com sua própria seleção de chips. Suponha que o mestre do barramento SPI esteja se comunicando com esse outro dispositivo. O CSB para BMA180 é alto, então é I 2 C deve ser ativado . O BMA180 vê as bordas do relógio no SCL (SCLK da SPI) e os bits no SDA (MOSI da SPI) voando. E se alguns desses bits parecerem ao BMA180 como o início de uma transação de leitura I 2 C válida , e o BMA180 começar a produzir dados e reprovar a transação SPI existente? Como o design do BMA180 impediria isso?
Isso é uma questão de curiosidade. Ainda não experimentei esses problemas. Eu vou usar o BMA180 no SPI.
Qualquer sugestão, insight ou referência é realmente apreciada!
Atualizar. Encontrei algo na folha de dados (consulte 7.7.11) . Ele recomenda desabilitar I 2 C configurando o dis_i2c
bit, se estiver se comunicando com o BMA180 via SPI.
Quando a interface SPI é usada, é altamente recomendável definir dis_i2c como 1 para evitar mau funcionamento.
O BMA180 possui EEPROM embutida. O conteúdo do registro pode ser armazenado na EEPROM e carregado automaticamente na sequência de inicialização. Assim, é possível fazer com que o BMA180 ignore I 2 C completamente e sempre.
Atualizar. O giroscópio L3GD20 é outro IC, que compartilha pinos entre I 2 C e SPI de maneira semelhante. Parece não ter um pouco de configuração para desativar o modo I 2 C. Portanto, seria necessário um portão OR como o ADXL345, que o @markrages trouxe.
Atenção! A Bosch parou de enviar o BMA180 ( carta oficial aqui ).