PCI协议(一)
PCI協議
- PCI基本協議
- 什么是PCI?
- PCI總線接口及傳輸協議
- PCI Bus波形
PCI基本協議
什么是PCI?
PCI是一種總線協議,目PCI-E的使用范圍很廣,而PCI是早于PCI-E的基本協議,很多主流的CPU架構中同樣在使用。
PCI的工作頻率有:33MHz,66MHz和133MHz三種;總線位寬有:32bit和64bit兩種,所以說PCI可以支持不同的工作帶寬。
PCI總線接口及傳輸協議
| AD[31:0]/AD[63:0] | t/s | 數據和地址線 ,用作傳輸地址和數據,位寬為32bit或者64bit |
| C/BE[3:0]/C/BE[7:0] | t/s | 用于傳輸command和byte enable,由于地址線可能為64bit,所以BE需要支持8bit位寬 |
| PAR/PAR64 | t/s | 校驗位,奇偶校驗 |
| FRAME# | s/t/s | 低有效,由高變低表示一組數據的傳輸開始 |
| IRDY# | s/t/s | 低有效,表示master準備好傳輸數據 |
| TRDY# | s/t/s | 低有效,表示slave準備好發送數據 |
| STOP# | s/t/s | 低有效,表示slave請求master停止當前的transaction |
| LOCK# | s/t/s | 低有效,這個不是太懂。。 |
| DEVSEL# | s/t/s | 作為input,表示device被選中,作為output表示device解碼之后發現自己被選中 |
| IDSEL | input | 用作configuration write或者read的device的選擇信號 |
| PERR# | s/t/s | 表示奇偶校驗錯誤 |
| SERR# | o/d | 表示重大錯誤,是open drain信號類型 |
| REQ# | t/s | 表示device向仲裁請求占用總線 |
| GNT# | t/s | 表示device被仲裁授權 |
信號中帶#表示低有效。
對于open drain類型的信號:同一條總線上所有device共同驅動,只要有一個device有效,那么信號輸出為有效。
t/s也就是三態信號,沒有device驅動時就是高阻狀態。
s/t/s信號是sustained tri-state信號,就是device釋放這個信號之前必須要先拉高為1再釋放為z。
PCI Bus波形
上圖是基本讀操作:
2T:
FRAME# 從1變0,AD傳輸讀地址,C/BE傳輸command;
3T:
turn_around, 此時C/BE為byte_enable,slave可以根據byte_enable準備數據;
4T:
IRDY,TRDY同時有效,表示slave將read data返回給了master.
5T:
IRDY有效,表示master還有數據需要讀取,TRDY無效,表示slave沒有準備好數據;
6T:
IRDY,TRDY同時有效,表示完成了1T數據的傳輸;
7T:
IRDY無效,TRDY有效,插入wait cycle;
8T:
FRAME# 無效,表示這是master傳輸的最后1T數據。
turn_around: 同一條bus可能被很多device驅動,turn_around 就是用于不同device之間的轉換。
wait :IRDY或TRDY無效,傳輸暫停。
可預取:可預取的概念,對讀transaction的影響很大,第一:什么叫可預取?可預取就是表示當前的這個存儲區域多次的讀操作不會造成不可挽回的影響。比方說FIFO,如果我需要讀1個data,device讀3個data,那么就會造成2個data的損失。第二:可預取對讀transaction的影響?首先要明確,pci協議發起一筆交易,只提供了讀地址并未提供讀長度,也就是說slave并不知道master要讀多少數據。針對不可預取的區域,每次slave都只讀一個data(并且在BE信息有效后去讀), 如果master沒有將Frame置為1(表示還有數據需要傳輸),slave就會插入wait,之后再去讀address+1處的數據,就會大大降低讀數據的速度。如下圖。
上圖是基本寫操作:
2T:
FRAME# 從1變0,AD傳輸讀地址,C/BE傳輸command;
3T:
傳輸第1T數據;
4T:
傳輸第2T數據;
5T:
wait state;
6T:
wait state;
7T:
wait state;
8T:
FRAME# 無效,表示這是master傳輸的最后1T數據。
注意以下問題:
master需要傳輸3T數據,那么在5T時,為什么沒有將FRAME#拉高表示還剩最后1T數據?
這是因為5T時,IRDY無效,如果FRAME也無效,那么總線會進入IDLE狀態,仲裁可能會在下一T將控制權交給其他的device.
在5T時,AD線的data還未準備好,但是C/BE線上的byte_enable以及準備好了,這是因為spec中規定即使master要進入wait狀態,也不能延遲byte_enable的輸出。
后續還會整理PCI中的產銷模型,報錯機制和配置空間等。
總結
- 上一篇: PCI Express 协议基础
- 下一篇: vue启动报错Module build