Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Driver perangkat periferal SPB mengontrol perangkat periferal yang terhubung ke bus periferal sederhana (SPB). Register perangkat keras perangkat ini hanya tersedia melalui SPB. Untuk membaca dari atau menulis ke perangkat, driver harus mengirim permintaan I/O ke pengontrol SPB. Hanya pengontrol ini yang dapat memulai transfer data ke dan dari perangkat melalui SPB.
Dimulai dengan Windows 8, Windows menyediakan dukungan driver untuk perangkat periferal pada bus periferal sederhana (SPB). SPB, seperti I2C dan SPI, banyak digunakan untuk terhubung ke perangkat sensor berkecepatan rendah, seperti akselerometer, perangkat GPS, dan monitor tingkat baterai. Gambaran umum ini menjelaskan bagaimana driver perangkat periferal SPB, bekerja sama dengan komponen sistem lain, mengontrol perangkat periferal yang terhubung dengan SPB.
Driver perangkat periferal SPB dapat dibangun untuk menggunakan User-Mode Driver Framework (UMDF) atau Kernel-Mode Driver Framework (KMDF). Untuk informasi selengkapnya tentang mengembangkan driver UMDF, lihat Memulai UMDF. Untuk informasi selengkapnya tentang mengembangkan driver KMDF, lihat Memulai Kernel-Mode Driver Framework.
Informasi Konfigurasi Perangkat
Register perangkat keras dari perangkat periferal yang terhubung dengan SPB tidak dipetakan ke dalam memori. Perangkat hanya dapat diakses melalui pengontrol SPB, yang secara serial mentransfer data ke dan dari perangkat melalui SPB. Untuk melakukan operasi I/O, driver perangkat periferal SPB mengirim permintaan I/O ke perangkat, dan pengontrol SPB melakukan transfer data yang diperlukan untuk menyelesaikan permintaan ini. Untuk informasi selengkapnya tentang permintaan I/O yang dapat dikirim ke perangkat periferal di SPB, lihat Menggunakan Antarmuka Permintaan I/O SPB.
Diagram berikut menunjukkan contoh konfigurasi perangkat keras di mana SPB—dalam hal ini, bus I2C—menghubungkan dua perangkat periferal ke modul System on a Chip (SoC). Perangkat periferal berada di luar modul SoC dan terhubung ke empat pin pada modul. Modul SoC berisi prosesor utama (tidak ditampilkan), ditambah pengontrol I2C dan pengontrol I/O tujuan umum (GPIO). Prosesor menggunakan pengontrol I2C untuk mengirimkan data secara serial ke dan dari dua perangkat periferal. Baris permintaan interupsi dari perangkat ini terhubung ke dua pin GPIO yang dikonfigurasi sebagai input interupsi. Saat perangkat memberi sinyal permintaan interupsi, pengontrol GPIO menyampaikan gangguan ke prosesor.
Karena pengontrol GPIO dan pengontrol I2C dalam contoh ini diintegrasikan ke dalam modul SoC, register perangkat keras mereka dipetakan memori dan dapat langsung diakses oleh prosesor. Namun, prosesor dapat mengakses pendaftaran perangkat keras dari dua perangkat periferal hanya secara tidak langsung, melalui pengontrol I2C.
SPB bukan bus Plug and Play (PnP) dan, oleh karena itu, tidak dapat digunakan untuk secara otomatis mendeteksi dan mengonfigurasi perangkat baru yang dicolokkan ke bus. Koneksi bus dan interupsi perangkat yang terhubung dengan SPB sering kali permanen. Bahkan jika perangkat dapat dilepas dari slot, slot ini biasanya didedikasikan untuk perangkat. Selain itu, SPB tidak menyediakan jalur perangkat keras dalam pita untuk menyampaikan permintaan interupsi dari perangkat periferal di bus ke pengontrol bus. Sebaliknya, jalur perangkat keras untuk interupsi terpisah dari pengontrol bus.
Vendor untuk platform perangkat keras menyimpan informasi konfigurasi untuk perangkat periferal yang terhubung dengan SPB di firmware ACPI platform. Selama startup sistem, driver ACPI menghitung perangkat di bus untuk manajer PnP. Untuk setiap perangkat enumerasi, ACPI menyediakan informasi tentang bus perangkat dan koneksi interupsi. Manajer PnP menyimpan informasi ini di datastore yang disebut hub sumber daya.
Ketika perangkat dimulai, manajer PnP memasok driver perangkat dengan sekumpulan sumber daya perangkat keras yang merangkum informasi konfigurasi yang disimpan hub sumber daya untuk perangkat. Sumber daya ini mencakup ID koneksi dan nomor interupsi. ID koneksi merangkum informasi koneksi bus, seperti pengontrol SPB, alamat bus, dan frekuensi jam bus. Sebelum permintaan I/O dapat dikirim ke perangkat, driver harus terlebih dahulu menggunakan ID koneksi untuk membuka koneksi logis ke perangkat. Nomor interupsi adalah sumber daya interupsi Windows di mana driver dapat menyambungkan rutinitas layanan interupsi (ISR). Driver dapat dengan mudah di-port dari satu platform perangkat keras ke platform lain karena ID koneksi dan nomor interupsi adalah abstraksi tingkat tinggi yang menyembunyikan informasi khusus platform tentang bus fisik dan mengganggu koneksi.
Lapisan Perangkat Lunak dan Perangkat Keras
Diagram blok berikut menunjukkan lapisan perangkat lunak dan perangkat keras yang menghubungkan perangkat periferal pada SPB ke program aplikasi yang menggunakan perangkat. Driver perangkat periferal SPB dalam contoh ini adalah driver UMDF. Perangkat periferal (di bagian bawah diagram) adalah perangkat sensor (misalnya, akselerometer). Seperti pada diagram sebelumnya, perangkat periferal terhubung ke bus I2C dan mengirim sinyal permintaan interupsi melalui sebuah pin pada pengontrol GPIO.
Tiga blok yang ditampilkan berwarna abu-abu adalah modul yang disediakan sistem. Dimulai dengan Windows 7, ekstensi kelas sensor tersedia sebagai ekstensi khusus sensor ke UMDF. Dimulai dengan Windows 8, ekstensi kerangka kerja SPB (SpbCx) dan ekstensi kerangka kerja GPIO (GpioClx) tersedia sebagai ekstensi ke KMDF yang melakukan fungsi yang khusus untuk pengontrol SPB dan pengontrol GPIO.
Di bagian atas diagram sebelumnya, aplikasi memanggil metode di API Sensor atau API Lokasi untuk berkomunikasi dengan perangkat sensor. Melalui panggilan ini, aplikasi dapat mengirim permintaan I/O ke perangkat, dan menerima pemberitahuan peristiwa dari perangkat. Untuk informasi selengkapnya tentang API ini, lihat Pengenalan Sensor dan Platform Lokasi di Windows.
Ketika aplikasi memanggil metode yang memerlukan komunikasi dengan driver perangkat periferal SPB, API Sensor atau API Lokasi membuat permintaan I/O dan mengirimkannya ke driver perangkat periferal SPB. Modul ekstensi kelas sensor membantu driver dalam menangani permintaan I/O ini. Ketika driver menerima permintaan I/O baru, driver segera menyerahkan permintaan ke ekstensi kelas sensor, yang mengantrekan permintaan hingga driver siap untuk menanganinya. Jika permintaan I/O dari aplikasi memerlukan transfer data ke atau dari perangkat periferal, driver perangkat periferal SPB membuat permintaan I/O untuk transfer ini dan mengirim permintaan ke pengontrol I2C. Permintaan tersebut ditangani secara bersama-sama oleh SpbCx dan driver pengontrol I2C.
SpbCx adalah komponen yang disediakan sistem yang mengelola antrean permintaan I/O untuk pengontrol SPB, seperti pengontrol I2C dalam contoh ini. Driver pengontrol I2C, yang disediakan oleh vendor perangkat keras untuk pengontrol, mengelola semua operasi khusus perangkat keras di pengontrol I2C. Misalnya, pengandar pengontrol mengakses register perangkat keras pengontrol yang dipetakan ke memori untuk memulai transfer data ke dan dari perangkat periferal melalui bus I2C.
Perangkat periferal menandakan permintaan interupsi ketika peristiwa perangkat keras terjadi yang memerlukan perhatian dari driver perangkat periferal SPB atau aplikasi mode pengguna. Garis interupsi dari perangkat periferal terhubung ke pin GPIO yang dikonfigurasi untuk menerima permintaan interupsi. Ketika perangkat memberi sinyal interupsi ke pin GPIO, pengontrol GPIO memberi sinyal interupsi ke prosesor. Menanggapi gangguan ini, penangan jebakan interupsi kernel memanggil ISR GpioClx. ISR ini meminta informasi dari driver pengontrol GPIO, yang kemudian mengakses register perangkat keras yang dipetakan ke memori dari pengontrol GPIO untuk mengidentifikasi pin GPIO yang mengganggu. Untuk mengheningkan interupsi, driver pengontrol GPIO menghapus (jika interupsi dipicu oleh tepi) atau menutup (jika dipicu oleh tingkat) sinyal interupsi pada pin GPIO. Interupsi harus diredam untuk mencegah prosesor mengambil interupsi yang sama lagi saat handler perangkap dikembalikan. Untuk interupsi yang dipicu oleh level, ISR di driver perangkat periferal SPB harus mengakses register perangkat keras perangkat periferal untuk menghapus interupsi sebelum pin GPIO dapat dinonaktifkan masknya.
Sebelum handler trap interupsi kernel kembali, handler tersebut menjadwalkan ISR di driver perangkat periferal SPB untuk dijalankan pada IRQL = PASSIVE_LEVEL. Dimulai dengan Windows 8, driver UMDF dapat menghubungkan ISR-nya ke gangguan yang diterima driver sebagai sumber daya interupsi Windows abstrak; untuk informasi selengkapnya, lihat Penanganan Gangguan. Untuk menentukan ISR mana yang akan dipanggil, sistem operasi mencari gangguan virtual yang ditetapkan ke pin GPIO yang mengganggu dan menemukan ISR yang terhubung ke interupsi. Interupsi virtual ini diberi label sebagai gangguan sekunder dalam diagram sebelumnya. Sebaliknya, gangguan perangkat keras dari pengontrol GPIO diberi label sebagai gangguan utama .
Karena ISR di driver perangkat periferal SPB berjalan pada tingkat pasif, ISR dapat menggunakan permintaan I/O sinkron untuk mengakses daftar perangkat keras di perangkat periferal. ISR dapat memblokir hingga permintaan ini selesai. ISR, yang berjalan pada prioritas yang relatif tinggi, harus kembali sesegera mungkin dan menunda semua pemrosesan latar belakang untuk interupsi pada rutinitas pekerja dengan prioritas yang lebih rendah.
Sebagai respons terhadap gangguan sekunder, driver perangkat periferal SPB memposting peristiwa di ekstensi kelas sensor, yang memberi tahu aplikasi mode pengguna peristiwa melalui API Sensor atau API Lokasi.