4. 级联拓扑选型:Daisy Chain 与独立片选
两种拓扑各有千秋。我最早接触多片 Flash 时,觉得不就多挂几颗芯片嘛,随便选一种都行。结果呢?被坑过一次。嗯,先别急,我们慢慢说。
4.1 Daisy Chain — 省引脚,但小心延迟
Daisy Chain,说白了就是一条链。Flash 芯片像串珠子一样,一个一个串起来。第一个 Flash 的数据输出接第二个的输入,第二个输出再接第三个的输入……这样一直串下去。
我习惯叫它“串联模式”。你想想看,所有芯片共用一组 QSPI 总线——时钟、数据、片选都共享。区别只在数据传哪个 Chip 而已。
| 参数 | Daisy Chain | 独立片选 |
|---|---|---|
| 引脚消耗 | 最少。只需要一组 QSPI 引脚 | 较多。每颗芯片要多一个 CS |
| 布线复杂度 | 低。主板 layout 很清爽 | 高。CS 信号要走到每个芯片 |
| 读延迟 | 逐级累加。最后一个芯片延迟最大 | 无累加。所有芯片直连控制器 |
| 写效率 | 慢。每颗芯片都要传一遍数据 | 快。直接写目标芯片 |
| 可扩展性 | 好。再多串几颗也没问题 | 受限于控制器引脚数 |
| 调试难度 | 高。坏一颗会影响整条链 | 低。坏一颗只影响它自己 |
我记得第一次用 Daisy Chain 时,layout 小哥特别高兴,因为走线确实少。但后来调试时才发现一个小坑——链上的芯片必须支持“通过模式”(pass-through mode),不然数据传不过去。
选 Daisy Chain 时,一定确认每颗 Flash 都支持命令延续(command continue)功能,否则链子后半段的芯片根本读不到。
4.2 独立片选 — 简单粗暴,但费引脚
这种方式下,每个 Flash 都有自己的片选信号,各走各的道。我刚开始做设计时,总觉得这样浪费引脚,后来才明白,在某些场景下,这正是它的优势。
独立片选的逻辑很直白:你想读哪个芯片,拉低对应的 CS 就行。其他芯片保持高阻抗,完全不影响。
你会问:“那我为什么不都用独立片选呢?”原因很简单——引脚不够用。
举个例子。一个 8 线 QSPI 控制器,最多接 4 颗独立片选的 Flash。因为控制器一般只有 4 到 6 个片选引脚。你想想看,如果要做 8 颗甚至 16 颗 Flash 的系统,独立片选根本没办法。
4.3 关键决策指标
我个人的选择标准是这样的:
- Flash 数量 ≤ 4:用独立片选。省事儿,调试也方便。
- Flash 数量 ≥ 8:用 Daisy Chain。引脚受限,只能这样。
- 对读延迟敏感:尽量用独立片选。延迟累加在链上不可控。
- 写操作占比大:也推荐独立片选。写延迟在链上会翻倍。
- 系统板上空间紧张:Daisy Chain 布线少,更适合。
我曾经在一个项目里,想把两种拓扑混着用——前两颗用独立片选,后两颗串起来。结果调试了整整一周,因为控制器对混合模式的支持并不规范。建议你,要么全独立,要么全 Daisy Chain,别搞混合。
4.4 避坑指南
嗯,这里有几条我踩过的坑,你提前知道能省不少时间。
- 链长不要超过 4 颗:Daisy Chain 超过 4 颗后,信号完整性明显下降。我在项目中试过 8 颗链,结果高频跑不起来。
- 独立片选需要上拉电阻:每个 CS 引脚都要接上拉,防止悬空时误触发。我吃过这个亏,板子焊好了才发现 CS 电平不稳。
- 注意控制器的驱动能力:独立片选模式下,多个 Flash 同时响应时,数据总线的驱动电流可能不够。建议加缓冲器。
- Daisy Chain 写保护要统一:链上的芯片最好用相同的写保护策略,否则链中一颗写保护了,后面的命令都传不过去。
4.5 拓扑结构示意图
下面我用一张简图把两种拓扑的关系理清楚。左边是独立片选,右边是 Daisy Chain。你看一眼就明白了。
从图上能看出来,独立片选走线多,但每颗芯片都能被直接选中;Daisy Chain 走线少,但数据要挨个传,链越长,延迟越大。
4.6 我的总结
选哪种拓扑,其实就是在“引脚资源”和“性能”之间做取舍。
- 引脚够用、对性能有要求 → 独立片选
- 引脚紧张、Flash 数量多 → Daisy Chain
- 两种都可行时 → 我建议先做仿真,看看延迟和信号质量能不能满足需求
我的一个习惯是:先在原理图上把两种方案都画出来,然后拉一张对比表,把关键参数填上。这样领导一看就明白为什么选这个方案了。
记住一条底线:不管选哪种,都要保证 Flash 控制器和 Flash 芯片本身支持该拓扑。有些老器件不支持 Daisy Chain,你再怎么设计也没用。