Для начала просмотрел этот топик и ссылки с него.
https://kazus.ru/forum/topic_12548-0-asc-0.html
С учетом замечаний получился такой код.
//////////////////////////////////
unsigned char SPI(unsigned char d)
{
unsigned char received = 0;
SPDR = d;
while(!(SPSR & (1‹‹SPIF)));
received = SPDR;
return (received);
}
/////////////////////////////////////////////////////////////////////////////////
unsigned char Command(unsigned char Com,unsigned long int Adr,unsigned char CRC )
{
SPI(Com);
SPI(Adr››24);
SPI(Adr››16);
SPI(Adr››
![Горд собой](images/smilies/icon_dovl.gif)
;
SPI(Adr);
return SPI(CRC);
}
////////////////////////////
unsigned char MMC_Init(void)
{
unsigned char i=0,b=0;
SPICS=1; // disable MMC
for(i=0; i ‹ 10; i++) SPI(0xFF);
SPICS=0; // enable MMC
b=Command(0x40,0,0x95);
i=0;
while (b!=1)
{
i++;
b=SPI(0xFF);
if (i==0) return 1;
}
b=Command(0x41,0,0xFF);
i=0;
//buf2[i]=b;
while (b!=0)
{
i++;
b=SPI(0xFF);
//buf2[i]=b;
if (i==0) return 2;
}
return 0;
}
////////////////////////////////////////////////////////////////////////////
main
SPCR=0b01010010;;
SPSR=0x00;
SPICS=1; // disable MMC
/////////////////////////////////////////////////
Получил ответ 0х01 при посылке команды 0х40,все ОК!
Но в ответ на команду 0х41 получаю опять 0х01????
Начал записывать в буфер последовательность ответов.
Для команды 0х40 ответы {FF,FF,01} как говорится то что доктор прописал.
А для команды 0х41{FF,FF,01,FF,FF и далее одни FF}, а где же ожидаемое 0х00???
Перепробывал все режимы SPI, в 3 режиме то же самое, а в 1 и 2 вместо 0х01 получил 0х80 совсем ни туда.
Где грабли???