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

 
 
 
Reply to this topicStart new topic
> 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
AHTOXA
сообщение Feb 28 2008, 19:51
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Не очень понятно. Давайте лучше кусок кода.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 28 2008, 20:58
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(MiklPolikov @ Feb 28 2008, 10:36) *
Что я не так делаю ?

Лучше напишите, что именно посылаете, и что приходит в ответ. Похоже что карточка у Вас лишние клоки ловит.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Feb 29 2008, 14:19
Сообщение #4


Гуру
******

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



Цитата(aaarrr @ Feb 28 2008, 23:58) *
Лучше напишите, что именно посылаете, и что приходит в ответ. Похоже что карточка у Вас лишние клоки ловит.


Например шлю CMD0
Потом начинаю слать FF, что бы получить ответ.
Вижу на осциллоографе, что карточка отвечает 0x01
Но вот беда- этот ответ начинается ПОСЕРЕДИНЕ моего FFа.
То есть в приёмном буфере микроконтроллера оказываются куски ответа.

С CMD1 та же ситуация


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 - Feb 29 2008, 15:11
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 


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


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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
Batt
сообщение Mar 2 2008, 08:53
Сообщение #9





Группа: Новичок
Сообщений: 3
Регистрация: 21-04-06
Пользователь №: 16 367



подтягивающие резисторы к линиям CS, DI, DO подключены? (к DO, по всей видимости, нет)
напряжение питания у карты и у контроллера одинаковые? если нет, как согласовываете уровни?

и еще, строчку SETBIT(SPCR,MSTR) я бы вынес из тела функции send_byte туда, где у вас стоит SETBIT(SPCR,SPE)
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Mar 3 2008, 00:12
Сообщение #10


Гуру
******

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



Купил карту памяти PQI 512 MB . Сразу же всё заработало.
Причём без подтягивающих резисторов и с самыми разными вариациями наличия и отсутствия
FFов перед командами, "кликаньем" и "не кликаньем CS" между байтами.
Короче карточка просто отвечает как надо, и всё.

До этого экспериментировал с тремя Kingston 512Mb, 1Gb, 2Gb. Не работает вообще ни как.

Но устройство-то моё должно работать с любыми картами !

Вопрос : У кого-нибудь Kingston "как надо" работал ?
Или надо программно старт биты искать ?


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


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Вот сдесь, как раз и говорится о начале посылки не кратной 8 битам. Сам пока не проверял, тока начал работу с картой.
http://www.swordgreenline.narod.ru/BookReader.html
Go to the top of the page
 
+Quote Post

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

 


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


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