реклама на сайте
подробности

 
 
> SD карта памяти в SPI режиме...., Очень простой вопрос
MiklPolikov
сообщение Feb 28 2008, 07:36
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Почему моя карточка отвечает не синхронно с передачей в неё байта ?
Т.е первая половина ответа карточки приходится на первый передаваемый в неё байт (FF), а вторая половина-на следующий. Конечно же мой контроллер этот ответ принять не может.
Что я не так делаю ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MiklPolikov
сообщение Mar 1 2008, 00:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Излогаю проблему ещё раз, максимально полно. Расчитываю на помощь !

Ответы карточки не синхронны с FFами, которые я в неё шлю, что бы принять ответ.
Т.е. первая половина ответа приходится на один FF, а вторая-на следующий.
Поэтому из приёмного буфера SPI в МК я получаю непойми что. Хотя на экране осциллографа видно,
что карточка отвечает- проблема только в том, что я этот ответ не могу принять. Что я не так делаю ???

Всё на прикреплённых картинках. И код- на всякий случай.

void sent_byte(char B )
{
SETBIT(SPCR,MSTR ); // Контроллер будет Master
SPDR=b; // Начинаем передачу
while (!TESTBIT(SPSR,SPIF )) {} ; //Ждём завершения передачи
data=SPDR;
if (!TESTBIT(data,0x07 )) received_data=data;
}

.........
CLEARBIT(PORTB,CS ); //Сбрасываем CS

sent_byte(0xFF );

sent_byte(0x40); //Передаём CMD0
sent_byte(0x0);
sent_byte(0x0);
sent_byte(0x0);
sent_byte(0x0);
sent_byte(0x95);



sent_byte(0xFF); //Ждём ответ
sent_byte(0xFF); //
sent_byte(0xFF); //
sent_byte(0xFF); //
sent_byte(0xFF); //
sent_byte(0xFF); //

Сообщение отредактировал MiklPolikov - Mar 1 2008, 00:58
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 1 2008, 08:19
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(MiklPolikov @ Mar 1 2008, 03:56) *
Что я не так делаю ???

1. Не сочли за труд ознакомиться с многочисленными постами Ваших многочисленных предшественников или хотя-бы с официальными/полуофициальными документами.
2. Начали засорять форум дублями сообщений.
Все остальное следствие п.1
а) кто будет давать пачку клоков после включения питания?
б) почему Вы решили, что карточка обязана сразу ответить чем-то разумным? - ждите R1_IDLE в течение не менее 8 посылок.
в) кто будет отмечать CS начало CMD00?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Mar 1 2008, 10:32
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата
Все остальное следствие п.1
а) кто будет давать пачку клоков после включения питания?
б) почему Вы решили, что карточка обязана сразу ответить чем-то разумным? - ждите R1_IDLE в течение не менее 8 посылок.
в) кто будет отмечать CS начало CMD00?


Всё сказанное Вами я делаю .
Сначала 20 FF при высоком CS, потом жду ~10mS .
"кликаю" сигналом CS перед каждым отправляемым байтом.
И шлю очень много посылок.

Сообщение отредактировал MiklPolikov - Mar 1 2008, 10:33
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 1 2008, 10:57
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(MiklPolikov @ Mar 1 2008, 13:32) *
Всё сказанное Вами я делаю .

Нет. Абсолютно каноническая процедура перевода в SPI режим после включения питания
0. Подать питание
1. Выждать не менее ms
2. Не менее 74 тактовых импульсов при Hi CS и MOSI
3. Lo CS
4. Команда СMD00 (сразу, не опрашивая готовностей, не посылая еще 0xFF и прочих телодвижений )
5. до 8 посылок 0xFF c контролем получения IDLE.
6. Hi CS
Если не получилось - повторить с пункта 2 - бывает sad.gif
Если не получилость - проверить, а CS конкретно до карточки доходит??
Если не получилось - пробуем с другой карточкой.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 01:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01429 секунд с 7
ELECTRONIX ©2004-2016