共用方式為


SerCx2-Managed 序列埠上裝置的周邊驅動程式

一般而言,SerCx2 所管理的序列埠會永久連線到周邊裝置。 此裝置是由將 I/O 要求傳送至序列埠的周邊驅動程式所控制。 這些要求會從裝置來回傳輸資料,並設定序列埠的狀態。 周邊驅動程式所傳送的 I/O 要求會由 SerCx2 和相關聯的序列控制器驅動程式共同處理。

通常,序列控制器會包含在晶片 (SoC) 集成線路上的系統。 可能連接到 SoC 晶片上序列控制器之序列埠的周邊裝置範例包括 GPS、無線區域網路、相機和藍牙裝置。

串列連線周邊裝置的周邊驅動程式通常是 核心模式驅動程式架構 , (KMDF) 或 使用者模式驅動程式架構 (UMDF) 驅動程式。 若要與此裝置通訊,周邊驅動程式必須先開啟與序列控制器的邏輯連線,並接收驅動程式可以傳送 I/O 要求的檔案控制碼。 如需詳細資訊,請參閱 開啟 SerCx2-Managed 序列埠

此頁面上

序列驅動程式架構

下列區塊圖顯示構成周邊裝置 () 圖表底部之周邊裝置 (之間的軟體和硬體層,以及此裝置的周邊驅動程式 (圖表頂端) 。 在此範例中,周邊裝置會連接到序列控制器上的埠,以及 GPIO 控制器上的中斷針腳。

此圖顯示 SerCx2 受控序列埠上周邊裝置的軟體和硬體層。

此範例中的周邊驅動程式是 UMDF 驅動程式,可將 I/O 要求傳送至周邊裝置。 這些要求會透過圖表左側顯示的通訊路徑移動。 要求是由 SerCx2 和序列控制器驅動程式處理。 周邊驅動程式可以要求 I/O 作業,以設定序列埠的硬體組態 (例如,變更傳輸速率) ,以及透過序列埠從周邊裝置傳送資料。 如需詳細資訊,請參閱 I/O 要求路徑

來自周邊裝置的中斷會透過上圖右側的通訊路徑向上移動。 如圖右下角所示,來自周邊裝置的中斷針腳會連接到一般用途 I/O (GPIO) 控制器上的針腳。 此 GPIO 針腳已設定為接收來自周邊裝置的插斷訊號。 在 SoC 型硬體平臺中,GPIO 控制器經常扮演可程式化插斷控制器的角色。 如需詳細資訊,請參閱 中斷路徑

圖表中以灰色顯示的兩個區塊是系統提供的模組。 GPIO 架構延伸模組 (GpioClx) 可從 Windows 8 開始提供。 如同 SerCx2,GpioClx 是 KMDF 的延伸模組。 GpioClx 會執行各種 GPIO 控制器通用的函式。 GpioClx 可與 GPIO 控制器驅動程式搭配運作,以管理 GPIO 控制器中的所有硬體特定作業。 如需詳細資訊,請參閱 GPIO 驅動程式支援概觀

I O 要求路徑

為了將資料傳輸到周邊裝置,周邊驅動程式會將寫入 (IRP_MJ_WRITE) 要求傳送至序列控制器。 若要從周邊裝置接收資料,周邊驅動程式會將讀取 (IRP_MJ_READ) 要求傳送給序列控制器。

此外,Windows 會定義一組裝置 I/O 控制要求, (IOCTLs) ,周邊驅動程式可用來執行序列控制器特有的各種 I/O 控制作業。 以下是周邊驅動程式可以要求的 I/O 控制作業範例:

  • 設定序列埠傳輸和接收資料的傳輸速率。
  • 設定讀取和寫入要求的逾時間隔。
  • 在周邊驅動程式接收通知的序列埠上指定一組硬體事件。

SerCx2 支援許多與收件匣序列驅動程式、Serial.sys 和第 1 版序列架構延伸模組相同的序列 IOCTLs (SerCx) 。 其他資訊:

中斷路徑

序列驅動程式架構 圖所示,周邊裝置會使用 GPIO 針腳將裝置中斷傳送至周邊驅動程式。 為了回應周邊裝置的中斷訊號,GPIO 控制器會發出硬體中斷訊號, (稱為 主要 中斷) 處理器。 作業系統會將此中斷導向 GpioClx 的 ISR。 接下來,GpioClx 會識別哪一個 GPIO 針腳造成中斷,並查閱全域系統中斷 (GSI) 識別碼, (從周邊裝置呼叫 次要 中斷) 。 GpioClx 會將 GSI 提供給 HAL,而 HAL 會呼叫周邊驅動程式的 ISR。 為了處理中斷,周邊驅動程式通常會透過 SerCx2 和序列控制器驅動程式,將一或多個 I/O 要求傳送至周邊裝置。 如需主要和次要中斷的詳細資訊,請參閱 GPIO 中斷

GPIO 中斷只是周邊驅動程式在周邊裝置中接收硬體事件的通知的一種方式。 另一種方式是讓周邊驅動程式在序列埠發生特定類型的硬體事件時,向 SerCx2 和序列控制器驅動程式要求通知。 例如,當序列控制器從周邊裝置接收序列資料時,周邊驅動程式可以要求收到通知。 若要要求這些通知,周邊驅動程式會將 IOCTL_SERIAL_SET_WAIT_MASK 要求傳送至周邊裝置,以指定要監視的事件集,然後傳送 IOCTL_SERIAL_WAIT_ON_MASK 要求以開始接聽這些事件。 這些要求是由 SerCx2 處理,具有來自序列控制器驅動程式的說明。 如需周邊驅動程式可以監視之事件種類的詳細資訊,請參閱IOCTL_SERIAL_SET_WAIT_MASK中所述的 SERIAL_EV_XXX

不過,序列控制器只能在處於 D0 裝置電源狀態時偵測硬體事件。 如果序列控制器處於低電源狀態,周邊驅動程式就無法依賴來自序列控制器的通知,知道設備設備何時有新的資料可供驅動程式讀取。 在此情況下,周邊裝置必須 (或透過 GPIO 針腳) 喚醒訊號傳送中斷訊號。 GPIO 控制器會耗用非常少的電力,而且通常會在大部分其他裝置進入低電源狀態之後保持作用中。