背景
支持一款 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.html
来源: https://www.cnblogs.com/zqb-all/p/12115303.html