Чтение с SD карты в режиме SPI (atmega16)

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 1
Зарегистрирован: Пн сен 18, 2017 12:53:29

Сообщение andreysadda »

Всем привет, несколько дней ползаю по просторам интернета в поиске информации по тому, как считывать данные с SD карты.
Перепробовал кучу возможных вариантов реализации функций для инициализации и чтения, но ничего не получается.
Код пишу в 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));
    }
}
Схема:
СпойлерИзображение
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Во первых Вам надо более внимательно ознакомится с SPI. Регистр SPDR это циклический сдвиговый регистр. Т.е. отправляя что-то, в него тут же что-то принимается.
Даже если предположить что адрес флешки адресуется одним байтом. То отправив адрес, флешка еще ничего не отправляла назад и рано читать SPDR. Флеш отправит данные потом, но так как она слейв, то ей нужна тактовая частота. Чтобы она пошла, надо что-то еще отправить. Т.е. после адреса, вы опять кладете что-то в SPDR и только после этого можно что-то прочитать.

Я со флешкой такой не работал, протокол ее не знаю. Приходилось рабатать с AT25. Протокол приблизително такой. Мастер дает спад на линии CS. Затем отправляет команду, затем трехбайтный адрес и только после этого чтение. И как я уже сказал, чтобы прочитать байт, надо байт отправить.

В настройках не забыть про CPOL и CPHA и младшим или старшим битом вперед байт.

Добавлено after 2 minutes 12 seconds:
Вот, что-то подобное.
СпойлерИзображение
Согласно этой диаграмме, чтобы прочитать один байт, нужно четыре раза положить что-то в SPDR и только потом прочесть один байт.

Добавлено after 6 minutes 26 seconds:
Z_h_e писал(а):чтобы прочитать один байт, нужно четыре раза положить
Вернее 5.
Вложения
spi.png
(26.54 КБ) 606 скачиваний
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Наиболее разумное решение - использовать библиотеку работы с SD/ММС-картами от Chan-а. гуглится сразу.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

А по-мне для обучения и понимания, чужой код без вникания самое не разумное. А если вникать досконально, то на это потратишь не меньше времени, чем на свой код.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Z_h_e писал(а):для обучения и понимания, чужой код без вникания самое не разумное
позвольте с вами не согласиться. но спорить не буду
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Посмотрите тут мой драйвер http://radiokot.ru/forum/viewtopic.php?f=59&t=91454
Возможно поможет что-то понять вам.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Реклама
Ответить

Вернуться в «AVR»