• 沒有找到結果。

第四章 硬體系統架構

4.2 PCI 介面

(一) PCI 介面簡介

Intel 公 司 於 1992 年 制 定 了 PCI(Peripheral Component Interface)匯 流 排 規 格 , 以 確 保 市 場 上 各 種 不 同 功 能 處 理 器 區 域 匯 流 排 架 構 上 的 相 容 性 (目 前 最 新 版 本 為 3.0 版 )。 PCI 匯 流 排 上 裝 置 可 彼 此 間 或 者 與 系 統 記 憶 體 間 快 速 存 取 。 所 有 匯 流 排 讀 寫 的 傳 輸 皆 能 用 burst 方 式 來 執 行 , 由 匯 流 排 主 控 端 (Bus Master)來 決 定 burst 的 長 度 。 在 資 料 交 易 開 始 時 , 被 控 端 (Target) 會 被 指 定 起 始 位 址 與 交 易 型 態 , 但 不 告 知 Target 其 傳 輸 長 度 , 當 Master 準 備 傳 輸 資 料 時 , 會 通 知 Target 此 資 料 是 否 為 最 後 一 筆 (由 FRAMEn 訊 號 告 知 ),傳 完 最 後 一 筆 交 易 即 完 成 。 效 率 上 明 顯 較 ISA 或 是 VESA 等 介 面 好 , 現 今 已 成 為 PC 準 系 統 標 準 匯 流 排 規 格 。 而 顯 示 介 面 (AGP)可 視 為 PCI 介 面 之 延 伸,主 要 提 供 高 頻 寬 給 予 圖 形 介 面 所 使 用 , 而 現 今 最 新 的 顯 示 介 面 PCI-Express 亦是以 PCI 匯 流 排 為 基 礎 之 延 伸 介 面 。

PCI 裝 置 可 分 類 為 被 控 端 (Target)、 主 控 端 (Master)、 初 始 端 (Initator)三 種 。 一 般 PC 準 系 統 中 , 初 始 端 與 主 控 端 可 視 為 同 一 裝 置 (Initator 亦 具 備 Master 之 權 限 ),都 可 以 控 制 PCI 匯 流 排 , PC 準 系 統 中 之 北 橋 晶 片 通 常 內 定 為 初 始 端 (Initator), PCI 匯 流 排 可 支 援 多 Master 匯 流 排 , 權 限 判 別 由 匯 流 排 仲 裁 者 (bus arbiter)亦即是 Initator 判 定 。 若 匯 流 排 上 無 相 關 PCI Master 功 能 晶 片 之 匯 流 排 , 則 系 統 內 僅 有 之 主 控 端 (Master)即 為 初 始 端 (Initator)。

業 系 統 控 制 北 橋 晶 片 作 為 初 始 端 (Initator) 及 主 控 端 號 (FRAMEn、 TRDYn、 IRDYn、 STOPn、 DEVSELn、 IDSEL 等 )、 以 及 Error 訊 號 (PERRn、 SERRn)與 系 統 訊 號 (CLK、 RSTn)等 。 另

PCI 接 腳 邏 輯 定 義 可 分 輸 入 接 腳、輸 出 接 腳、三 態 邏 輯 接 腳 (Tri-State)、 保 持 式 三 態 邏 輯 接 腳 (Sustain Tri-State)與 開 汲 極 (Open Drain)等 五 種 型 態 。 保 持 式 三 態 邏 輯 接 腳 操 作 需 特 別 注 意 , 此 接 腳 只 能 被 一 個 裝 置 驅 動 , 不 驅 動 訊 號 時 , 必 須 拉 高 訊 號 一 個 時 脈 週 期 後 浮 接 , 此 外 如 同 開 汲 極 一 樣 , 還 必 須 增 加 提 升 電 阻 使 得 再 浮 接 時 仍 保 持 高 電 壓 準 位 。 由 於 晶 片 包 裝 接 腳 有 限 , 故 晶 片 外 匯 流 排 規 格 多 採 雙 向 多 工 型 態 共 用 接 腳 以 節 省 pin 腳 使 用 。 而 此 類 接 腳 在 換 邊 驅 動 時 需 要 一 段 兩 邊 都 不 驅 動 時 間 呈 現 開 汲 極 狀 態 , 此 時 稱 為 反 轉 週 期 (因 Sustain Tri-State 型 態 所 致 )。 許 多 PCI 匯 流 排 訊 號 亦 屬 此 類 , 如 位 址 與 資 料 共 用 接 腳 (AD[32:0])、 資 料 致 能 與 命 令 共 用 接 腳 (CBEn [3:0])等 。

本 文 中 ” PCI Development Board” 所 使 用 到 的 PCI 訊 號 功 能 定 義 與 驅 動 規 則 於 4.3 中 再 作 詳 細 介 紹 。 關 於 其 他 PCI 匯 流 排 的 規 格 請 參 照 PCI Special Interest Group (PCI-SIG) 制 定 的 ” PCI Local Bus Specifiation,Revision 3.0 ” 文 件 [11]。

(三) PCI 驅動程序

