Utilisation de l’interface de demande d’E/S SPB
À partir de Windows 8, l’extension du framework SPB (SpbCx) est un composant fourni par le système qui prend en charge l’interface de demande d’E/S SPB. Les pilotes de périphériques SPB utilisent cette interface pour envoyer des demandes d’E/S aux périphériques connectés à I²C, SPI et autres bus périphériques simples (SPB). En rendant une interface de demande d’E/S standardisée disponible pour divers types de bus, SpbCx simplifie la tâche de fournir un support de pilote pour une famille de périphériques sur diverses plateformes matérielles et contrôleurs SPB de différents fournisseurs de matériel.
Si les conditions suivantes sont remplies, le fournisseur de matériel d’un périphérique connecté via SPB peut développer un pilote de périphérique unique pouvant fonctionner sur plusieurs types de bus :
- Le périphérique périphérique doit être compatible avec ces bus.
- Le pilote peut utiliser les mêmes protocoles de contrôle de périphérique sur tous ces types de bus.
En éliminant le code spécifique au bus des pilotes de périphériques, l’extension du framework SPB raccourcit le temps de développement de ces pilotes et assure un comportement plus cohérent entre les types de bus pris en charge.
Les périphériques connectés aux SPB ne sont pas mappés en mémoire, et les pilotes de ces périphériques ne peuvent pas accéder directement aux registres matériels de ces périphériques. Au lieu de cela, un pilote de périphérique SPB doit compter sur un contrôleur SPB pour transférer des données de manière séquentielle vers et depuis le périphérique. Pour demander un tel transfert, le pilote doit envoyer une demande d’E/S au périphérique. Cette demande d’E/S est envoyée à une file d’attente gérée par SpbCx.
SpbCx coopère avec un pilote de contrôleur SPB pour gérer les demandes d’E/S des pilotes. Le fournisseur de matériel du contrôleur SPB fournit le pilote de contrôleur SPB pour effectuer des tâches spécifiques au matériel du contrôleur.
Seuls les pilotes peuvent envoyer des demandes d’E/S à l’interface de demande d’E/S d’un contrôleur SPB. Les applications ne peuvent pas envoyer directement des demandes d’E/S à un contrôleur SPB. Au lieu de cela, une application peut envoyer des demandes d’E/S au pilote d’un périphérique connecté via SPB, puis compter sur le pilote pour envoyer au contrôleur SPB toutes les demandes d’E/S nécessaires pour transférer des données vers ou depuis le périphérique.
Avant qu’un pilote puisse envoyer des demandes d’E/S à un périphérique connecté via SPB, le pilote doit ouvrir une connexion logique au périphérique. Pour ouvrir cette connexion, le pilote utilise l’ID de connexion qu’il a reçu en tant que ressource matérielle du gestionnaire Plug and Play. Pour plus d’informations, veuillez consulter Identifiants de connexion pour les périphériques SPB.
SpbCx et le pilote de contrôleur SPB gèrent conjointement les demandes de lecture et d’écriture pour les périphériques connectés via SPB. En réponse à une demande IRP_MJ_READ, le contrôleur SPB transfère le nombre spécifié d’octets d’un périphérique vers un tampon fourni par le pilote. En réponse à une demande IRP_MJ_WRITE, le contrôleur SPB transfère le nombre spécifié d’octets d’un tampon fourni par le pilote vers un périphérique.
Pour une demande IRP_MJ_READ ou IRP_MJ_WRITE pour transférer zéro octet, SpbCx complète la demande avec un code de statut STATUS_SUCCESS, mais n’effectue aucune opération.
SpbCx et le pilote de contrôleur SPB gèrent également ces codes de contrôle d’E/S spécifiques au SPB (IOCTL) :
Un pilote de périphérique SPB utilise ces IOCTL pour effectuer des séquences de transfert d’E/S. Une séquence de transfert d’E/S est un ensemble ordonné de transferts de bus (opérations de lecture et d’écriture) qui est exécuté comme une seule opération atomique de bus. Pour plus d’informations sur ces IOCTL, veuillez consulter I/O Transfer Sequences.
Le pilote de contrôleur SPB pour un contrôleur SPB particulier peut prendre en charge des IOCTL personnalisés qui exécutent des fonctions spécifiques au matériel. Ce sont des IOCTL que SpbCx ne gère pas et que le fournisseur de matériel du contrôleur SPB prend en charge pour le bénéfice des pilotes de périphériques SPB qui doivent effectuer des opérations spécifiques au matériel. Si un pilote de périphérique SPB envoie un IOCTL que ni SpbCx ni le pilote de contrôleur SPB ne reconnaissent, aucune opération n’est effectuée et la demande d’E/S est complétée avec une valeur de statut d’erreur de STATUS_NOT_SUPPORTED.
Le pilote d’un périphérique connecté via SPB est généralement soit un pilote User-Mode Driver Framework (UMDF) soit un pilote Kernel-Mode Driver Framework (KMDF). Pour envoyer une demande de lecture, d’écriture ou d’IOCTL à un périphérique connecté via SPB, un pilote UMDF appelle une méthode telle que IWDFIoRequest::Send. Un pilote KMDF appelle une méthode telle que WdfIoTargetSendReadSynchronously, WdfIoTargetSendWriteSynchronously, ou WdfIoTargetSendIoctlSynchronously.
Pour des exemples de code montrant comment envoyer des demandes d’E/S aux périphériques connectés via SPB, consultez les rubriques suivantes :
Ressources matérielles pour les pilotes de périphériques SPB en mode utilisateur
Ressources matérielles pour les pilotes de périphériques SPB en mode noyau