Acelerômetro BMA180. Como ele consegue compartilhar pinos entre I2C e SPI?

11

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_i2cbit, 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 ).

Nick Alexeev
fonte

Respostas:

14

Vi exatamente o comportamento que você tem medo em um ADXL345, que usa o mesmo esquema de seleção I2C / SPI. Eu tinha outro dispositivo SPI que usava polaridade de relógio diferente e, por acaso, emulava um código de partida I2C, o ADXL345 tentou falar fora de hora como I2C. Más notícias.

Reescrevi cuidadosamente o SPI como bit bang em vez de usar o periférico, certificando-me de não alterar a linha MOSI enquanto o relógio estava alto. (Essa é a condição inicial do I2C.) Isso parecia resolver as coisas.

Se eu estivesse começando do zero, tentaria usar o barramento I2C ou uma porta SPI dedicada para o ADXL345.

Aparentemente, eu não sou o único a encontrar isso. Este parágrafo apareceu em uma revisão posterior da folha de dados ADXL345:

insira a descrição da imagem aqui

markrages
fonte
+1 e obrigado! Acabei de descobrir na ficha técnica que o BMA180 possui um bit de desativação I2C (consulte 7.7.11). É admissível que o BMA180 também tenha uma porta OR integrada, e isso não é mencionado explicitamente na folha de dados.
Nick Alexeev
1
O portão OR desativa efetivamente o modo I2C, para que não seja incorporado ao chip. (Se o designer de chips poderia poupar o pino extra, a situação pode ser totalmente evitado.)
markrages
Eu não deveria ter escrito "muito" no post anterior. Por "muito" significa "além do bit de desativação I2C". Eu também estava errado ao saber que, nesse esquema, o portão OR pode ser incorporado permanentemente no IC do acelerômetro. Isso desativaria o I2C para sempre. Vou reescrever esse comentário anterior.
Nick Alexeev
O BMA180 possui 3 pinos DNC / reservados. Pode ser, eles já são usados ​​para fins de fábrica.
Nick Alexeev
1
Notei que os acelerômetros digitais tendem a ser compatíveis com os pinos. Isso pode explicar os pinos não utilizados. Ou teste de fábrica como você disse.
markrages