1. 程式人生 > >nor flash之頻率限制

nor flash之頻率限制

背景

支援一款nor flash時,出於效能考慮,一般會檢視其nor支援的最高頻率以及主控端spi控制器的最高頻率,以選擇一個合適的執行頻率。

對於一款主控支援多款flash的情況,還得考慮好相容性等問題。

主控端的最高頻率,可以檢視主控的規格書,本文主要說下nor的頻率限制。

讓我們帶著問題出發,假設我們的主控端最高spi clk為100M,那該怎麼識別nor的限制,驅動又可以怎麼處理?

正確識別頻率限制

讓我們開啟nor的規格書,搜尋 "freq", 很容易看到104M, 133M之類的字樣 。

如圖是幾款flash的規格書截圖

winbond: w15q128

mxic: mx15l128

gd: gd25q127

看到這個結果是不是很開心,看起來這些flash都可以跑100M以上。那我的主控端的控制器本身最高就100M,就直接把spi clk配置成100M就可以了唄。

是這樣嗎?不是!

其實flash的這個頻率是有例外情況的。規格書中會具體說明。下面以mxic為例截圖說明

比如對於READ命令,其頻率限制是fR

FAST READ命令,其頻率限制是fC

DUAL READ,其頻率限制是fT

QUAD READ, 其頻率限制是fQ

fR,fC,fT, fQ 分別是多少呢?規格書中也會給出一個表

從表中可以看出,原來最普通,看起來最穩的READ命令,其實是最特殊的一個。除了READ之外的所有命令,都能支援133M。而READ只能支援可憐的50M。

看來我應該把標題取成 “震驚,nor flash最慢的一條命令竟然是...”

那下面的fT和fQ標註的84M又是什麼意思?不是說都支援133M嗎,怎麼又冒出來一個84M

原來雙線和四線操作,要支援133M也是有條件的,需要插入dummy。也就是在關鍵時刻,加點空的操作,這樣才能在高頻率的clk下工作。

那加多少dummy合適呢,這也是明碼標價童叟無欺的,直接看規格書中的表格。

解決手段

我們最開始的假定是,主控可以跑100M,那讓主控跑100M的話,這些頻率限制怎麼解決呢?

從表格可以看出,假設主控端clk跑到100M,那麼驅動裡面插入8個dummy就可以使得雙線四線都達到104M。

那READ只支援50M,怎麼辦?這個其實很好解決,既然知道READ的這個限制,那麼不用它就是了。

基本nor flash都提供了雙線,四線操作,驅動中應該儘量支援起來,提高效能。退一步講即使不支援雙線四線,我們還有FAST_READ命令可以用,這個是支援100M以上的。

READ並不孤單

那麼看來不用READ,我們就可以在100M的頻率下愉快地玩耍了是嗎? 很遺憾,不是的。

多看幾款規格書,我們就可以發現,READ並不孤單,有些nor flash,不止READ跑不到100M,讀ID之類的命令也跑不到100M。

如果說READ還可以改用其他命令,那麼READ ID對於相容多款nor來說,基本是繞不過去的了。

怎麼解決呢 ?穩定起見,驅動中只能先用低頻去讀出ID,再用高頻做正常讀寫。當然如果不是量產專案,那麼直接使用100M也可能是可以讀出來的。

實測資料

目前實測到各家的這個頻率限制其實是有裕量的。

規格書限制為80M的READ,實測在100M下可正常工作。

規格書限制為50M的READ,實測在75M下可正常工作,在100M下則概率性可正常工作。

規格書限制為80M的READ ID,實測在100M下可正常工作。

但以上只是在少量樣片上測試的結果,實際上超出了規格書的限制範圍肯定是有風險的。

真正量產的話說不定就有邊界IC會出問題,所以最好還是認真讀規格書,正確認識頻率限制,並提前在驅動中做好處理。

本文地址: https://www.cnblogs.com/zqb-all/p/12115303.h