Partager via


Utilisation d’I2C pour communiquer avec un appareil enfant

Sur Windows XP et versions ultérieures, une fois que le gestionnaire de Plug-and-Play a énuméré les appareils enfants d’une carte vidéo, le pilote miniport peut communiquer avec les appareils enfants de l’adaptateur sur un bus I2C à l’aide du protocole I²C. La communication entre le pilote miniport et les pilotes WDM pour ces appareils sur un bus I²C peut se produire via une interface logicielle exposée par le pilote miniport (comme décrit dans Communication avec le pilote d’un périphérique enfant). Le pilote miniport peut lancer une communication physique entre ces appareils sur le bus I²C au moyen d’une nouvelle interface matérielle exposée par le pilote de port vidéo. Si le pilote miniport a besoin du périphérique I²C master (généralement la puce graphique) pour lire ou écrire sur un appareil enfant physique via le bus I²C, il peut utiliser l’interface I²C matérielle fournie par la routine VideoPortQueryServices du pilote de port vidéo. Notez que cette communication sur le bus I²C est strictement limitée aux appareils matériels du même bus I²C. Les enregistreurs de pilotes miniports sont fortement encouragés à utiliser ces routines pour toutes ces communications.

Ce mode de communication est également utile dans les cas où une carte vidéo a des composants pour lesquels il n’existe pas de pilote WDM. Par exemple, un adaptateur vidéo peut avoir une carte fille ou un circuit qui est utilisé pour envoyer l’image vidéo à un écran plat numérique. Dans ce cas, le pilote miniport peut utiliser l’interface I²C matérielle fournie par VideoPortQueryServices pour envoyer des commandes à ce circuit via le bus I²C.

Diagramme illustrant la communication avec un appareil enfant via l’interface I2C (Inter-Integrated Circuit).

La figure précédente illustre comment un pilote miniport peut lancer la communication entre deux périphériques matériels sur un bus I²C.

Pour tirer parti des routines I²C du port vidéo, le pilote miniport doit interroger le pilote de port vidéo pour une interface I²C. Pour ce faire, le pilote miniport doit allouer une structure VIDEO_PORT_I2C_INTERFACE et initialiser ses deux premiers membres (les membres Size et Version ) aux valeurs appropriées. Le pilote miniport appelle ensuite la routine VideoPortQueryServices du pilote de port vidéo, en définissant le paramètre servicesType sur VideoPortServicesI2C et en définissant le paramètre pInterface sur la structure de VIDEO_PORT_I2C_INTERFACE partiellement initialisée.

Si l’appel à VideoPortQueryServices réussit, le pilote de port vidéo remplit les autres membres de la structure VIDEO_PORT_I2C_INTERFACE, y compris les adresses de quatre routines I²C : I2CStart, I2CStop, I2CRead et I2CWrite.

I2CStart et I2CStop sont utilisés, respectivement, pour lancer la communication avec l’appareil enfant et pour arrêter la communication avec celui-ci.

I2CRead lit un nombre spécifié d’octets à partir de l’appareil enfant ; I2CWrite y écrit un nombre spécifié d’octets.