Цитата(R.Gorsky @ Feb 15 2006, 20:05)

Как долго ты ждешь ответа после CMD1 и что возвращает карточка?
Код
unsigned char CMD[] = {0x41,0x00,0x00,0x00,0x00,0xFF};
Timeout = 0;
while (Write_Command_MMC(CMD)!=0x00)
{
if (Timeout++ > 100)
{
return(2); //Error (Return Code2)
}
}
Цитата(R.Gorsky @ Feb 15 2006, 20:05)

Т.к. ты не описывал схему включения, задам несколько вопросов:
- Какой используется кристалл и какая тактовая частота, с какого порта управляется CS?
Внешний

16Mhz, PB0
Цитата(R.Gorsky @ Feb 15 2006, 20:05)

- Установлен ли керамический блокировочный конденсатор (около 0.1 мкф) по питанию карточки в непосредственной от неё близости?
да. припаян прям к ней между землёй и питанием (земли 2 - замкнуты)
Цитата(R.Gorsky @ Feb 15 2006, 20:05)

- Напряжение питания процессора и карточки в пределах 2.8 - 3.6В?
3.1 - 3.2 у карточки и 5.1 у процессора.
Цитата(R.Gorsky @ Feb 15 2006, 20:05)

- Если процессор и карточка питаются от разных напряжений, как сделаны преобразователи уровней сигналов?
Между карточкой и процессором резисторный делитель 450 и 640 Ом. Пробовал на микрухах типа 155ЛП9, там вообще ответов нет.
Цитата(R.Gorsky @ Feb 15 2006, 20:05)

Для чего устанавливаешь бит SPI2X в SPSR?
А кто сказал что я устанавливаю? (0<<SPI2X) вообщето даёт 0, просто во время тестов 0 менял на 1 и получал 2x - для простоты.
Цитата(R.Gorsky @ Feb 15 2006, 20:05)

Приведи фрагмент кода (желательно на С), где выполняется обращение к каротчке начиная от установки CS= 0 до выдачи байта в карточку.
Код
unsigned char Write_Command_MMC (unsigned char *CMD)
{
unsigned char tmp = 0xff;
unsigned char Timeout = 0;
MMC_Disable();
Write_Byte_MMC(0xFF);
MMC_Enable();
#ifdef DEBUG
printf("\nWRITE: ");
#endif
for (unsigned char a = 0;a<0x06;a++)
{
#ifdef DEBUG
printf("0x%02x ",*CMD);
#endif
Write_Byte_MMC(*CMD++);
}
#ifdef DEBUG
printf("\nREAD: ");
#endif
//Wartet auf ein g№ltige Antwort von der MMC/SD-Karte
while (tmp == 0xff)
{
tmp = Read_Byte_MMC();
#ifdef DEBUG
printf("0x%02x ",tmp);
#endif
if (Timeout++ > 100)
{
break; //Abbruch da die MMC/SD-Karte nicht Antwortet
}
}
#ifdef DEBUG
printf("\n");
#endif
return(tmp);
}
unsigned char Read_Byte_MMC (void)
{
unsigned char Byte = 0;
SPDR = 0xff;
loop_until_bit_is_set(SPSR, SPIF);
Byte = SPDR;
}
void Write_Byte_MMC (unsigned char Byte)
{
SPDR = Byte;
loop_until_bit_is_set(SPSR, SPIF);
}