使用 I2C 来与子设备通信

在 Windows XP 及更高版本中,即插即用管理器枚举视频适配器的子设备后,微型端口驱动程序可以使用 I²C 协议在 I2C 总线上与适配器的子设备进行通信。 I²C 总线上这些设备的微型端口驱动程序和 WDM 驱动程序之间的通信可以通过微型端口驱动程序 (公开的软件接口进行 ,如与子设备的驱动程序 通信) 中所述。 微型端口驱动程序可以通过视频端口驱动程序公开的新硬件接口,在 I²C 总线上的这些设备之间启动物理通信。 如果微型端口驱动程序需要 I²C 主设备 (通常是图形芯片) 通过 I²C 总线读取或写入物理子设备,则可以使用视频端口驱动程序的 VideoPortQueryServices 例程提供的硬件 I²C 接口。 请注意,通过 I²C 总线的这种通信仅限于同一 I²C 总线上的硬件设备。 强烈建议微型端口驱动程序编写器将这些例程用于所有此类通信。

当视频适配器具有没有 WDM 驱动程序的组件时,这种通信模式也很有用。 例如,视频适配器可能有用于将视频图像发送到数字平板的子板或线路。 在这种情况下,微型端口驱动程序可以利用 VideoPortQueryServices 提供的硬件 I²C 接口,通过 I²C 总线将命令发送到该线路。

说明通过 Inter-Integrated 线路 (I2C) 接口与子设备通信的关系图。

上图演示了微型端口驱动程序如何在 I²C 总线上的两个硬件设备之间启动通信。

若要利用视频端口的 I²C 例程,微型端口驱动程序必须查询视频端口驱动程序以获取 I²C 接口。 为此,微型端口驱动程序必须分配 VIDEO_PORT_I2C_INTERFACE 结构,并初始化其前两个成员 (SizeVersion 成员) 适当值。 然后,微型端口驱动程序调用视频端口驱动程序的 VideoPortQueryServices 例程,将 servicesType 参数设置为 VideoPortServicesI2C,并将 pInterface 参数设置为部分初始化的 VIDEO_PORT_I2C_INTERFACE 结构。

如果成功调用 VideoPortQueryServices ,则视频端口驱动程序将填充VIDEO_PORT_I2C_INTERFACE结构的其余成员,包括四个 I²C 例程的地址: I2CStartI2CStopI2CReadI2CWrite

I2CStartI2CStop 分别用于启动与子设备的通信,以及终止与子设备的通信。

I2CRead 从子设备读取指定数量的字节; I2CWrite 向其写入指定数量的字节。