FLASH中的BOOT Sectored 和 Uniform Sectored两种类型的区别和联系

前天有一个同事过来问我一个问题,就是他们一直在生产的一个板卡上的一篇镁光的芯片停产了,问我用这系列的另一款替代可不可行,我拿来看了看,这是镁光生产的一片NORFlash芯片,1G

FLASH中的BOOT Sectored 和 Uniform Sectored两种类型的区别和联系

停产的是 PC28F00AP30BFA,想象的替代品是PCB28F00AP30EFA,一个是bottom boot ,一个是uniform,查了许多资料,竟都是空白,也有人问,但是答的讳莫如深,后来终于搜索到了一篇外文文章是讲述两者间的区别和替换方法的,分享一下,以供后辈学习。

boot类型和uniform类型从名字上来说并不好理解,两种类型的区别其实就是在开头(或结尾)的一段扇区结构上是不同的。

boot类型的flash的前64kB的内容是被划分成了很多的小扇区,这些较小扇区的两种典型配置是1*16 KB + 2*8 KB + 1*32 KB 和 8*8 KB扇区。

这样做的好处是,假如在存放一些引导代码或者系统参数的时候,这些数据都非常小,我们不必要一种类型的数据占用一整块扇区,这样太浪费扇区了。引导扇区的设备还可以选择将较小的引导扇区放置在低地址范围的前64 KB(称为bottom boot)或高地址范围的后64 KB(称为top boot)中,这是由于微控制器在通电后访问引导代码的方式所致。

但是uniform类型的就是一致的,统一的,也就是说,所有的扇区都一样大小。

下图是以某款norflash为例说明的三种类型在地址结构上的差异

FLASH中的BOOT Sectored 和 Uniform Sectored两种类型的区别和联系

 

 

  • 那么,如果想用uniform类型的替换boot类型的怎么办呢,软件上需要进行哪些操作呢? 

情形1:系统允许所有的引导扇区一起擦除

如果在uniform类型flash上使用扇区擦除命令序列,则最终效果是相同的。 现在将SA0,SA1,SA2和SA3指向的flash的前64 KB擦除一次。 uniform flash会忽略其他扇区擦除命令,因为该命令实际上告诉闪存设备4次擦除第一个uniform扇区,这样的话无需更改代码。  为了使代码更简洁,只需删除最后三个扇区擦除脉冲即可。

FLASH中的BOOT Sectored 和 Uniform Sectored两种类型的区别和联系

情形2:系统需要单独的引导扇区擦除功能

 这类情况需要自己单独掌握,包括哪些数据可以一起擦除,哪些数据需要单独占用扇区等等。

FLASH中的BOOT Sectored 和 Uniform Sectored两种类型的区别和联系