一顆Flash芯片可能有多個R/B,如果主控芯片只有一個R/B的話,會把Flash的多個R/B直接連在一起,再連到主控芯片。Flash芯片的R/B輸出是開漏(open drain)的,所以只要一個R/B是低電平,那麼連到一起的也是低電平。
所以當主控看到R/B為低時,就知道Flash芯片中至少有一個處於busy狀態。
反之,R/B為高則說明每個Flash都處於ready狀態。
如果要知道到底是哪個Flash處於busy狀態的話,只能用status read命令來查詢了。
以Page Program(80h 10h)為例。假設當前連接了兩個Flash單片到主控,共2個CE,一個R/B。
所以有以下兩種做法:
先給CE1發一個Page Program的command(當然中間包含數據),
再給CE2發一個Page Program的command。
因為在對應的Flash芯片回到ready狀態前都不能發下一個Page Program命令。
(1)等到R/B信號線拉高,表示兩個Flash都回到ready狀態,這時再重複Page Program
(2) 給CE1發Status Read命令,如果讀到的ready/busy位為1,則表示Flash1已經回到ready狀態,這是就可以給Flash1發新的Page Program命令了。然後再給CE2發Status Read命令確認Flash2的狀態,ready之後可以發新的Page Program命令。
第(2)種方法效率更高一些。
所以當主控看到R/B為低時,就知道Flash芯片中至少有一個處於busy狀態。
反之,R/B為高則說明每個Flash都處於ready狀態。
如果要知道到底是哪個Flash處於busy狀態的話,只能用status read命令來查詢了。
以Page Program(80h 10h)為例。假設當前連接了兩個Flash單片到主控,共2個CE,一個R/B。
所以有以下兩種做法:
先給CE1發一個Page Program的command(當然中間包含數據),
再給CE2發一個Page Program的command。
因為在對應的Flash芯片回到ready狀態前都不能發下一個Page Program命令。
(1)等到R/B信號線拉高,表示兩個Flash都回到ready狀態,這時再重複Page Program
(2) 給CE1發Status Read命令,如果讀到的ready/busy位為1,則表示Flash1已經回到ready狀態,這是就可以給Flash1發新的Page Program命令了。然後再給CE2發Status Read命令確認Flash2的狀態,ready之後可以發新的Page Program命令。
第(2)種方法效率更高一些。
沒有留言:
張貼留言