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.
Dimulai dengan Windows 8, pin I/O tujuan umum (GPIO) yang dikontrol oleh driver pengontrol GPIO tersedia untuk driver lain sebagai sumber daya perangkat keras yang dikelola sistem. Pin I/O GPIO, yang merupakan pin yang dikonfigurasi sebagai input data atau output data, tersedia sebagai jenis sumber daya Windows baru, sumber daya I/O GPIO. Selain itu, pin interupsi GPIO, yang merupakan pin yang dikonfigurasi sebagai input permintaan interupsi, tersedia sebagai sumber daya interupsi Windows biasa.
Sumber daya I/O GPIO mewakili satu set pin GPIO, yang bisa berupa satu atau lebih, yang dapat dibaca atau ditulis oleh driver untuk perangkat periferal. Windows menyembunyikan detail tentang implementasi yang mendasar dari pin I/O GPIO sehingga driver perangkat periferal dapat ditulis untuk memanipulasi sumber daya I/O GPIO abstrak. Driver perangkat periferal yang menggunakan sumber daya abstrak ini dapat bekerja di seluruh platform terlepas dari perangkat keras pengontrol GPIO yang mengimplementasikan sumber daya. Sumber daya I/O GPIO diwakili oleh handel WDFIOTARGET yang mengaitkan sumber daya ini dengan driver pengontrol GPIO tertentu yang memiliki pin atau pin GPIO yang mendasar.
Biasanya, pin I/O pada pengontrol GPIO dapat dikonfigurasi baik untuk input atau untuk output, tergantung pada kemampuan perangkat keras pengontrol dan perangkat yang terhubung secara fisik ke pin. Dengan demikian, driver dapat membuka koneksi logis ke pin ini untuk operasi tulis atau baca, tetapi tidak keduanya. Namun, batasan ini diberlakukan oleh perangkat keras, dan bukan oleh ekstensi kerangka kerja GPIO (GpioClx). Jika perangkat keras memungkinkan pin I/O dikonfigurasi untuk input dan output, GpioClx memungkinkan driver untuk membuka koneksi logis ke pin untuk operasi baca dan tulis.
Untuk pin GPIO yang dikonfigurasi sebagai input permintaan interupsi, fakta bahwa permintaan interupsi diimplementasikan oleh pin GPIO alih-alih oleh pengontrol interupsi atau baris permintaan interupsi khusus sepenuhnya diabstraksi oleh sistem operasi. Interupsi GPIO disajikan kepada driver perangkat periferal sebagai sumber daya interupsi yang abstrak. Abstraksi sumber daya ini didukung oleh tumpukan driver GPIO dan oleh lapisan abstraksi perangkat keras (HAL). Dengan demikian, driver perangkat periferal yang menggunakan sumber daya interupsi sebagian besar dapat mengabaikan detail tentang implementasi yang mendasar dari sumber daya ini. Untuk informasi selengkapnya, lihat Interupsi GPIO.
Diagram berikut menunjukkan contoh penetapan sumber daya berbasis GPIO ke dua driver perangkat periferal:
Dalam diagram sebelumnya, tiga sumber daya berbasis GPIO berikut ditetapkan driver perangkat periferal A:
- Dua pin masukan data
- Pin keluaran data
- Pin interupsi input
Dua sumber daya berbasis GPIO berikut ditetapkan ke driver perangkat periferal B:
- Pin input data
- Pin sinyal interupsi
Driver A dan Driver B menerima sumber daya yang ditetapkan dalam fungsi panggilan balik EvtDevicePrepareHardware milik mereka. Jika driver menerima, sebagai sumber daya, satu set atau beberapa pin I/O GPIO, driver dapat membuka koneksi ke pin ini untuk mengaksesnya. Pengemudi mendapatkan handle WDFIOTARGET untuk mengidentifikasi koneksi dan mengirimkan request I/O ke handle ini untuk membaca dari atau menulis ke pin-pin tersebut.
Untuk contoh kode yang menunjukkan cara menyambungkan ke sekumpulan pin I/O GPIO dan mengirim permintaan I/O ke pin ini, lihat topik berikut:
Menyambungkan Driver KMDF ke Pin I/O GPIO
Dalam kedua topik, fungsi IoRoutine
dalam contoh kode membuka sumber daya pin I/O GPIO baik untuk membaca atau menulis, tergantung pada nilai parameter ReadOperation
. Jika sumber daya dibuka untuk dibaca (DesiredAccess
= GENERIC_READ), pin dalam sumber daya dikonfigurasi sebagai input, dan permintaan IOCTL_GPIO_READ_PINS yang dikirim ke sumber daya pin membaca nilai input pada pin ini. GpioClx tidak mengizinkan permintaan IOCTL_GPIO_WRITE_PINS dikirim sekumpulan pin input, dan menyelesaikan permintaan tersebut dengan status kesalahan STATUS_GPIO_OPERATION_DENIED. Demikian pula, jika sumber daya pin dibuka untuk penulisan data (DesiredAccess
= GENERIC_WRITE), pin dalam sumber daya dikonfigurasi sebagai output, dan permintaan IOCTL_GPIO_WRITE_PINS yang dikirim ke sumber daya pin mengatur nilai dalam pengait keluaran yang mengendalikan pin ini. Biasanya, mengirim permintaan IOCTL_GPIO_READ_PINS ke sekumpulan pin output hanya membaca nilai terakhir yang ditulis ke kait output.
Untuk menggunakan sumber daya interupsi untuk menerima gangguan, driver klien harus menghubungkan rutinitas layanan interupsi (ISR) ke interupsi. Biasanya, driver membuat koneksi ini dengan memanggil metode WdfInterruptCreate (atau, mungkin, rutinitas IoConnectInterruptEx ). Untuk informasi selengkapnya tentang gangguan KMDF, lihat Membuat Objek Interupsi.
Berbeda dengan perangkat Plug and Play yang dapat terhubung secara dinamis dan terputus dari platform perangkat keras, perangkat pengontrol GPIO terpasang secara permanen. Selain itu, koneksi antara pin GPIO dan perangkat periferal diasumsikan permanen. (Atau, jika perangkat periferal dapat dilepas dari slot, slot didedikasikan untuk perangkat ini.) Oleh karena itu, sumber daya GPIO yang tersedia bersifat tetap dan dapat ditentukan dalam firmware platform. Demikian pula, driver perangkat periferal yang menggunakan sumber daya GPIO diasumsikan untuk menggunakan set khusus sumber daya GPIO. Dengan demikian, persyaratan sumber daya untuk driver perangkat ini dapat ditentukan dalam firmware platform.
Ketika firmware platform menunjuk sekumpulan pin GPIO sebagai sumber daya I/O GPIO, firmware menunjukkan apakah pin dalam sumber daya ini dapat dibuka untuk baca, untuk tulis, atau untuk baca dan tulis.
Jika driver perangkat periferal menggunakan lebih dari satu sumber daya I/O GPIO, driver ini harus mengetahui urutan di mana sumber daya ini dijumlahkan oleh manajer PnP. Misalnya, jika driver menggunakan dua pin I/O GPIO, tetapi pin ini harus diakses secara independen dan pada waktu terpisah, firmware platform harus menggambarkan setiap pin sebagai sumber daya I/O GPIO terpisah. Manajer PnP menghitung sumber daya ini dalam urutan yang dijelaskan dalam firmware platform, yang harus sesuai dengan urutan yang diharapkan oleh driver.
Setelah driver perangkat periferal membuka koneksi ke sumber daya I/O GPIO, permintaan IOCTL_GPIO_READ_PINS atau IOCTL_GPIO_WRITE_PINS yang dikirim driver ini ke koneksi ini mengakses semua pin di sumber daya. Jika driver terkadang hanya harus mengakses subset pin ini, subset ini harus ditetapkan ke driver sebagai sumber daya terpisah.
Untuk informasi selengkapnya tentang permintaan IOCTL_GPIO_READ_PINS , termasuk pemetaan pin input data ke bit dalam buffer output permintaan, lihat IOCTL_GPIO_READ_PINS. Untuk informasi selengkapnya tentang permintaan IOCTL_GPIO_WRITE_PINS , termasuk pemetaan bit dalam buffer input permintaan ke pin output data, lihat IOCTL_GPIO_WRITE_PINS.