我正在向嵌入式应用程序的micro SD卡(SDHC)写入数据。应用程序需要能够非常快速地实时写入到卡中。
我已经看到,预先擦除内存块会使写入速度更快。不幸的是,我正在努力使擦除命令(和ACMD23)工作,因为为我正在使用的开发板提供的驱动程序并不完整。
有没有办法通过预先向存储块中写入一个“已擦除”值来擦除存储卡?例如,如果擦除一个块后,它变为0x12345678,我是否可以直接写入此值,使其被擦除,以便使用擦除命令?或者,有没有其他方法可以让卡将一个块标记为已擦除?
谢谢
我试着写0xffffffff作为擦除的值,但是没有帮助。
发布于 2019-06-17 20:00:40
我想你误解了闪存的工作原理。
闪存的数据块比一般文件系统所期望的要大得多。此外,它们具有有限数量的擦除周期。因此,闪存控制器提供将虚拟扇区映射到物理块的抽象。
被“擦除”的扇区根本不会被主动擦除。它只是未映射,并且在其位置映射了一个空块(如果可用)。在后台,闪存控制器对扇区进行打乱,并在物理块完全不使用时将其擦除。
如您所见,闪存控制器的质量在这里很重要。通常,这都不是驱动程序的问题。驱动程序只发送命令;闪存控制器执行它们。如果你需要更好的性能,那就买一张更好的SD卡。
https://stackoverflow.com/questions/56630678
复制相似问题