91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

FlexSPI外設對AHB Burst Read特性的支持

大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是FlexSPI外設對AHB Burst Read特性的支持

痞子衡之前寫過一篇關于FlexSPI LUT的文章 《從頭開始認識i.MXRT啟動頭FDCB里的lookupTable》,這個LUT機制是i.MXRT上能夠實現對串行NOR Flash進行AHB讀訪問的原因(也是程序能夠XiP原地執行的基礎)。那篇文章的最后留了一個小伏筆,即FlexSPI的Prefetch不使能,SEQ_CTL工作一次獲取的數據由AHB Burst Read策略決定,那么這個Burst Read策略到底是什么?今天痞子衡來跟大家好好聊一聊:

一、什么是Burst Read?

說起Burst Read概念,其實也沒啥玄機,中文直譯就叫突發讀取(其實有個更接地氣的翻譯:連續讀取),這個概念要跟Single Read(或者Random Read)對比來看。

對于一個NOR Flash器件而言,主設備(這里指i.MXRT)如果要讀取它的內容,必須按照手冊規定的讀時序,這個讀時序中肯定有我們要提供地址信息,這樣Flash器件才能知道該把哪個地方的數據送出來。在一次讀時序中(一個CS拉低期間,發送一次地址信息),Single Read就是讀取固定大小的數據(比如4bytes),而Burst Read可以靈活調整讀取數據的長度(一般來說用于一次讀取更長的數據)。

二、AMBA AHB支持哪些Burst Type?

前面講了,Burst Read可以靈活調整讀取數據的長度,即當前讀時序內,地址信息發送完后,主設備想讀多少byte數據相應輸出所需的SCK時鐘數即可(地址根據上次訪問按序自增),那么主設備是不是可以任意輸出SCK時鐘呢?一般情況下是的,這種就是典型的線性遞增類型(簡稱INCR)。

除了INCR類型外,還有另一種環繞類型(簡稱WRAP),這種類型下,主設備輸出SCK時鐘并不總是得到線性地址遞增的數據,而是在一個指定長度數據塊里不斷循環,這種類型應用場景更多在RAM型器件(比如用于棧)。

下表是ARM官方 AMBA Specification 第 3.6 Burst operation 小節里關于Burst Type全部定義與解釋。我們主要關注INCR類:INCR4/8/16一次訪問長度是4/8/16 * data block (具體data block大小由HSIZE[2:0]決定),INCR即不定長度。

在 AMBA Specification 里找到關于HSIZE[2:0]定義如下,這個HSIZE是由AHB master根據訪問自動設置的。

下圖是典型的INCR型不定長Burst訪問時序圖,圖中共有兩次INCR型Burst:第一次INCR Burst共讀取4bytes,Burst開始于HADDR = 0x20處,共發起了HSIZE = Halfword的兩次傳輸;第二次INCR Burst共讀取12bytes,Burst開始于HADDR = 0x5c處,共發起了HSIZE = Word的三次傳輸。

Note: HTRANS共有四種傳輸類型:IDLE、BUSY、NONSEQ、SEQ,前兩種顧名思義,NONSEQ代表一次Burst的首次傳輸,SEQ代表一次Burst的后續傳輸。

三、FlexSPI對AHB Burst Read的支持

現在我們回到FlexSPI的LUT機制,在它的指令集關于讀寫序列的解釋里,特別提到了當訪問類型是AHB的時候,一次訪問的數據長度取決于Burst Size和Burst Type。

Burst type一共有如下8種(其實對應了AMBA AHB Burst Type),Burst size也有8/16/32/64bits四種(即data block,未完全實現HSIZE[2:0]里定義的所有值),FlexSPI模塊會自動響應AHB master訪問請求來調度Burst type和Burst size去完成對應Flash的訪問。

下表具體解釋了FlexSPI模塊對于AHB讀訪問的響應,表中 hbeat_start_address 就是上一小節里Burst訪問時序里的HADDR[31:0]值,即AHB master當前節拍下(beat)要讀的地址;hburst_start_address 是當前Burst類型下訪問總長度區域的首地址,hburst_end_address 就是當前Burst類型下訪問總長度區域的末地址加1。表中特別強調了當Prefetch被關掉后,INCR型Burst下每個節拍訪問均會被當做SINGLE Burst來處理。

現在我們終于理解,FlexSPI的SEQ_CTL工作一次獲取的數據其實是受AHB master控制的。當Prefetch不使能的時候,FlexSPI就是個身不由己的數據傳送器,AHB master怎么要求,FlexSPI就怎么做。只有開了Prefetch功能,FlexSPI才會有靈魂,它會利用自己1KB大小的AHB RX Buffer干一些取巧的事。

至此,FlexSPI外設對AHB Burst Read特性的支持痞子衡便介紹完畢了,掌聲在哪里~~~

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關注 41
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 咸阳市| 宜都市| 沾化县| 邓州市| 平山县| 盱眙县| 塔河县| 松阳县| 泸州市| 北碚区| 大石桥市| 景东| 耿马| 牙克石市| 巴彦淖尔市| 永定县| 邯郸市| 维西| 黔东| 华坪县| 葫芦岛市| 汤阴县| 五峰| 磴口县| 太仆寺旗| 乌鲁木齐市| 门源| 连江县| 正阳县| 札达县| 丰都县| 鱼台县| 高雄市| 富平县| 阳曲县| 兴化市| 长汀县| 兴文县| 濮阳县| 建昌县| 景谷|