SPI模式下的SD卡是否尊重芯片选择/从选择?似乎正在我的应用程序中重置

电器工程 FPGA spi sd 恩智浦
2022-01-18 12:46:50

我有一个应用程序,其中有一个通过 16 位 SPI连接到FPGA的微控制器(NXP LPC1343 )。还有一个 SD 卡使用相同的 SPI 端口 (MISO/MOSI) 但具有不同的 CS/SS 引脚(根据 SPI 规范,两者都是低电平有效)。我需要做的一件事是使用FAT32将 FPGA 中的数据写入 SD 卡上的文件,这是微控制器的工作。微控制器正在运行FatFS,我已经自己可靠地工作了。

因为微控制器只有少量的 RAM,一次只能缓冲少量数据。因此,微必须从 FPGA 读取缓冲区,将 SPI 模式更改为 8 位,然后将该数据写入 FATFS。回想一下,为了将 SD 卡配置为 SPI 模式,必须在 SPI 总线以 400 kHz 运行时发送命令,并且必须进行一定的等待。因此,我希望只执行一次初始化。

然而,即使在 SD 卡上保持 CS 为高电平的同时在 FPGA 上执行事务似乎会使 SD 卡进入一个奇怪的状态,以至于它需要再次进行初始化。这当然是不可取的,因为初始化可能需要几毫秒,以便只写入 4 kB 左右的数据(再次受到我的微型 RAM 容量的限制)。由于我需要尽快写入几兆字节,这会将性能从大约 500 kB/s 降低到不到 100 kB/s。

我知道 SD 卡在技术上并不完全符合 SPI,但如何解决这个问题?

1个回答

好吧,其实我想通了。我应该更深入地搜索一下。事实证明,根据How to Use MMC/SDC共享总线时,SD 卡的行为与 SPI 设备不完全相同

在 SPI 总线中,每个从设备通过单独的 CS 信号进行选择,并且可以将多个设备连接到 SPI 总线。通用 SPI 从设备通过 CS 信号异步驱动/释放其 DO 信号,共享一条 SPI 总线。

然而,MMC/SDC 驱动/释放 DO 信号以与 SCLK 同步。这意味着有可能与 MMC/SDC 和任何其他连接到 SPI 总线的 SPI 从机发生总线冲突。右图显示了 MMC/SDC 的驱动/释放时序(DO 信号被拉至 1/2 V cc以查看总线状态)。因此,要使 MMC/SDC 释放 DO 信号,主设备必须在 CS 信号置低后发送一个字节。

SD卡和FPGA可能都在尝试驱动DO并且SD卡丢失了,所以它重置了。发送一个额外的字节似乎已经解决了它。