對 PC 端 而 言 每 個 PCI 裝 置 都 有 三 個 識 別 編 號 , 分 為 匯 流 排 編 號 ( bus number)、 裝 置 編 號 ( device number)、 功 能 編 號 ( function number)。 在 PCI 的 規 格 中 , 允 許 系 統 最 多 可 接 256 組 匯 流 排 ( PC 上 只 使 用 一 組 ), 每 組 匯 流 排 最 多 可 接 32 種 裝 置 , 而 每 種 裝 置 可 以 有 多 達 8 項 功 能 。 每 項 功 能 的 編 號 可 以 是 一 組 16-bit 的 二 進 位 碼 數 值,或 是 由 兩 個 8-bit 的 二 進 位 碼 所 組 成 的 數 值 。

每 個 裝 置 的 硬 體 電 路 必 須 要 能 回 應 關 於 三 組 定 址 空 間

( address space ) 的 查 詢 , 分 別 是 : 記 憶 體 位 置 ( memory location )、 I/O 埠 與 組 態 暫 存 器 ( configuration register)。 前 兩 組 定 址 空 間 由 同 一 PCI 匯 流 排 上 的 所 有 裝 置 共 享,也 就 是 說,當 你 在 存 取 某 記 憶 體 位 置( 或 某 I/O 埠 ) 時 , 所 有 的 裝 置 會 同 時 看 到 該 匯 流 排 週 期 ( bus cycle); 而 組 態 空 間 ( configuration space) 是 依 據 擴 充 槽 ( slot) 的 位 置 而 來 的 , 每 擴 充 槽 都 各 有 一 專 用 的 啟 用 線 路 ( enable wire ), 供 規 劃 組 態 時 使 用 。 因 此 , PCI 控 制 器 ( PCI controller) 可 以 在 某 個 時 間 點 存 取 特 定 的 介 面 卡 , 而 不 會 產 生 位 址 衝 突 的 狀 況 。 每 個 PCI 裝 置 擁 有 4 支 中 斷 接 腳 , 主 機 板 的 電 路 會 將 這 些 接 腳 連 到 處 理 器 的 IRQ 線 路 。 雖 然 處 理 器 的 IRQ 線 路 有 數 量 的 限 制 , 但 由 於 裝 置 可 共 用 相 同 的 中 斷 訊 號,因 此 PCI 介 面 卡 的 數 量 可 以 不 受 IRQ 線 路 數 量 的 限 制 。

在 PCI 匯 流 排 中 , 由 於 I/O 空 間 採 用 32-bit 的 位 址 匯 流 排 , 所 以 可 定 址 的 空 間 高 達 4 GB。 在 記 憶 體 定 址 空 間 方 面 , 則 採 用 32-bit 或 64-bit 方 式 位 址 。 通 常 每 個 裝 置 都 有 其 獨 特 的 位 址 , 但 是 也 有 可 能 發 生 兩 個 裝 置 有 相 同 的 位 址 , 造 成 兩 邊 都 無 法 順 利 運 作 。 所 以 在 規 劃 組 態 的 時 候 設 定 為 系 統 指 定 位 址 , 就 可 以 重 新 對 應 ( remap) PCI 裝 置 所 提 供 的 I/O 與 記 憶 位 址 區 。 而 在 開 機 時 就 是 用 這 個 機 制 來 對 裝 置 初 始 化 , 以 避 免 位 址 衝 突 。 至 於 這 些 區 域 的 位 址 到 底 被 重 新 對 應 到 何 處 , 則 可 以 在 組 態 空 間 內 讀 到 相 關 資 訊 , 驅 動 程 式 只 要 依 據 從 組 態 暫 存 器 所 取 得 的 資 訊 , 就 能 安 全 地 存 取 週 邊 了 。

在 PCI 組 態 空 間 中 , 每 個 裝 置 有 256 bytes 的 空 間 來 存

放 其 功 能 資 訊 , 而 且 組 態 暫 存 器 的 佈 局 也 有 標 準 規 範 。 每 種 功 能 的 代 碼 是 4 bytes, 彼 此 不 會 重 覆 , 而 驅 動 程 式 可 以 利 用 裝 置 獨 特 的 代 碼 來 識 別 裝 置 。 總 之 , 可 以 用 實 體 的 排 列 方 式 來 找 出 裝 置 介 面 卡 , 然 後 再 找 出 對 應 的 組 態 暫 存 器 , 最 後 再 用 所 取 得 的 資 訊 來 識 別 PCI 裝 置,這 樣 即 可 進 行 後 續 的 操 作 。

在 系 統 開 機 階 段 PCI 裝 置 在 此 時 就 已 完 成 組 態 的 設 定 。 當 電 源 開 始 供 應 PCI 裝 置 時 , 其 實 硬 體 仍 處 於 關 閉 的 狀 態 , 也 就 是 說 , 裝 置 只 能 對 組 態 規 劃 ( configuration transaction) 作 回 應 , 因 此 當 開 啟 電 源 時 , 裝 置 沒 有 任 何 記 憶 體 或 I/O 埠 會 對 應 到 電 腦 的 定 址 空 間;而 每 一 種 裝 置 專 屬 的 特 性 , 像 是 中 斷 線 路 , 也 都 是 失 效 的 。 但 每 片 符 合 PCI 規 格 的 PC 主 機 板 , 一 定 會 配 備 內 含 PCI 功 能 的 韌 體

