Bagikan melalui


Gambaran Umum Dukungan Driver GPIO

Dimulai dengan Windows 8, ekstensi kerangka kerja GPIO (GpioClx) menyederhanakan tugas menulis driver untuk perangkat pengontrol GPIO. Selain itu, GpioClx menyediakan dukungan driver untuk perangkat periferal yang terhubung ke pin GPIO. GpioClx, yang merupakan ekstensi yang disediakan sistem ke kerangka kerja driver mode kernel (KMDF), melakukan tugas pemrosesan yang umum bagi anggota kelas perangkat GPIO.

Gambaran umum ini membahas topik berikut:

Driver Pengontrol GPIO

Vendor perangkat keras menyediakan driver untuk mengontrol pengontrol GPIO mereka. Driver pengontrol GPIO adalah driver KMDF yang mengelola semua operasi khusus perangkat keras untuk pengontrol GPIO. Driver pengontrol GPIO bekerja sama dengan GpioClx untuk menangani permintaan I/O untuk grup pin GPIO yang dikonfigurasi sebagai input data dan output data. Selain itu, driver ini bekerja sama dengan GpioClx untuk menangani permintaan interupsi dari pin GPIO yang dikonfigurasi sebagai input interupsi.

Perangkat pengontrol GPIO memiliki beberapa pin GPIO. Pin ini dapat terhubung secara fisik ke perangkat periferal. Pin GPIO dapat dikonfigurasi sebagai input data, output data, atau input permintaan interupsi. Biasanya, pin GPIO didedikasikan untuk perangkat periferal, dan tidak dibagikan oleh dua perangkat atau lebih. Koneksi antara pin GPIO dan perangkat periferal diperbaiki dan tidak dapat diubah oleh pengguna (misalnya, dengan menghapus perangkat periferal dan menggantinya dengan perangkat lain). Dengan demikian, penugasan pin GPIO ke perangkat periferal dapat dijelaskan dalam firmware platform.

Diagram berikut menunjukkan driver pengontrol GPIO dan GpioClx.

diagram blok komponen gpio.

Driver pengontrol GPIO dan GpioClx berkomunikasi satu sama lain melalui antarmuka driver perangkat (DDI) GpioClx. Driver pengontrol GPIO memanggil metode dukungan driver yang diimplementasikan oleh GpioClx. GpioClx memanggil fungsi panggilan balik peristiwa yang diimplementasikan oleh driver pengontrol GPIO.

Driver pengontrol GPIO secara langsung mengakses daftar perangkat keras perangkat pengontrol GPIO.

GpioClx menangani permintaan I/O dari driver untuk perangkat periferal yang secara fisik terhubung ke pin GPIO. GpioClx menerjemahkan permintaan I/O ini ke dalam operasi perangkat keras sederhana, yang dilakukannya dengan memanggil fungsi panggilan balik peristiwa yang diterapkan oleh driver pengontrol GPIO. Misalnya, untuk membaca data dari atau menulis data ke sekumpulan pin GPIO, GpioClx memanggil fungsi panggilan balik peristiwa seperti CLIENT_ReadGpioPins dan CLIENT_WriteGpioPins. GpioClx mengelola antrean I/O untuk pengontrol GPIO, dan dengan demikian meringankan driver pengontrol GPIO dari tugas ini.

Selain itu, GpioClx menangani gangguan utama dari perangkat pengontrol GPIO dan memetakan gangguan ini ke interupsi sekunder, yang ditangani oleh driver perangkat periferal. Interupsi utama adalah gangguan yang dihasilkan oleh perangkat keras. Interupsi sekunder dihasilkan oleh sistem operasi sebagai respons terhadap gangguan primer tertentu. Interupsi primer dan sekunder diidentifikasi oleh gangguan sistem global (GSI). Firmware ACPI untuk platform perangkat keras menetapkan GSI ke interupsi utama, dan, pada waktu proses, sistem operasi menetapkan GSI ke interupsi sekunder.

Misalnya, firmware menetapkan GSI ke interupsi perangkat keras dari pengontrol GPIO, dan sistem operasi menetapkan GSI ke pin GPIO yang dikonfigurasi sebagai input interupsi.

