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


9

我有一个具有微控制器(NXP LPC1343)的应用程序,该微控制器通过16位SPI 连接到FPGA。还有一个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,但是如何解决此问题?


据我所知,它应该兑现它。也许尝试其他SD卡?
马可

这是一个很好的问题。感谢您提出(和回答)问题。
13年

Answers:


7

好的,我实际上已经知道了。我应该用Google深入一点。事实证明,根据如何使用MMC / SDC共享总线时,SD卡的行为与SPI设备并不完全相同:

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

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

SD卡和FPGA可能都试图驱动DO,而SD卡丢失了,因此将其重置。发送一个额外的字节似乎已解决该问题。


这使您可以在FPGA和卡之间切换,对吗?您是否还发现您可能在数据传输和恢复期间中断?根据elm-chan的说法,这似乎是不可能的,但是我很想知道您是否确认或反对它。
krs013

1
是的,它确实可以按预期在FPGA和SD之间交替工作,但是您不能中断对FatFS的调用之间的传输。至少我无法使它正常工作。这意味着(例如)您无法使用共享的SPI总线在文件读写过程中响应中断。
佐夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.