1. APB介紹
APB(Advance Peripheral Bus)是AMBA總線的一部分。它是一個低成本的接口,是以最低功耗和減少端口複雜性為目标進行設計的。
APB接口用在低帶寬和不需要高性能總線的外圍裝置上。例如:UART,1248,鍵盤和滑鼠等。并且,可以用它來通路外圍裝置的可程式設計控制寄存器。
它的主要特性如下:
- 是非流水的
- 所有信号僅與時鐘上升沿有關(簡化了外圍裝置的內建設計流程)
- 每個事務至少需要兩個時鐘周期,無需等待周期和回應信号
- 隻有一個master——APB Bridge
- 控制邏輯簡單,隻有四個控制信号
- 可以和AXI和AHB進行連接配接
從1998年第一版至今共有3個版本。
- AMBA 2 APB:定義最基本的信号 interface, 讀寫 transfer, APB bridge, APB slave.
- AMBA 3 APB:增加定義信号 PREADY, PSLVERR 來完成對 wait state 和 Error reporting 的功能。
- AMBA 4 APB:增加定義信号 PPROT, PSTRB 來支援Transaction protection和 sparse data transfer 的功能。
2. 接口描述
Signal | Source | Width | Description |
---|---|---|---|
PCLK | 時鐘源 | 1 | 系統時鐘,傳輸發生在上升沿 |
PRESETn | 複位源 | 1 | 複位信号,低使能 |
PPORT | APB Bridge | 3 | 保護類型,該信号訓示事務的正常、特權或安全保護級别,以及該事務是資料通路還是指令通路。 |
PADDR | APB Bridge | 位址信号,最高可達32位 | |
PSELx | APB Bridge | 由APB bridge産生的信号,針對每一個Peripheral Bus Slave片選信号,表示x從機是否被選中 | |
PENABLE | APB Bridge | 1 | 使能信号,标記傳輸使能 |
PWRITE | APB Bridge | 1 | 讀/寫控制信号,高位寫,低為讀 |
PWDATA | APB Bridge | 32 | 寫資料 |
PREADY | Slave interface | 1 | 标記從機是否已将資料發送到總線,高為ready |
PRDATA | Slave interface | 32 | 讀資料 |
PSLVERR | Slave interface | 1 | 故障信号,高為發生故障 |
APB的讀寫資料總線是獨立的,都是32bit。因為它們沒有獨立的握手信号,是以不可能在同時發生資料傳輸。
3. 運作狀态
IDLE:這個是 APB 的預設狀态,也就是沒有傳輸時候的狀态;
SETUP:當需要進行一個傳輸的時候,APB 首先進入這個狀态;PSELx 信号首先拉高;總線僅僅在 SETUP 狀态停留一個時鐘周期,然後接着在下一個時鐘的上升沿進入 ACCESS 狀态;
ACESS:在 SETUP 狀态轉換到 ACCESS,PENABLE 信号被拉高;在 SETUP 狀态轉換到 ACCESS 狀态這段時間裡,address,write,select 和 write data 信号必須保持穩定;處于 ACESS 狀态下,如果 PREADY 為 0,會讓其繼續處于 ACCESS 狀态;否則,PREADY 為 1,如果還有傳輸則再次進入 SETUP -> ACCESS ,如果沒有傳輸,直接回到 IDLE;
4. 事務
4.1. Write transfer
4.1.2. With no wait states
4.1.1. With wait state
在寫等待狀态時:需要保持以下信号不能改變:
PADDR,PWRITE,PSEL,PENABLE,PWDATA,PSTRB,PPROT
建議位址和寫入信号在傳輸後不要立即改變,而是保持穩定,直到另一個通路發生。這降低了功耗。
4.1.3. Write strobe
PSTRB,使稀疏資料傳輸在寫資料總線上。每bit對應于寫資料總線的一個位元組。當斷言為HIGH時,訓示寫資料總線的相應位元組包含有效資訊。
4.2. Read transfer
4.2.1. With no wait states
4.2.2. With wait state
在讀等待狀态時:需要保持以下信号不能改變:
PADDR,PWRITE,PSEL,PENABLE,PPROT
4.3. Error respond
使用PSLVERR來對讀寫過程中産生的錯誤進行訓示。PSLVERR隻在APB事務的最後一周期被認為是有效的,也就是當PSEL,PENABLE,PREADY全部為高電平。
建議在PSEL,PENABLE,PREADY中任意一個為低電平時,将PSLVERR也保持為低電平。
接收錯誤的事務可能改變了外設的狀态,也可能沒有,這兩者都是可以接受的。當一個寫事務收到一個錯誤時,這并不意味着外圍裝置中的寄存器沒有被更新,接收錯誤的讀取事務可能傳回無效的資料。在發生讀資料錯誤時,也沒有必要把讀資料總線置為全0。
PSLVERR在外圍裝置中不是一定非要實作的,如果外設中不包含該引腳。APB Bridge對應的輸入被恒置為低電平。
4.3.1. PSLVERR的映射
當AXI和APB進行橋接時:讀操作産生的PSLVERR映射到AXI的RRESP[1]信号,寫操作産生的PSLVERR映射AXI到BRESP[1]信号。
當AHI和APB進行橋接時:讀寫PSLVERR都映射到AHB的HRESP[0]信号。
4.4. Protection unit support
為了支援複雜的系統設計,互連線和系統中的其他裝置通常都需要提供防止非法傳輸的保護。對于APB接口,這種保護是由PPROT[2:0]信号提供的。
Normal or privileged, PPROT[0]:LOW表示一個正常通路,HIGH表示一個特權級通路。這是一些master用來訓示其處理模式的。特權處理模式通常在系統中具有更進階别的通路。
Secure or non-secure, PPROT[1]:LOW表示一個安全通路,HIGH表示一個非安全通路。在處理模式需要更大程度差別的系統中使用。
Data or Instruction, PPROT[2]:LOW表示一個資料通路,HIGH表示一個指令通路。該訓示做為一個提示出現,并不是所有的情況下都是準确的。當一個通路是指令資料混合項時,預設情況下建議将其标記為一個資料通路,除非明确知道它是一個指令通路。
5. ISSUE
5.1. 什麼情況下會報ERROR?
PSLVERR是在PPORT之前引入的。
5.2. PPORT狀态不比對會報ERR嗎?
5.3. 連接配接到APB Bridge的PRDATA是多個還是一個?
參考文獻:https://blog.csdn.net/zhoutaopower/article/details/103729440
參考文獻:IHI0024C_amba_apb_protocol_spec.pdf