I3C — No Typo — Ingin Menjadi Serial Bus Anda

Ingat hard drive lama dengan kabel pita raksasa mereka? Mereka pergi serial dan sekarang kabel listrik jauh lebih tebal dari kabel data. Kami telah melihat hal yang sama di perangkat yang disematkan. Berbicara antar chip akhir-akhir ini cenderung menggunakan I2C atau SPI atau beberapa variasinya untuk mengirim dan menerima data melalui beberapa pin. Tapi sekarang ada I3C, standar industri yang relatif baru yang mendapatkan sedikit daya tarik.

I2C dan SPI sudah matang tetapi mereka memiliki masalah. I2C bisa relatif lambat dan SPI biasanya membutuhkan pin tambahan untuk setiap perangkat. Selain itu, ada dukungan yang buruk untuk menambahkan dan menghapus perangkat secara dinamis atau menemukan perangkat secara otomatis.

I3C, yang dibuat oleh Aliansi MIPI, bertujuan untuk memperbaiki masalah ini. Itu memang menggunakan dua kabel biasa, SCL untuk jam dan SDA untuk data. Satu perangkat bertindak sebagai pengontrol. Perangkat lain dapat menjadi target atau pengontrol sekunder. Ini juga kompatibel dengan perangkat target I2C. Bergantung pada bagaimana Anda menerapkannya, kecepatannya bisa sangat cepat dengan kecepatan mentah 12,5 Mbps dan menggunakan teknik pengkodean baris bisa mencapai sekitar 33 Mbps.

Bukan I2C

Bus terlihat seperti bus I2C biasa, tetapi pengalamatan bersifat dinamis, kecuali untuk perangkat I2C lama yang masih menggunakan alamat normalnya. Dengan kata lain, controller memberikan alamat ke perangkat yang ditemukan di bus. Perangkat lama tidak dapat menggunakan pengalamatan yang diperluas. Anda juga dapat menghubungkan perangkat tanpa menghentikan bus. Ada kemampuan untuk pesan siaran, beberapa operasi, dan interupsi dalam-band. Ini juga memiliki fitur khusus untuk desain yang membutuhkan operasi daya rendah. Selain menentukan koneksi fisik antar perangkat, ada juga spesifikasi untuk antarmuka pengontrol host. Itu berarti perangkat lunak memiliki antarmuka standar untuk berbicara dengan pengontrol dan bus.

Ada berbagai cara untuk meningkatkan throughput data, meskipun beberapa mengharuskan tidak ada perangkat I2C lama yang ada di bus. Misalnya, saat berbicara dengan perangkat target, dimungkinkan untuk menyetujui penggunaan skema kecepatan data ganda di mana data muncul di kedua sisi jam. Ada juga cara untuk mewajibkan kedua jalur menggunakan pengkodean basis 3 dalam skema self-clocking. Idenya adalah bahwa dua bit dapat mengkodekan salah satu dari empat status. Dari setiap state, ada tiga kemungkinan nilai berikutnya. Jadi setiap transisi menyediakan basis 3 digit yang mengemas lebih banyak data ke dalam jumlah waktu yang sama dibandingkan dengan skema tradisional.

Sayangnya, spesifikasi lengkapnya hanya tersedia untuk anggota MIPI. Namun, Anda dapat mengunduh spesifikasi dasarnya. Sayangnya, ini mendokumentasikan sebagian dari semua fitur yang tersedia. Misalnya, hanya kecepatan data tunggal dan ganda yang muncul di spesifikasi publik. Namun, host dan perangkat akan bernegosiasi, sehingga dimungkinkan untuk memiliki perangkat yang, misalnya, hanya berbicara SDR hidup berdampingan dengan perangkat lain yang ingin melakukan sesuatu yang lebih eksotis.

Tidak Ada yang Sederhana

Jika Anda ingin mencoba menerapkan semua ini, ini jauh lebih berhasil daripada sedikit membenturkan antarmuka SPI. Misalnya, periksa transaksi untuk pengalokasian alamat secara dinamis di bus, yang juga berfungsi untuk memiliki alokasi statis, termasuk untuk perangkat I2C.

Transaksi untuk pengaturan pengalamatan dinamis

Kemampuan untuk menggabungkan perangkat saat bus sedang beroperasi adalah masalah kompleks lainnya. Jika Anda hanya ingin mematikan sebagian papan, itu mungkin cukup mudah. Tetapi jika Anda ingin benar-benar mencolokkan sesuatu, Anda harus mencari cara untuk melakukannya tanpa mengganggu bus yang sedang bekerja secara elektrik.

Meskipun spek publik bukanlah segalanya, namun beratnya masih mencapai hampir 450 halaman! Ada banyak yang harus dicerna. Tidak jelas juga, berapa banyak motivasi yang ada untuk mengimplementasikan ini sendiri dalam perangkat lunak. Ada sedikit masalah naga dan telur di sini: Sebagian besar prosesor tidak mendukung I3C karena tidak banyak perangkat yang menggunakannya. Tetapi sampai ada lebih banyak prosesor yang mendukungnya, mengapa membangun perangkat?

Dalam praktek

Itu mungkin tidak terjadi di masa depan. Tetapi bagi kebanyakan dari kita, pertanyaannya adalah perangkat apa yang menggunakan protokol ini saat ini? Kernel Linux memiliki driver I3C yang tersedia, dan ada beberapa perangkat di luar sana. NXP, misalnya, mencantumkan beberapa produk dengan I3C, dengan beberapa sensor suhu “segera hadir”. Mereka juga menawarkan beberapa CPU ARM dengan periferal I3C, seperti LPC553x. Microchip memiliki PIC18-Q20 yang dapat bertindak sebagai target, tetapi bukan pengontrol. Selain itu, Renesas, ST, TI, dan beberapa vendor lain menawarkan beberapa perangkat target I3C mulai dari chip IMU 6-sumbu hingga sensor suhu. Jika Anda memiliki penganalisis logika Saleae, ada firmware yang bisa Anda dapatkan yang akan membantu Anda membaca I3C.

Penganalisis logika Saleae mendekode I3C dengan plugin pihak ketiga

Apakah itu akan menangkap? Mungkin. Karena CPU tertanam yang murah menjadi lebih kuat, semakin sedikit alasan untuk tetap menggunakan protokol sederhana. Namun, ada sesuatu yang menyenangkan mengetahui bahwa Anda dapat menggigit bus UART atau SPI Anda dalam beberapa jam pengkodean yang menyenangkan jika Anda harus melakukannya. Dengan I3C, Anda mungkin akan mengandalkan periferal tertanam untuk melakukan semua pekerjaan berat. Kemudian lagi, jika mereka menjadi umum, mengapa tidak?