背景
支持一款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會出問題,所以最好還是認真讀規格書,正確認識頻率限制,並提前在驅動中做好處理。