SerCx2 体系结构概述
SerCx2 与串行控制器驱动程序协同工作,以启用外围驱动程序与串行连接的外围设备之间的通信。 通常,串行控制器集成到芯片上的系统 (SoC) 芯片中,以便与 SoC 芯片外部但焊接到同一印刷电路板的外围设备提供低引脚数通信。
下图显示了串行连接的外围设备与此设备的驱动程序之间的通信路径。 此外设驱动程序在内核模式或用户模式下运行,并将 I/O 请求发送到外围设备连接到的串行端口。
SerCx2 和串行控制器驱动程序都在内核模式下运行,并通过 SerCx2 设备驱动程序接口 (DDI) 相互通信。 串行控制器驱动程序调用由 SerCx2 实现的驱动程序支持方法。 SerCx2 调用由串行控制器驱动程序实现的事件回调函数。
通常,串行控制器的硬件寄存器是内存映射的。 串行控制器驱动程序直接访问这些寄存器,以配置串行端口,以及从连接到串行端口的外围设备传输数据。 对于较长的数据传输,SerCx2 通常使用 DMA 传输 (上图) 未显示。
外围驱动程序打开与外围设备的逻辑连接所需的信息封装在一种称为 连接 ID 的特殊类型的硬件资源中。 有关详细信息,请参阅 串行连接的外围设备的连接 ID。
通常,只有驱动程序将 I/O 请求直接发送到串行控制器。 当用户模式应用程序需要与串行连接的外围设备通信时,设备的外围驱动程序充当应用程序和设备之间的中介。 如果应用程序需要将数据传输到外围设备或从外围设备传输数据,应用程序会将写入 (IRP_MJ_WRITE) 请求或读取 (IRP_MJ_READ) 请求发送到外围驱动程序,而外围驱动程序则通过向串行控制器发送相应的写入或读取请求来响应。 此外,外围设备驱动程序可以发送设备 I/O 控制请求 (IOCTL) 来配置串行端口。 有关 SerCx2 支持的 IOCTL 列表,请参阅 串行 I/O 请求接口。
将 I/O 请求发送到串行控制器的外围驱动程序是使用内核 模式驱动程序框架 (KMDF) 的内核模式驱动程序,或者是使用 用户模式驱动程序框架 (UMDF) 的用户模式驱动程序。 SerCx2 管理外围设备驱动程序发送到串行控制器的 I/O 请求队列。
为了响应读取或写入请求,SerCx2 会启动一个或多个 I/O 事务,以在请求中的串行控制器和数据缓冲区之间移动数据。 每个 I/O 事务使用编程的 I/O (PIO) 或 DMA 在请求中的串行控制器和数据缓冲区之间传输数据。 串行控制器驱动程序支持的 I/O 事务类型取决于串行控制器的硬件功能。 有关详细信息,请参阅 SerCx2 I/O 事务概述。