我有一个SD卡(或SDHC卡)通过SPI模式连接到微控制器。我正在使用Chan’s FAT库。我向它写入数据来自8192字节缓冲区(由于RAM不足,缓冲区不能更大)。这种写作是定期进行的。通常在再次填充缓冲区之前准备好写入。但偶尔(也取决于缓冲区填充速度)事情出错了,在写入新缓冲区之前写入还没有准备好,导致数据丢失。
BTW,扇区大小也设置为8192字节,但其他扇区似乎没有影响。
可以使用范围监视写作,并显示有时写入需要很长时间。例如,比平时长四倍。
这里发生了什么,也许我该如何防止这种情况发生?这与读取,修改,写入序列有关吗?我需要外部RAM缓冲区吗?或者有更好的方法来提高绩效吗?
答案 0 :(得分:2)
不是软件原因,但flash从根本上有不同的写入时间。原因是仔细平衡执行写入所需的电压。太高会导致永久性损坏,太低可能无法改变该值。后者会自动处理,结果只会出现“轻微”的口吃。然而,这种口吃对你来说似乎太长了,因为你的缓冲区很小。
解决方案?我们过去使用过昂贵的single-level(SLC)SD卡。即使是现在我们也坚持要求对所有固件版本进行认证。我们当然不会在现货市场上购买SD卡。