在APB2協議中,定義了set up stage和access stage;
定義兩個stage其實就相當於定義兩個時鍾周期。因為APB的slave通常來說對應peripheral的registers,訪問這些slave registers(control,status,write/read data)兩個clock cycle就夠了。對於status register而言是軟件輪詢的方式(每次訪問同樣是兩個clock cycle)
下圖是一個APB2的讀操作的例子, 因為PWRITE=0. Set up stage在T2時刻(因為PSEL=1, PENABLE=0),access stage在T3時刻(因為PSEL=1,PENABLE=1),讀數據是在T3時刻返回的。
圖: APB2的讀時序
圖:APB3的寫時序
可以看到PREADY信號中的access是被延長了的,在PREADY為低電平的收,外設沒有准備好被寫數據,直到PREADY為高的時候,才能夠寫數據,相應的PSEL和PWDATA都被延長了。
圖:APB3的讀時序
APB3是有error信號的,在access的最后一個階段給出,如果有eeror的話,PREADY也PSLVERR都必須為1。對master而言,可以在這幾個信號都為1的時候,去采集PSLVERR信號。
APB3相較於APB2多了PREADY和PSLVERR兩個信號。上文提到APB2,系統通常是通過軟件的方式去輪詢Peripheral的status register(兩個clock cycle),APB3加了硬件的解決方法,Slave通過PREADY信號直接來告訴master現在Slave已經READY了,可以接受讀寫操作,如果此時不READY,那么master就要wait到它Ready,這樣就不需要軟件時刻去輪詢status register了。對於PSLVERR而言,加入了Slave反饋給master error response功能。
APB4比APB3多了什么信號PPROT和PSTRB信號。隨着架構的不斷發展以及對系統安全性的重視,在新的系統中通常會有security的要求,那么APB4也需要演進,PPROT信號主要就是為了表示當前的這個訪問/transaction是secure的還是non-secure的,從而和整個系統的security保持一致性。PSTRB的信號的加入,能夠使APB對某個byte進行讀寫操作。因為即使傳輸的是32位的信號,但是可能只有部分byte是有效的,用PSTRB的每一個bit來代表每個32位中的4個byte哪些是有效的。