天天看点

串行Norflash是如何实现XIP的?

先说问题:要想程序在串行的Norflash中运行,到底需要做哪些工作?

Norflash和Nandflash想必大家都知道。恕本人才学疏浅,最近突然发现Norflash可以并行连接实现XIP,竟然也可以串行通过SPI连接。然后查了几款flash产品以及自己之前用的(之前用华邦的w25q32fv,一直当nandflash在用,惭愧),结合这些flash在IC设计中的应用,发现很多公司的IC产品(MV300,esp8266等等产品)都是通过串行Norflash实现XIP。

Norflash之所以可以片内执行,就是因为他符合CPU去指令译码执行的要求。CPU送一个地址出来,Norflash就能给一个数据让CPU执行,中间不需要额外的处理操作。而Nandflash不是说不可以实现XIP,Nandflash不一样是因为nandflash有地址,数据,命令共用IO口的问题,cpu把地址发出来之后,并不能直接得到数据,还需要控制线的操作才能完成。就是说他没有专用的SRAM接口,另外还有nandflash与Norflash结构的差异导致nandflash不太适合实现XIP。

那么问题就来了,要想程序在串行的Norflash中运行,到底需要做哪些工作?

以华邦的w25q32fv为例,Dual Read、Quad Read和QPI都可以实现真正的XIP,把数据读出来当然谁都会了,照着Spec上做就好了,关键是这个XIP,想不通是怎么完成的。莫非在硬件连接上需要修改,增加SPI控制器之类的东西?

我是做软件的,但是对底层的原理什么的比较感兴趣。希望可以和大家交流学习。

可能推测如下:

单纯CPU的话需要相应的总线桥芯片支持,Soc的话可能内部已经集成了桥芯片,挂接到PCIE或者AMBA总线上,桥芯片的硬件逻辑已经实现串并转换、总线仲裁、Cache结构、Burst等逻辑。另外Nor flash需要支持XIP模式,与普通读写稍有差异,但还是走SPI或QSPI