Apakah frekuensi campuran I2C mungkin?

12

Misalkan kita memiliki 400 kHz I 2 C bus. Ada satu master dan banyak perangkat slave. Kami ingin memperkenalkan satu lagi perangkat slave, tetapi sayangnya hanya mencapai 100 kHz.

Jelas, pilihan desain yang solid adalah:

  • jalankan saja bus itu pada 100 kHz
  • gunakan bus terpisah untuk periferal 400 kHz dan 100 kHz

Tetapi pertanyaannya hanya tentang hack: bagaimana jika kita menggunakan satu bus, dan mengatasi perangkat 400 kHz pada 400 kHz, dan mengganti bus ke 100 kHz ketika berbicara dengan budak 100 kHz?

Atau bisakah budak yang lebih lambat berperilaku sebagai respons terhadap hash 400 kHz yang dilihatnya pada garis I 2 C karena ia secara keliru berpikir bahwa itu sedang ditangani?

Bisakah kita bergantung pada perangkat 100 kHz untuk masih dapat memproses sinyal 400 kHz I 2 C dengan cukup baik untuk mengabaikan pesan yang ditujukan kepada budak lain dengan andal?

Kaz
sumber
4
Mengenai kalimat terakhir Anda, saya tidak berpikir Anda bisa bergantung pada perangkat 100kHz untuk dapat memproses sinyal 400kHz.
gbmhunter
Namun, itulah tepatnya yang menjadi andalan kami jika kami menerapkan peretasan seperti itu, jadi pada dasarnya tidak ada pertanyaan.
Kaz

Jawaban:

6

Seperti yang Anda sarankan, melakukannya bukanlah praktik rekayasa yang baik. Sementara beberapa perangkat akan mengabaikan lalu lintas yang tidak dapat mereka terima (undersample), perangkat lain mungkin mengacaukan bus dengan bingkai yang salah.

Dengan demikian, jawaban yang Anda cari tergantung pada spesifikasi aplikasi Anda seperti:

  • panjang koneksi I2C Anda
  • nilai resistor pull-up
  • kompatibilitas perangkat

Tentu saja, sulit untuk memprediksi apa yang akan terjadi pada perangkat yang dioperasikan di luar spesifikasinya beberapa tahun ke depan.

Pilihan lain adalah menjalankan jalur shutdown untuk memperlambat perangkat atau melewati garis clock (asalkan mereka tidak dapat menghasilkan sinyal clock) melalui gerbang AND.

SunnyBoyNY
sumber
10

Opsi lain, jika Anda tidak memiliki bus I2C tambahan yang keluar dari master Anda adalah menggunakan saklar I2C, seperti PCA9543A / 43B . Letakkan budak 400kHz di satu cabang dan budak 100kHz di cabang lain dan alihkan jika diperlukan.

DoxyLover
sumber
Jika Anda melihat apa yang dikatakan Philips (pencetusnya), ini persis seperti ini. Mereka tidak kompatibel, dan saklar bus adalah obat yang disarankan. (Ada dalam catatan aplikasi).
Gbarry
6

Tidak ada jaminan bahwa perangkat 100kHz tidak akan berperilaku salah ketika terkena lalu lintas 400kHz - apa pun dari NACKs ke bus hang adalah mungkin.

Anda harus menjalankan seluruh bus pada 100kHz atau memiliki bus kecepatan rendah yang terpisah untuk perangkat lambat Anda.

Adam Lawrence
sumber
3

Pilihan lain. Alih-alih memiliki dua bus, Anda dapat dengan mudah menggunakan satu jalur tambahan (Lebih mudah dengan perangkat lunak / bitbanged I 2 C). Jalur jam terpisah, atau jalur data terpisah. Atau gunakan buffer I 2 C atau I 2 C untuk meletakkan chip 100MHz itu pada segmennya sendiri, tanpa harus mengubah apa pun.

