|
大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是在FDCB里使能串行NOR Flash的Continuous read模式。9 m* s$ k( C$ g
前面關(guān)于串行Flash傳輸時序的文章 《Fast Read Quad I/O SDR模式》 與 《Fast Read Quad I/O DTR模式》, 痞子衡介紹的其實都屬于經(jīng)典SPI工作模式大類下的Non-Continuous read傳輸模式,即任何獨立的Fast Read Quad I/O讀數(shù)據(jù)時序(一次CS低有效期間),都必須由Command子序列(命令碼0xEB/0xEC/0xED/0xEE)先行,且不管是SDR還是DTR模式,命令碼都是要在8個SCK周期內(nèi)由IO0信號進行傳輸(別小看這8個SCLK周期,對于小數(shù)據(jù)塊讀取時序,它在總傳輸時間里占比是不可忽視的)。( [/ p5 p+ y. D4 c4 n( J Y9 r" r
我們知道在XIP情況下CPU從Flash里取指令數(shù)據(jù)往往是非常隨機且零碎無序的,這時候雖然有L1 Cache和和FlexSPI Prefetch Buffer加速,但如果還想再進一步提升訪問性能,就只能從Flash底層傳輸序列里想辦法了。Flash讀時序里有五大子序列CMD + ADDR + MODE + DUMMY + READ,其中除了CMD和DUMMY子序列是固定的,其他子序列參數(shù)值都可能會變,會變的就不能被優(yōu)化,所以只能想辦法在CMD和DUMMY子序列里做文章。今天痞子衡要介紹的Continuous read模式就是拿CMD子序列開刀:
8 {; A$ J( e# s; v一、什么是Continuous read模式?Continuous read顧名思義就是連續(xù)讀。在串行Flash世界里,連續(xù)讀的意思是讀傳輸時序里除了第一次CS有效期必須傳輸Command子序列,其后的讀傳輸時序里均省去Command子序列。下面痞子衡結(jié)合i.MXRT的FlexSPI外設(shè)來對比介紹Non-Continuous read與Continuous read模式的區(qū)別:
: P* K6 y c& L, D% j4 F1.1 FlexSPI的XIP Enhanced Mode我們知道NOR Flash因為支持主設(shè)備隨機讀取其任意地址處的數(shù)據(jù),因此從原理上可以用作XIP設(shè)備。但因為是串行接口,所以不能直接XIP(沒有獨立并行地址線,CPU無法直接尋址),需要FlexSPI外設(shè)在底層完成AHB總線讀訪問的實時響應(yīng)工作,這個實時響應(yīng)工作就是FlexSPI的XIP特性。 e; ~5 b( x6 ]/ T' ]
FlexSPI的XIP特性可以支持任意串行NOR Flash,對Flash廠商設(shè)計沒要求。為了提升XIP代碼執(zhí)行效率,F(xiàn)lexSPI中也集成了XIP Enhanced Mode特性(其實就是Continuous read模式),見下圖,CS1是包含CMD子序列的讀時序(即第一次CS),CS2/3(包括后續(xù)所有CS)相比CS1少了CMD子序列,這就是Continuous read訪問時序。 |
|