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

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


+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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.