c - 如何使用 PSoC 5LP 芯片的 SPI 写入 SD 卡?

标签 c embedded sd-card spi

如何使用带 DMA 的 SPI 写入 SD 卡 PSoC 5LP (32-bit Cortex-M3)芯片?

我目前有一个 DMA 和 SPI tx/rx 对在工作,但出于不同的目的,所以如果实际传输不是问题,我只是不知道如何与 SD 卡交互。

datasheet for the PSoC 5LP is here .

基本信息:

我在简单模式下使用 DMA,DMA TD 链设置为: 8 位宽度,4 字节突发 自动完成完整的 TD(只需要初始硬件请求) 完成后循环回到初始 TD 的开始并等待 HW 请求

SPI Master 在 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 通信只会让您获得对卡的最低命令/ block 级访问权限;您将需要一个文件系统。 SD 卡预先格式化为 FAT32,因此 FAT 文件系统将提供最大的可比性,但并不是最可靠的(例如,如果写入因断电或重置而中断,则可能会损坏)。它还具有实现起来相对简单且需要的资源很少的优点。

有几个商业和开源 FAT 文件系统库可用。我建议你看看ELM FatFsELM Petit FatFs两者都有宽松的许可证并且有据可查。在每种情况下,您只需要实现磁盘 I/O stub 以将它们映射到您的 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/

相关文章:

c - "Push-to-make"键盘按键的风格使用

似乎无法正确设置 char*

android - 在角落访问存储

java - 无法从 SD 卡读取保存的对象

c - 如何生成8字节的十六进制值?

c - 从 .au 文件中读取魔数(Magic Number)

linux - 寻找示例嵌入式 Linux HID 设备代码

algorithm - 检查经度/纬度坐标是否位于嵌入式设备的复杂多边形内?

embedded - 验证 IPv6 实现

Android SD 卡文件系统