4.9. Bus sensor¶
Sebuah sensor kamera dan MCU yang digunakannya untuk berkomunikasi saling menukar dua jenis data yang berbeda melalui dua bus yang berbeda.
4.9.1. Bus kontrol¶
Setiap pengaturan sensor tersimpan dalam sebuah register pada chip -- format piksel, ukuran bingkai, waktu eksposur, gain, gain white-balance, target kontrol otomatis, dan seterusnya. MCU membaca dan menulis register-register tersebut melalui bus I2C (beberapa sensor menggunakan SPI sebagai gantinya). Dua kabel (SCL dan SDA) menghubungkan periferal I2C pada MCU ke antarmuka I2C pada sensor, dan setiap konfigurasi yang dipilih pengguna diterjemahkan oleh driver menjadi satu atau lebih penulisan register pada bus ini.
Bus kontrol beroperasi pada kecepatan yang lebih lambat -- biasanya 100 kHz atau 400 kHz. Mengatur satu register memakan waktu puluhan mikrodetik; mengonfigurasi ulang seluruh sensor (reset, ukuran bingkai baru, format piksel baru) memerlukan waktu puluhan hingga ratusan milidetik, sebagian besar karena chip membutuhkan waktu sebentar untuk membawa mode baru ke kondisi bersih setelah setiap penulisan register. Semua itu tidak perlu mengikuti kecepatan aliran piksel.
4.9.2. Bus data piksel¶
Data piksel meninggalkan sensor melalui bus terpisah yang lebih lebar dan jauh lebih cepat. Dua jenis utama mendominasi.
Paralel adalah yang lebih tua dari keduanya. Bus ini membawa delapan atau sepuluh jalur data untuk bit piksel, ditambah pixel clock (PCLK), sinyal line-valid (HSYNC), dan sinyal frame-valid (VSYNC). Pada setiap tepi clock, satu byte piksel muncul di jalur data; HSYNC dan VSYNC memberi tahu penerima di mana setiap baris dan setiap bingkai dimulai dan berakhir. Bus paralel sederhana, tetapi throughput dibatasi oleh seberapa cepat matriks pin MCU dapat mengambil data -- biasanya pixel clock 50 hingga 100 MHz pada batas tertinggi.
MIPI CSI-2 -- Mobile Industry Processor Interface Camera Serial Interface, versi 2 -- sebagian besar telah menggantikan paralel pada sensor citra baru. Bus ini membawa piksel pada satu atau lebih pasangan lane diferensial dengan kecepatan ratusan megabit per detik per pasangan, dengan jumlah pin yang lebih sedikit, bandwidth jauh lebih tinggi, dan EMI yang lebih rendah. Bus paralel masih dipertahankan terutama pada desain warisan dan komponen yang lebih kecil dengan kecepatan lebih rendah di mana kesederhanaannya masih memberikan keuntungan.
Sensor dan MCU saling bertukar kontrol melalui bus I2C dua arah yang lambat dan data piksel melalui bus paralel atau MIPI satu arah yang lebih lebar dan lebih cepat.¶
Keluarga mana pun yang digunakan sensor, sisi MCU memiliki periferal dengan fungsi tetap yang menangkap piksel yang masuk dan menulisnya ke dalam framebuffer di memori. Kode Python tidak pernah menggerakkan bus ini secara langsung; kode tersebut hanya membaca framebuffer setelah hardware selesai mengisinya.