BMA180 ivmeölçer. I2C ve SPI arasında pin paylaşmayı nasıl başarır?


11

BMA180 ivmeölçer SPI bağımlı veya I 2 C bağımlı olabilir. Her iki otobüs için pinler paylaşılır.

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

Veri sayfasına göre (bkz. Bölüm 8) , otobüsler arasındaki seçim CSB pimi üzerinden yapılır. CSB düşük olduğunda, cihaz bir SPI bağımlı birimidir. CSB yüksek olduğunda, cihaz bir I 2 C bağımlı birimidir.

İşte endişe duyduğum bir hata modu . Diyelim ki BMA180 SPI veriyolunda. Aynı veriyolunda kendi çip seçimi ile başka bir cihaz da var. Diyelim ki, SPI veri yolu ustası diğer cihazla iletişim kuruyor. BMA180 için CSB yüksektir, bu yüzden I 2 C etkinleştirilmelidir. BMA180, SCL'de (SPI'nin SCLK) saat kenarlarını ve uçarken SDA'da (SPI'nin MOSI) bitlerini görür. Bu bitlerden bazıları BMA180'e geçerli bir I 2 C okuma işleminin başlangıcı gibi görünüyorsa ve BMA180, veriyi çıkarmaya başlar ve mevcut SPI işlemini engeller? BMA180'in tasarımı bunu nasıl önler?

Bu bir merak meselesi. Bu sorunları henüz denemedim. SPI'da BMA180 kullanacağım.

Herhangi bir öneri, içgörü veya referans gerçekten takdir!

Güncelleme. Veri sayfasında bir şey buldunuz (bakınız 7.7.11) . SPI üzerinden BMA180 ile iletişim kurarsa , biti ayarlayarak I 2 C'nin devre dışı bırakılmasını önerir dis_i2c.

SPI arayüzü kullanıldığında, arızayı önlemek için dis_i2c değerini 1 olarak ayarlamanız önemle tavsiye edilir.

BMA180'de yerleşik EEPROM vardır. Kayıt içeriği EEPROM'da saklanabilir ve açılış sırasında otomatik olarak yüklenebilir. BMA180'in I 2 C'yi tamamen ve her zaman görmezden gelmesini sağlamak mümkündür .

Güncelleme. L3GD20 cayro bir IC, I arasında hisse pimleri olan 2 aa benzer bir şekilde C ve SPI. I 2 C modunu devre dışı bırakmak için biraz ayar yok gibi görünüyor . Bu nedenle, @markrages'ın getirdiği ADXL345 gibi bir OR geçidi gerektirir.

Dikkat et! Bosch, BMA180'i göndermeyi durdurdu ( resmi mektup burada ).

Yanıtlar:


14

Aynı I2C / SPI seçim şemasını kullanan bir ADXL345'te korktuğunuz davranışı tam olarak gördüm. Farklı saat polaritesi kullanan başka bir SPI cihazım vardı ve bir I2C başlangıç ​​kodunu taklit etti, ADXL345 sırayla I2C olarak konuşmaya çalıştı. Kötü haber.

Periferik kullanmak yerine SPI'yı bit patlaması olarak dikkatlice yeniden yazdım, saat yüksekken MOSI satırını değiştirmediğinizden emin oldum. (Bu I2C başlangıç ​​koşulu.) Bir şeyleri çözmüş gibiydi.

Sıfırdan başlamış olsaydım, bunun yerine I2C veri yolunu veya ADXL345 için özel bir SPI bağlantı noktasını kullanmayı denerdim.

Görünüşe göre ben bununla karşılaşacak tek kişi ben değilim. Bu paragraf, ADXL345 veri sayfasının sonraki bir düzeltmesinde yer almıştır:

resim açıklamasını buraya girin


+1 ve teşekkürler! Veri sayfasında BMA180'in I2C devre dışı bırakma bitine sahip olduğu bulunmuştur (bkz. 7.7.11). BMA180'in yerleşik bir OR geçidine sahip olması da düşünülebilir ve veri sayfasında açıkça belirtilmez.
Nick Alexeev

1
OR geçidi etkin bir şekilde I2C modunu devre dışı bırakır, bu nedenle çipin içine yerleştirilmez. (Çip tasarımcısı ekstra pimi
yedekleyebiliyorsa

Önceki yazıda "çok" yazmamalıydım. "Çok" ile kastedilen "I2C devre dışı bitine ek olarak". Ayrıca bu şemada, OR geçidinin ivmeölçer IC'ye kalıcı olarak inşa edilebileceğini de yanlış yaptım. Bu, herkes için I2C'yi devre dışı bırakacaktır. Önceki yorumu tekrar yazacağım.
Nick Alexeev

BMA180, 3x DNC / ayrılmış pime sahiptir. Belki de fabrikada kullanılıyorlar.
Nick Alexeev

1
Dijital ivmeölçerlerin birbiriyle pin uyumlu olma eğiliminde olduklarını fark ettim. Bu kullanılmayan pimleri açıklayabilir. Ya da dediğin gibi fabrika testi.
markrages
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.