BMA180 accelerometer. Bagaimana cara mengelola berbagi pin antara I2C dan SPI?

11

BMA180 accelerometer dapat berupa budak SPI atau budak I 2 C. Pin untuk kedua bus dibagi.

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

Menurut datasheet (lihat bab 8) , pemilihan antar bus dilakukan melalui pin CSB. Ketika CSB rendah, perangkat adalah budak SPI. Ketika CSB tinggi, perangkat adalah budak I 2 C.

Inilah mode kegagalan , yang saya khawatirkan. Misalkan, BMA180 ada di bus SPI. Ada juga perangkat lain di bus yang sama dengan chip pilih sendiri. Misalkan, master bus SPI berkomunikasi ke perangkat lain itu. CSB untuk BMA180 tinggi, jadi I 2 C harus diaktifkan. BMA180 melihat clock edge pada SCL (SPI's SCLK) dan bit pada SDA (SPI's MOSI) terbang oleh. Bagaimana jika sebagian dari bit-bit ini terlihat ke BMA180 seperti permulaan dari transaksi pembacaan I 2 C yang valid , dan BMA180 mulai menghasilkan data dan mengganggu transaksi SPI yang ada? Bagaimana desain BMA180 mencegah itu?

Ini adalah masalah rasa ingin tahu. Saya belum bereksperimen dengan masalah ini. Saya akan menggunakan BMA180 di SPI.

Setiap saran, wawasan atau referensi sangat dihargai!

Memperbarui. Menemukan sesuatu di lembar data (lihat 7.7.11) . Ini merekomendasikan menonaktifkan I 2 C dengan mengatur dis_i2cbit, jika berkomunikasi dengan BMA180 via SPI.

Ketika antarmuka SPI digunakan, sangat disarankan untuk mengatur dis_i2c ke 1 untuk menghindari kerusakan.

BMA180 memiliki EEPROM bawaan. Isi register dapat disimpan dalam EEPROM dan secara otomatis dimuat pada urutan power-up. Jadi, dimungkinkan untuk membuat BMA180 mengabaikan I 2 C sepenuhnya dan selalu.

Memperbarui. L3GD20 gyro adalah IC lain, yang berbagi pin antara I 2 C dan SPI dengan cara yang serupa. Tampaknya tidak memiliki pengaturan sedikit untuk menonaktifkan mode I 2 C. Jadi, itu akan membutuhkan gerbang OR seperti ADXL345, yang dibesarkan @markrages.

Kepala! Bosch menghentikan pengiriman BMA180 ( surat resmi di sini ).

Nick Alexeev
sumber

Jawaban:

14

Saya telah melihat persis perilaku yang Anda takuti pada ADXL345, yang menggunakan skema seleksi I2C / SPI yang sama. Saya memiliki perangkat SPI lain yang menggunakan polaritas jam yang berbeda dan kebetulan meniru kode awal I2C, ADXL345 mencoba untuk berbicara sebagai I2C. Kabar buruk.

Dengan hati-hati saya menulis ulang SPI sebagai bit bang alih-alih menggunakan periferal, memastikan untuk tidak mengubah garis MOSI saat jam sedang tinggi. (Ini adalah kondisi awal I2C.) Itu sepertinya menyelesaikan banyak hal.

Jika saya mulai dari awal, saya akan mencoba menggunakan bus I2C atau port SPI khusus untuk ADXL345.

Tampaknya aku bukan satu-satunya yang menemukan ini. Paragraf ini muncul dalam revisi kemudian dari lembar data ADXL345:

masukkan deskripsi gambar di sini

markrages
sumber
+1 dan terima kasih! Baru saja ditemukan di lembar data bahwa BMA180 memiliki bit menonaktifkan I2C (lihat 7.7.11). Dapat dipahami bahwa BMA180 memiliki gerbang OR built-in juga, dan itu tidak disebutkan dalam datasheet secara eksplisit.
Nick Alexeev
1
Gerbang OR secara efektif menonaktifkan mode I2C, jadi itu tidak dibangun ke dalam chip. (Jika perancang chip dapat menyimpan pin tambahan, situasinya dapat sepenuhnya dihindari.)
markrages
Seharusnya saya tidak menulis "terlalu" di posting sebelumnya. Dengan "terlalu" berarti "selain I2C menonaktifkan bit". Saya juga salah bahwa dalam skema ini, gerbang OR dapat dibangun secara permanen menjadi akselerometer IC. Itu akan menonaktifkan I2C untuk selamanya. Saya akan menulis ulang komentar sebelumnya.
Nick Alexeev
BMA180 memiliki pin 3x DNC / reserved. Mungkin, mereka sudah digunakan untuk keperluan pabrik.
Nick Alexeev
1
Saya perhatikan akselerometer digital cenderung kompatibel satu sama lain. Itu mungkin menjelaskan pin yang tidak digunakan. Atau tes pabrik seperti yang Anda katakan.
markrages