如何使用可用于PSoC 5LP (32-bit Cortex-M3)芯片的带DMA的SPI写入SD卡?
我目前有一个DMA和SPI-tx/rx对工作,但有不同的用途,所以如果实际传输不是问题,我只是不知道如何与SDcard交互。
datasheet for the PSoC 5LP is here
基本信息:
我在简单模式下使用DMA,DMA TD链设置为:
8位宽度,4字节突发
自动完成完整TD(仅需要初始硬件请求)
完成后循环回初始TD的开头并等待HW请求
SPI主机是在gui中初始化的,我使用16Mhz时钟,8位tx/rx传输和4字节tx/rx缓冲区对其进行设置。中断设置为rx FIFO满,连接到中断的是rx DMA。
SDcard SPI rx/tx的指针分别是SPIM_rx_PTR和SPIM_tx_PTR。DMA在它们之间来回传输。我要传输的数组是SDcardout和SDcardin。

最佳答案

使用SPI通信只能让您获得对卡的最低命令/块级别的访问;您将需要一个文件系统。SD卡预格式化为FAT32,因此,一个FAT文件系统将提供最大的可比性,而不是最大的可靠性(例如,如果写操作因断电或重置而中断,则可能会损坏)。它还有一个优点,就是实现起来相对简单,所需资源少。
有几个商业和开源的FAT文件系统库可用。我建议你看看ELM FatFsELM Petit FatFs都有许可证,而且都有很好的记录。在每种情况下,您只需要实现磁盘I/O存根,将它们映射到SPI驱动程序。网站上有大量的示例、文档和应用说明可帮助您。您可以从另一个目标的SPI-SD实现示例开始,并根据您的驱动程序调整它(或者可能调整您的驱动程序)。其他FAT文件系统库与此基本相似,需要I/O层实现。
ELM FatFs的diskio层不是特定于媒体的,因此实际上需要在它和SPI驱动程序之间添加一个MMC/SD层。您不太可能为您的特定目标找到一个示例,但可以从其他目标的示例中工作,因为通过SPI的MMC/SD本身不是特定于目标的,硬件依赖性仅在SPI级别,并且卡检测和写入保护(可选)信号的GPIO实现。有几个不同ARM目标here的例子,这是一个PSoC支持here的项目(显然是在编写本文时正在进行的工作)。

关于c - 如何为PSoC 5LP芯片使用SPI写入SD卡?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34514923/

10-11 21:20