【问题标题】:Data misaligned when writing to SDHC card over SPI通过 SPI 写入 SDHC 卡时数据未对齐
【发布时间】:2023-03-07 00:10:01
【问题描述】:

我正在使用微控制器 (PIC18F26J50) 与 G.Skill 4GB microSD 卡接口。

  • SD 卡初始化成功,我从接收 0x01(空闲)R1 令牌变为 0x00(就绪)R1 令牌。
  • 读取数据块有效,我能够读取分区 1 的位置并读取该分区的第一个扇区

但是,在尝试写入块时,我从未看到响应令牌。将原始块倾倒在卡上时。我看到数据确实写了,但没有正确对齐……最好的解释方法是用实际图片来说明

在重复之前应该用 0x01、0x02、0x03 等填充到 0xFF

此卡在 Windows 中运行良好。而且我能够正确地读取和写入数据。

调查,我发现我得到的响应是 0XCA,如果你右移你得到 0xE5,一个正确的响应令牌。数据本身向左未对齐。此外,似乎还写入了两个虚拟字节和令牌。纠正你得到的转变:

FF FF FE 00 01 02 03 04 05 06 07 08 09 0A 0B 0C

所以我删除了写入 2 个虚拟字节和 0xFE 令牌的代码,神圣的 s*#$ 卡在命令后立即开始写入数据,我认为这违反了规范!谁能确认这是否是 SDHC 卡的预期行为?或者这张卡只是运行一个真正的 s*#$ty SD 控制器? (我怀疑是后者,因为我有一张工作正常的 16GB 卡)

【问题讨论】:

    标签: microcontroller sd-card spi


    【解决方案1】:

    我也遇到了同样的问题,结果不是 SD 卡有问题,而是我的 SPI 接口有问题。

    我使用的特定芯片 (Freescale KL03) 将在数据缓冲区中保留当前接收到的字节,直到您读取它,即使您已经开始发送下一个。我不同步,所以每次我写一个 SPI 字节,等待传输然后从缓冲区读取时,我实际上得到的是前一个结果而不是当前结果。因此,每个 SPI 事务都有一个字节延迟。

    因此,我的范围显示我正在与卡交换以下内容:

    MOSI: 58 00 00 00 01 00 00 00 00 7E nn nn nn ...
    MISO: FF FF FF FF FF FF FF 00 FF FF FF FF FF ...
    

    这导致了您遇到的错位。应该是这样的:

    MOSI: 58 00 00 00 01 00 00 00 7E nn nn nn nn ...
    MISO: FF FF FF FF FF FF FF 00 FF FF FF FF FF ...
    

    总之,确保您对您的写入命令的 00 响应之后立即发送 7E。

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 2017-06-19
      • 2021-09-28
      • 1970-01-01
      相关资源
      最近更新 更多