Atau hanya mengujinya di satu bus. Sangat mungkin bahwa chip 100kHz akan mempengaruhi saluran. Itu bisa membaca setiap bit ke-4 dan akhirnya berpikir itu sudah ditangani. Tapi itu harus melihat kondisi awal yang valid, dan kemudian membaca setiap bit ke-4 dari 32 bit berikutnya sebagai alamat yang tepat, maka itu harus mencoba membaca beberapa byte berikutnya sebagai informasi yang valid untuk menulis ke register itu , atau coba keluar data. Saya pikir itu bukan situasi yang terlalu mungkin. Taruhan terbaik adalah dengan menghubungkannya dalam sirkuit uji dan memeriksanya.

Dua hal yang perlu diperhatikan, jika ini adalah sirkuit satu mati, atau Anda hanya membuat beberapa, cukup mudah untuk mengambil risiko, atau mengubahnya. Jika ini adalah barang yang diproduksi secara massal, Anda mungkin hanya ingin memiliki bus kedua. Yang lain, adalah Anda harus mempertimbangkan bahwa chip 100kHz hanya diproduksi dengan spesifikasi I 2 C asli, dan mungkin sangat mendukung kecepatan clock yang lebih tinggi. Hanya saja tidak diuji dengan spesifikasi 400kHz kecepatan lebih tinggi.

Pejalan kaki
sumber
2

Desain bus I2C sedemikian rupa sehingga -

  1. ketika tepi jatuh terjadi pada SCL, yang dapat menyebabkan perangkat budak segera menyatakan SDA, tanpa penundaan minimum tertentu;
  2. urutan relatif dari sisi naik dan turun sangat penting.

Karena perbedaan dalam kekuatan driver dan kapasitansi saluran, secara teori dimungkinkan bahwa satu perangkat mungkin merespons penurunan yang lambat pada SCL dengan menggerakkan SDA begitu cepat sehingga perangkat lain akan melihat SDA jatuh terlebih dahulu.

Mungkin saja mungkin untuk menetapkan beberapa ambang logika pada SCL, dan menentukan bahwa untuk tepi jatuh pada SCL dianggap datang setelah tepi pada SDA, itu masih harus di atas 2/3 VDD ketika tepi pada SDA terdeteksi, tetapi suatu perangkat mungkin tidak menyatakan SDA sebagai tanggapan terhadap penurunan pada SCL sampai jatuh di bawah 1/3 VDD, tetapi spesifikasi tidak ditulis dalam istilah seperti itu.

Sebagai gantinya, perangkat yang melihat tepi jatuh hampir bersamaan pada SDA dan SCL umumnya akan menganggap tepi pada SCL telah terjadi terlebih dahulu kecuali secara substansial didahului oleh tepi pada SDA. Beberapa implementasi I2C menangani ini dengan menyinkronkan SCL dan SDA ke beberapa jam eksternal dan mensyaratkan bahwa tepi jatuh SDA diamati dua periode sebelum SCL agar dianggap telah datang terlebih dahulu. Jika kecepatan operasi pada SCL dan SDA relatif terlalu cepat dibandingkan dengan jam sinkronisasi, perangkat dapat merasakan urutan sewenang-wenang sinyal tinggi dan rendah pada SCL dan SDA; jika salah satu dari sekuens tersebut terlihat seperti menangani perangkat yang lambat, ia dapat bereaksi sesuai itu, menekan semua komunikasi lain yang mungkin sedang terjadi.

Tidak ada alasan khusus bahwa perangkat pada bus I2C harus bergantung pada sinkronisasi ke jam sistem (bisa merasakan dua ambang diskrit pada SCL akan lebih baik), tetapi kenyataannya adalah bahwa beberapa perangkat pada kenyataannya bekerja seperti itu. Perhatikan bahwa bahkan jika sebuah perangkat yang terbatas pada kecepatan lambat secara internal ingin hidup berdampingan dengan bus cepat, ia mungkin harus menggunakan jam kerja minimum yang membentangkan setiap kali sesuatu sedang terjadi yang mungkin tertarik.

Ini akan menyebabkan beberapa komunikasi terjadi lebih lambat daripada yang seharusnya, tetapi penurunan kecepatan kemungkinan tidak akan seburuk yang disyaratkan dengan desain yang disinkronkan dengan jam (jumlah aktual yang digunakan perangkat lambat untuk membentang jam, kemungkinan tidak akan seburuk jumlah jam yang harus diperlambat untuk menghindari kegagalan skenario terburuk dalam unit jam yang disinkronkan).

supercat
sumber