如果 SDHC 卡出现写入错误(损坏单元/坏扇区)会发生什么情况?
整个卡是否将无法使用(丢弃,现在和将来写入该扇区的所有数据都将丢失)?或者将扇区(闪存在写入时会损坏,因此可能具有检查扇区是否已成功写入的功能)重写为另一个扇区,并将故障标记为不可用,这将被视为容量减少,但没有数据丢失。
我必须对无盘机器上的 SD 卡做一些研究。
答案1
一般来说,SD 卡使用 FAT 文件系统。这将检测并标记/标记坏扇区,因此最终结果是数据不会丢失,但卡上的可用空间量会略有减少。当然,这并不完美。一些较新的卡内置了纠错码 (ECC),可以在较低级别执行类似的工作,因此理论上应该可以减少写入卡中的信息丢失的可能性。这仍然有可能,只是可能性较小。
答案2
NAND 闪存的工作方式是提供多个“擦除块” - 每个“擦除块”都有多个“页面”。
例如,可以将 128 KB 擦除块分成 64 个 2 KB 页。
每个页面都可以写入,将位从 1 更改为 0。如果您想将任何位从 0 改回 1,您必须向整个擦除块发出擦除命令,将所有位重置为 1(除非该块已磨损)。
写入并不完美,有些位可能无法从 1 变为 0,或者自行翻转。
可以免除争议的是:每个擦除块还有一个“带外区域”,即一个额外的页面。ECC 数据可以写入其中。ECC 允许根据 ECC 的类型(例如 Reed Solomon、BCH)恢复一定数量的位,并且允许某些位出错。
原始 NAND 内部的工作原理如下。
但是:SD 卡不提供原始 NAND 访问 - 每个 SD 卡内部都有一个微控制器,代表主机与 NAND 通信。内部微控制器负责处理标准 SD 命令、实施磨损均衡(确保所有页面均匀写入)以及生成正确的 ECC 代码。
不幸的是,如果不检查 SD 卡控制器固件,您就无法真正验证或确认 SD 卡如何实现磨损均衡(或在特定情况下的确切行为),而且这些信息很难获取。
这这表明 SD 卡在响应读取命令时会向主机报告不可恢复的 ECC 错误。我敢说,如果 SD 卡出现这种情况,则意味着任何内部磨损均衡/错误更正都失败了,不应再依赖该卡。