我正在使用微控制器(PIC18F26J50)与G.Skill 4GB microSD卡连接。
但是,在尝试编写块时,我从未看到响应令牌。将原始块倾倒在卡上。我看到数据确实写了,但它没有正确对齐......最好的解释方法是使用实际图片
这应填充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的卡正常工作)
答案 0 :(得分:0)
我遇到了完全相同的问题,结果证明这不是SD卡的问题,而是我的SPI接口问题。
我正在使用的特定芯片(飞思卡尔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
。