( firmware ), 例 如 BIOS 等 。 所 以 就 算 處 理 器 的 指 令 集

( instruction set) 沒 有 提 供 存 取 裝 置 組 態 空 間 的 能 力 時 , 韌 體 還 是 能 存 取 裝 置 所 屬 的 組 態 空 間 。

在 系 統 啟 動 時 , 韌 體 會 去 規 劃 每 個 PCI 週 邊 的 組 態 , 為 裝 置 所 需 的 任 何 位 址 空 間 配 置 一 個 安 全 的 地 方 。 在 此 之 後 , 每 當 裝 置 驅 動 程 式 存 取 裝 置,裝 置 的 記 憶 體 與 I/O 位 址 就 已 經 對 應 到 處 理 器 的 定 址 空 間 中 。 驅 動 程 式 也 可 修 改 預 設 安 排 方 式 。 當 作 業 系 統 (OS)載 入 Driver 到 記 憶 體 後 , 驅 動 程 式 的 初 始 碼 (initial code)會 藉 由 制 造 商 識 別 碼 (Vendor ID)、裝置識 別碼(Device ID)來呼叫 PCI BIOS 以發出找尋相關裝置的請求。同時 也利用類別碼(Class code)找尋該裝置是否存在(000000h 代表裝置不 存在,本例中類別碼 FF0000h 為不符合已定義類別裝置)。若同樣的制 造 商 識 別 碼 (Vendor ID)、裝置識別碼(Device ID)有一個以上時,

PCI BIOS 會將這些匯 流 排 編 號( bus number)、裝 置 編 號( device number )、 功 能 編 號 ( function number ) 傳 回 驅 動 程 式 , 而 後 驅 動 程 式 藉 由 呼 叫 PCI BIOS 的 服 務 (service)及 編 號 存 取 該 裝 置 的 組 態 空 間 以 得 知 須 配 置 的 資 源 。

本 例 中 PCI 裝 置 使 用 32 位 元 PCI 介 面 , 規 劃 為 被 動 端 (Target) , 工 作 頻 率 為 33MHz 。 其 開 機 初 始 組 態 暫 存 器

( configuration register ) 如 表 4.1 所 示 ( 位 址 空 間 全 部 256Byte, 只 有 前 64Byte 有 被 定 義 使 用 )。 驅 動 程 序 為 系 統 讀 取 裝 置 組 態 空 間 後 配 置 兩 塊 記 憶 體 空 間 與 一 個 中 斷 向 量 。 第 一 塊 記 憶 體 空 間 為 256Mbyte,主 要 作 為 記 憶 體 映 射 區 (存 放 擷 取 影 像 資 料 )。第 二 塊 記 憶 體 空 間 為 1Kbyte,規 劃 作 為 PCI 裝 置 之 控 制 命 令 暫 存 區 。 將 配 置 的 第 一 塊 記 憶 體 空 間 起 始 位 址 寫 回 Base Address Register 0 (BAR0) 組 態 暫 存 器 ( 位 址 13h~10h), 將 第 二 塊 記 憶 體 空 間 起 始 位 址 寫 回 Base Address Register 1 (BAR1)組 態 暫 存 器 (位 址 17h~14h), 如 此 即 算 完 成 記 憶 體 映 射 。 另 外 命 令 暫 存 器 (Command Register) 需 填 入 0142h ( 位 址 05h~04h) , 指 定 PCI 裝 置 功 能 ( only target memory access ), 最 後 再 將 中 斷 向 量 填 入 3Ch 位 置 , 如 此 即 算 完 成 PCI 裝 置 的 驅 動 。 完 成 驅 動 後 可 透 過 BAR0 與 BAR1 的 存 取 來 控 制 PCI 裝 置 的 動 作 。 應 用 程 式 將 擷 取 影 像 寫 入 BAR0 後 , 只 需 向 BAR1 寫 入 啟 動 命 令 , 車 道 偵 測 程 序 即 開 始 進 行 , 之 後 應 用 程 式 監 測 (讀 取 )BAR1 回 應 狀 態 可 知 程 序 執 行 完 成 , 之 後 再 從 BAR0 中 讀 回 偵 測 資 訊 偵 測 程 序 即 告 完 成 。

表 4.1 PCI 組 態 暫 存 器 初 始 狀 態 列 表

pci bus configuration register (開機初始狀態) Byte

Status Register Command Register 04H

04 20 00 00

Class Code Revision ID

08H

FF 00 00 01

BIST Header Type Latency Timer Cache Line Size

0CH 00 00 00 00

Subsystem ID Subsystem Vendor ID 2CH

00 00 00 00

Expansion ROM Base Address Register 30H

Maximum Latency Minimum Grant Interrupt Pin Interrupt Line 3CH

相關文件