1 - APB引言:
首先考慮一下以下的場景:

有一個水果店,只賣三種水果,分別是草莓、藍莓和蘋果。水果店按照客人購買量進行 水果的進貨 。 廠商根據水果店的要求 ,提供對應數量的水果并 運送到水果店 。
每次交易如下:
水果店根據需求使用****大喇叭廣播 自己的訂單需求 ,說出想要訂貨的數量, 對應廠商提供水果上門 ,水果店簽收。
使用這條水果運輸總線類比AMBA總線的APB****總線:
概念1: 主機(Master)
訂單的發起只能由 水果店發起 ,所以水果店在這條水果運輸總線里面運輸水果占有主動地位。
類比:
在APB總線里面,數據的傳輸只能由主機發起,其他部分響應主機操作。
概念2:從機(Slave)
當水果店發起訂單之后,和訂單匹配的廠家需要 提供對應的水果送到水果店 。這里面的廠家 只能根據要求送水果 ,自己不能隨便向水果店送水果(沒有主動的權限)。
類比:
在APB總線里面,數據的回復由從機完成,從機 只能完成主機發起的操作 ,自己不能發起操作然后完成操作。
概念3:單主機(Single Master)
在這條水果運輸總線里面,當前只有一個水果店,也只有這個水果店可以發起訂單需求,所以在 這條水果運輸總線里面,只有一個主機(按上圖來說)。
類比:
在APB總線里面, 有且只有一個主機可以連接到APB總線接口 ,其他的只能連接從機(外設),所以 APB總線只支持單主機模式 。
概念4:總線協議(Bus Protocol)
在這條水果運輸總線里面,水果店按照自己的需求,發起訂單,廠商提供水果,水果店確認收到 。 這一個完整的流程以及順序被稱為水果總線在傳輸水果的協議。
類比:
在APB總線里面,主機先發起要訪問的外設地址,外設根據要求返回數據,主機收到數據,這一個完整的流程被稱為APB總線協議。
所以我們可以根據上面得出 ( 單主機 ) 總線的正式概念 :
總線是被總線上所有的部件所共享的一組通路(連線),對于單主機來說,如果該主機想要與其中的外設部件進行通信(獲得數據),需要將地址(廠商名字)、數據(水果)、命令(進貨還是退貨)放到總線上,其他的從機部件對總線上的數據進行偵聽,檢查地址數據和命令的是否與自己相關,然后 相關部件做出響應 。
概念5: 命令總線、數據總線、地址總線
在這條水果運輸總線里面,水果店按照自己的需求,使用大喇叭發出進貨還是退貨(命令)、哪個廠家(地址)、退貨的水果或者進貨的水果(數據)。
類比:
在APB總線中,有地址線(PADDR),命令線(PWRITE、PENABLE、PESEL)和數據線(PRDATA、PWDATA)。
PS:舉的例子和APB不是一一完全對應,但是表達的意思相同
2 - APB總線協議詳解:
2-1 APB在SOC內使用的部分:
如圖:

CPU : CPU是操作的發起者,CPU發起讀寫外設數據的操作。
APB_Interconnect :根據上文所說的總線協議和傳輸信號的要求,構建出來的設計實體,該實體接收CPU發出的數據和指令,然后廣播到每一個外設部件。
**SLAVE:對APB_interconnect輸出數據和指令進行響應。
**
Q1 : 是否可以不需要APB_interconnect,APB_Interconect的作用是什么?
如上圖,當CPU只有一個外設,那么直接可以和外設相連,不需要APB_Interconect。此時CPU的發出的指令和操作只會發給URT0,不需要地址來仲裁。如下圖:

但是當CPU需要連接多個外設的時候(CPU只管發出地址和命令),根據 CPU地址范圍分配表 :
(1)APB_Interconect對每一個外設設置地址,然后APB_Interconect根據CPU發出的地址,選中對應地址的外設,把CPU的地址和指令傳輸到該外設 [地址路由仲裁]。
結論: 是否需要APB_interconnect根據應用而定 ,如果只是單個的外設連接CPU(很少出現),可以直接連接CPU和外設通過APB總線。不需要APB_Interconect, 但是當外設數目變多 ,自然而然的就引入了 不同外設的區分, 所以當多個外設的時候,需要引入APB_Interconect來做這些相關的處理。
用水果店類比:水果店用大喇叭發出訂單,所有的水果廠家進行偵聽,然后響應訂單,**或者假如水果廠家沒有偵聽裝置,可以在水果店和水果廠家之間加一個Interconect,**這個Interconect的作用是當收到某一個廠家的名字時,根據 廠家名字和地址的關系 ,把需求 單獨發送給對應的廠家,專門通知供應廠家 (也就是選中外設)。

