nor flash之4位元組地址模式
- 2020 年 3 月 8 日
- 筆記
背景
容量低於 16M bytes 的 nor,一般使用 3 位元組地址模式,即命令格式是 cmd + addr[2] + addr[1] + addr[0] + ...
使用超過 16M bytes 的 nor flash,則需要了解 4 位元組地址模式, 即命令格式是 cmd + addr[3] + addr[2] + addr[1] + addr[0] + ...
原因
為什麼呢, 因為用 3 個位元組表示地址,則其範圍是 0x000000 - 0xffffff = 0 - 16M
,超過 16M 的地址就無法表示了,那自然就得上 4 位元組了。
驅動修改
新的 uboot, kernel 驅動中都是支援的,配置下就可以了,如配置上 SPI_NOR_4B_OPCODES 。
如果在用的 nor 驅動沒有支援,那可以自行根據 datasheet,在初始化的時候判斷下容量,加個切換到 4 位元組地址模式的操作,後續的讀寫命令等,也改用 4 位元組地址。
注意事項
需要注意的是,一些晶片的 boot rom 無法支援 4 位元組地址模式,只會用 3 位元組地址模式跟 nor 通訊。
所以切換到 4 位元組地址模式後會導致直接重啟無法正常啟動。需要徹底掉電後重新上電,讓 nor 因為重新上電默認回到 3 位元組地址模式,才能正常啟動。
一種處理方式是,在 reboot 的流程中,增加軟體退出 4 位元組地址模式 的操作。這樣正常的 reboot,會先退出 4 位元組地址模式再重啟,boot rom 就能正常識別了。
但軟體退出的缺點是,只能解決正常重啟的情況,無法處理硬體 reset 主晶片的操作,因為 reset 主晶片並不會讓 nor 也 reset,那麼 nor 就仍處於 4 位元組地址模式,不響應 boot rom 的 3 位元組地址命令。
另一種更好的處理方式是,硬體設計上支援讓主晶片和 nor 同步 reset。
其他
nor 在 16M 這個容量是個分界點,不僅驅動上因為 4 位元組地址模式的引入而更加複雜,價格上也是差別巨大,32M nor 遠不止 16M nor 價格的兩倍。
從價格考慮,用一片 32M 的 nor 還不如用兩片 16M 並自行通過片選去分時復用。也不如直接上 128M 的 nand,不過上 nand 的話,軟體上就複雜很多了,這裡不再展開。
更多參考
nor相關文章
nor flash之頻率限制
spinor/spinand flash之高頻通訊延遲取樣
nor flash之防寫
nor flash之擦除和寫入
nor flash之防寫開銷
本文地址:https://www.cnblogs.com/zqb-all/p/12442578.html
公眾號:https://sourl.cn/CKWtQJ