Перепробовал кучу возможных вариантов реализации функций для инициализации и чтения, но ничего не получается.
Код пишу в Atmel Studio (AVR) и это принципиально. Проверяю работу программы в Proteus-е.
Проблема заключается в том, что функция ReadByte всегда возвращает 0xFF, хотя данные в образе MMC лежат другие. Есть подозрения, что я криво подключил карту к микропроцессору, потому что при запуске программы, даже если какой-нибудь из контактов оборван или MMC карта вынута из гнезда, функция всё равно возвращает 0xFF (как и при моём подключении).
Для проверки юзаю LCD экран.
Собсна, схему и программный код прикрепляю ниже.
Код:
Спойлер
Код: Выделить всё
#define F_CPU 1000000UL
#define SPI_SS 4
#define SPI_MOSI 5
#define SPI_MISO 6
#define SPI_SCK 7
#include <avr/io.h>
#include <util/delay.h>
void InitSPI(void)
{
DDRB = (1<<PB4)|(1<<PB5) | (1<<PB7);
SPCR = ( (1<<SPE)|(1<<MSTR) | (1<<SPR1) |(1<<SPR0));
}
char ReadByteSPI(char addr)
{
SPDR = addr;
while(!(SPSR & (1<<SPIF)));
addr=SPDR;
return addr;
}
int main(void)
{
InitSPI();
while (1)
{
_delay_ms(100);
lcs_disp(ReadByteSPI(0x00));
}
}
Спойлер