2-2 APB總線接口: (AMBA APB 2.0)
| 系統信號 |
|---|
| PCLK |
| PRESETN |
| 地址總線 |
| PADDR |
| 命令總線 |
| PSELx |
| PENABLE |
| PWRITE |
| 數據總線 |
| PRDATA |
| PWDATA |
根據上圖,結合之前的類比和概念我們基本就可以知道APB該怎么運行。
2-3 APB Bridge示意接口(APB_Interconect)
根據AMBA APB手冊,截取APB Bridge接口:

圖左邊的接口System Bus Slave Interface,連接APB 主機(即上面的CPU),這個接口也是APB完整的接口,包含上面舉例的信號。圖右邊和左下面的接口連接多個SLAVE, 其中PSELn有多個 ,每個對應不同的SLAVE。其他信號對于SLAVE是一致的,因為PSELn已經可以選中不同的SLAVE來接收傳輸的共享信號了。
2-4 APB BUS時序圖(AMBA APB 2.0手冊)
寫傳輸:

如上時序圖,主機在T2時刻把所要訪問的 地址,命令和數據全部放到APB總線上 ,沿著組成APB的接口的金屬線 傳播到從機接口處 。在T3時刻, 從機發現自己的PSEL信號為高 ,就知道 主機選擇它來處理數據的寫操作 ,此時從機內部準備好處理數據的準備動作,在T4時刻,從機 完成總線上數據采樣并進行內部數據處理 。
WriteEnable = PSEL & (!PENABLE) & PWRTIE ;
或者
WriteEnable = PSEL & PENABLE & PWRTIE ;
always @ (posedge PCLK or negedge PRESETn)
begin
if(~PRESETn)
begin
reg_paddr <= 'h0 ;
reg_pwdata <= 'h0 ;
end
else if(WriteEnable)
bein
reg_paddr <= PADDR ;
reg_pwdata <= PWDATA ;
end
end
TODO:
外設內部處理數據
讀傳輸:

如上時序圖,主機在T2時刻把所要訪問的 地址,命令和數據全部放到APB總線上 ,沿著組成APB的接口的金屬線 傳播到從機接口處 。在T3時刻, 從機發現自己的PSEL信號為高 ,就知道 主機需要它內部的數據(PWRITE ==0) ,此時從機內部準備好 返回數據并把返回的數據放在數據總線上 ,在T4時刻,主機 完成總線上數據采樣得到需要的數據 。
ReadEnable = PSEL & (!PENABLE) & (!PWRTIE)
always @ (posedge PCLK or negedge PRESETn)
begin
if(~PRESETn)
begin
reg_paddr <= 'h0 ;
reg_prdata <= 'h0 ;
end
else if(ReadEnable)
bein
reg_paddr <= PADDR ;
reg_prdata <= 外設內部產生的數據 ;
end
end
assign PRDATA = reg_prdata ;
2-5 APB BUS的優缺點:
優點:設計簡單,時序簡單,用在不需要高性能總線的外設上。
**缺點:每個數據的傳輸都需要兩個時鐘周期,這樣的話,APB BUS滿載的帶寬也只有50%,帶寬利用率不高。
**
-
主機
+關注
關注
0文章
1060瀏覽量
36816 -
總線
+關注
關注
10文章
3050瀏覽量
91819 -
apb2
+關注
關注
0文章
4瀏覽量
1617
發布評論請先 登錄
ARM總線協議AMBA中AHB、APB的區別與聯系
AMBA、APB、AHB簡介
基于AMBA APB總線NandFlash控制器的設計
APB總線的應用框圖及接口信號
數字IC驗證:ARM總線協議AMBA中AHB、APB的簡介、區別與聯系
STM32菜鳥學習手冊——AMBA、APB、AHB簡介
AMBA總線—apb簡介
聊聊AMBA總線-APB
評論