只更改SD卡扇区中的一个字节

Mig*_*ork 6 c embedded avr

我正在使用Atmega328在SD卡上实现FAT16.

我经常需要更改扇区中的一个或两个字节(512B区域).

我知道Flash是如何工作的,它需要立刻覆盖整个扇区,但我想知道是否有一些特殊的命令可以使卡本身处理它?

关键是,atmega只有2k RAM,而且只为读取 - 修改 - 写入SD卡缓冲区分配512是非常不利的.没有其他办法吗?

(PS.AFAIK atmega本身不能有外部ram)

too*_*ite 1

如果不读取/写入整个 512 字节,则无法仅更改扇区中的几个字节。所以你实际上确实需要 RAM 作为缓冲。

但是,有一些方法可以预分配文件空间或在每次仅写入时更新 FAT。这甚至可以节省写入周期,但如果在更新 FAT 之前断电,可能会导致数据丢失(但是,如果实施正确,它可能不会损坏文件系统)。

正如您所说,这些是廉价的 ArduinoNano (克隆版 - 据说),您可以只使用其中两个与 UART/SPI/i2C 互连 - 无论可用的是什么,甚至 8 位 bit-bang 也可以工作。

一个可以做任何你想做的事情,另一个只是用于 SD 卡/FAT 处理。

让我想起 Comodore 64 及其软盘驱动器 1541,其中还包括一个小型 CPU(好吧,“MCU”,但不是单芯片)。