GpioClx mengimplementasikan ISR yang menangani interupsi utama yang dihasilkan perangkat keras dari perangkat pengontrol GPIO. Ketika perangkat periferal menegaskan interupsi pada pin GPIO, dan interupsi pada pin ini diaktifkan dan dibuka, pengontrol GPIO mengganggu prosesor. Sebagai tanggapan, penangan trap kernel menjadwalkan ISR GpioClx untuk dijalankan. Untuk mengidentifikasi pin GPIO yang menyebabkan gangguan, GpioClx ISR memanggil fungsi panggilan balik peristiwa CLIENT_QueryActiveInterrupts , yang diimplementasikan oleh driver pengontrol GPIO. GpioClx ISR kemudian mencari GSI yang ditetapkan ke pin ini dan meneruskan GSI ini ke lapisan abstraksi perangkat keras (HAL). HAL menghasilkan interupsi sekunder dengan memanggil ISR yang terdaftar untuk GSI ini. ISR ini milik driver untuk perangkat periferal yang awalnya menegaskan interupsi.

Untuk informasi selengkapnya tentang interupsi primer dan sekunder, lihat Gangguan GPIO.

Driver untuk Perangkat Periferal yang Menggunakan Pin GPIO

Saat startup, manajer Plug and Play (PnP) menghitung perangkat PnP dan perangkat non-PnP. Untuk perangkat non-PnP yang memiliki koneksi tetap ke pin GPIO, manajer PnP meminta firmware platform untuk menentukan pin GPIO mana yang ditetapkan sebagai sumber daya perangkat keras yang dikelola sistem ke perangkat ini.

Driver KMDF untuk perangkat periferal menerima sumber daya perangkat keras yang ditetapkan selama panggilan balik EvtDevicePrepareHardware . Sumber daya ini mungkin mencakup pin GPIO yang dikonfigurasi sebagai output data, input data, atau input permintaan interupsi.

Sumber daya I/O GPIO adalah jenis sumber daya Windows baru di Windows 8. Sumber daya ini terdiri dari satu set atau beberapa pin GPIO yang dapat digunakan baik sebagai input data atau output data. Jika driver perangkat periferal membuka sumber daya I/O GPIO untuk dibaca, driver menggunakan semua pin dalam sumber daya sebagai input data. Jika driver membuka sumber daya I/O GPIO untuk menulis, driver menggunakan semua pin dalam sumber daya sebagai output data. Untuk contoh kode yang menunjukkan bagaimana driver perangkat periferal membuka koneksi logis ke sekumpulan pin I/O GPIO, lihat topik berikut:

Menyambungkan Driver KMDF ke Pin I/O GPIO

Pin GPIO yang dikonfigurasi sebagai input interupsi ditetapkan ke driver sebagai sumber daya interupsi Windows biasa. Abstraksi sumber daya interupsi menyembunyikan fakta bahwa gangguan mungkin diimplementasikan oleh pin GPIO alih-alih, misalnya, pengontrol gangguan yang dapat diprogram. Dengan demikian, driver dapat memperlakukan sumber daya interupsi berbasis GPIO sama dengan sumber daya interupsi lainnya.

Untuk mengakses pin GPIO di sumber daya I/O GPIO, driver perangkat periferal harus membuka koneksi logis ke pin. Driver KMDF memanggil metode WdfIoTargetOpen untuk membuka koneksi. Melalui koneksi ini, driver dapat mengirim permintaan I/O ke pin GPIO. Driver mengirim permintaan IOCTL_GPIO_READ_PINS untuk membaca data dari pin ini (jika merupakan pin input) atau permintaan IOCTL_GPIO_WRITE_PINS untuk menulis data kepada mereka (jika mereka adalah pin output).

Untuk menerima interupsi dari pin GPIO dalam sumber daya interupsi, driver perangkat periferal harus mendaftarkan rutinitas layanan interupsi (ISR) untuk menerima gangguan dari sumber daya interupsi yang diimplementasikan oleh pin ini. Driver KMDF memanggil metode WdfInterruptCreate untuk menghubungkan ISR ke interupsi.