所以我的闪存有 2k 页大小和 128k 擦除块大小。使用flash_erase /dev/mtd1 0 0mtd-utils 我可以擦除整个 mtd1 分区。分区总共256k。所以2个擦除块被擦除。我只能擦除整个擦除块。但是当写入闪存时,我只需要写入页对齐。到底有什么区别,为什么我不能只写入0xFF我想删除的内存,而不是使用erase必须进行页面对齐的内存。预先感谢您的意见!
闪存被组织成 x 个块(或扇区),块(或扇区)本身又分为 y 个页。正如您所发现的,闪存一次只能擦除一个块,但一次可以写入一页,有时甚至更精细。这一事实是由于微电子级存储器的物理设计以及每个存储单元中的信息位如何物理存储和释放的。有关科学的更多信息,请查看维基百科,它比我解释得更好。我怀疑之所以决定以这种方式设计闪存(仅块擦除)是因为它比 EEPROM 快得多,而 EEPROM 一次可以擦除一个字节。
对于真正想要编写或使用闪存驱动程序的人来说,所有这一切的结果是信息位只能从 1 清除到 0,而不能设置。这就是为什么你无法“写1”。
这样做的实际副作用是,如果您写入,例如0xAA = 0b10101010块内页面内的某个可寻址字节,则无法覆盖该内存中已写入(“清除”)的位。例如,如果您尝试0x0F = 0b00001111再次写入同一字节,则最终会得到0x0A = 0b00001010. 显然,这不是你想要的。
顺便说一句,相变存储器(PCM)是一项开始受到关注的新技术,并且由于其设计,它确实允许您进行位可更改的写入(设置和清除)。