所以我的flashmemory有2k页面大小和128k eraseblocksize。
使用mtd-utils中的flash_erase /dev/mtd1 0 0
,我可以擦除整个mtd1分区。
分区总共256k。因此擦除2个擦除块。我只能删除整个擦除块。
但是当写入闪存时,我只需要写入页面对齐。
确切地说区别在哪里,为什么我只能将0xFF
写入我要删除的内存而不是使用必须进行页面对齐的erase
。
提前感谢您的意见!
答案 0 :(得分:3)
闪存被组织成x个块(或扇区),其自身被分成y个页面。正如您所发现的,Flash只能在某个时刻被删除,但可以一次写入页面,有时甚至更精细。这一事实是由于微电子级存储器的物理设计以及每个存储器单元中的信息位如何物理存储和释放。有关科学的更多信息,请查看维基百科,它解释得比我更好。我怀疑决定以这种方式设计Flash(块擦除)因为它比EEPROM快得多,可以一次擦除一个字节。
对于实际想要写入或使用闪存驱动程序的人而言,所有这些的结果是位信息只能从1清除到0,而不能设置。这就是为什么你不能写一个"。
这样做的实际副作用是,如果你写0xAA = 0b10101010
到一个块内页面内的某个可寻址字节,你就不能用这个存储器覆盖已写入的位(&#34) ;清零&#34)。例如,如果您尝试再次将0x0F = 0b00001111
写入此相同字节,则最终会得到0x0A = 0b00001010
。显然,这不是你想要的。
作为旁注,相变存储器(PCM)是一种开始获得牵引力的新技术,并且由于其设计,它允许您进行位可变写入(设置和清除)。
答案 1 :(得分:0)
为了擦除存储器,硬件知道擦除状态是什么,并且可以擦除它的更大的物理块,并且因为它是物理构建的。但要编写它,将这些1中的一些更改为零(在某些情况下或者可能在逆变器中有一个擦除位实际上是零)但由于逻辑节省它在某一点被反转所以我们将其视为1)物理架构只想在页面中执行此操作。所以我怀疑有一点ram的部分,页面的大小,你用你想要的数据加载ram,然后根据芯片的物理和逻辑架构,它可以根据你的内容修改该页面想要它(或者至少它使你想要的位为零,零,它不能使零成为1)。同样由于存储器的物理属性,你只能在对齐的块中进行页面写入,而不是随机的,而不是未对齐的。
所以我怀疑擦除大小和程序大小(扇区和页面)的原因是由于写入的内容以及在#34;写入之前需要存储多少存储空间。发生。