我正在尝试通过程序SPI在MicroSD卡上读/写。通过示波器,我看到CS和MOSI和CLK工作正常。 通过"纠正"我的意思是CS已经启动,但是当我发送CMD时它很低,然后再次上升; MOSI在第一个CLK之前正确发送CMD,此时在MISO中我试图捕捉到一些东西; CLK:它使前沿之间的时钟大约为4 uS。 我发送的CMD0高于10 x 0xFF,我在任何CMD之后都这样做。 我发送:
SPI_send(CMD0, (unsigned long) 0x00, 0x95);
SPI_send(CMD8, (unsigned long) 0x01AA, 0x87);
SPI_send(CMD58, (unsigned long) 0x00, 0x01);
但我所看到的就是MISO上的1。
只有在读卡器中使用MicroSD卡时才会发生这种情况。如果不是,MISO总是1。
我尝试的MicroSD卡是2和4 Gb。可能是有意义的。如果我将它们连接到我的电脑,它们就可以工作。
如果它有帮助,我会在这里写代码来写字节
for(int bit = 0; bit < 8; bit++)
{
if (byte & 0x80)
PORTG |=SPI_MOSI;
else
PORTG &= ~SPI_MOSI;
PORTG |= SPI_CLK;
byte |= (PINE & SPI_MISO)>>6;
byte <<= 1;
PORTG &= ~SPI_CLK;
}
感谢您的帮助!