我正在使用Atmega328在SD卡上实现FAT16.
我经常需要更改扇区中的一个或两个字节(512B区域).
我知道Flash是如何工作的,它需要立刻覆盖整个扇区,但我想知道是否有一些特殊的命令可以使卡本身处理它?
关键是,atmega只有2k RAM,而且只为读取 - 修改 - 写入SD卡缓冲区分配512是非常不利的.没有其他办法吗?
(PS.AFAIK atmega本身不能有外部ram)
如果不读取/写入整个 512 字节,则无法仅更改扇区中的几个字节。所以你实际上确实需要 RAM 作为缓冲。
但是,有一些方法可以预分配文件空间或在每次仅写入时更新 FAT。这甚至可以节省写入周期,但如果在更新 FAT 之前断电,可能会导致数据丢失(但是,如果实施正确,它可能不会损坏文件系统)。
正如您所说,这些是廉价的 ArduinoNano (克隆版 - 据说),您可以只使用其中两个与 UART/SPI/i2C 互连 - 无论可用的是什么,甚至 8 位 bit-bang 也可以工作。
一个可以做任何你想做的事情,另一个只是用于 SD 卡/FAT 处理。
让我想起 Comodore 64 及其软盘驱动器 1541,其中还包括一个小型 CPU(好吧,“MCU”,但不是单芯片)。