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

 
 
> Осваиваю MMC SPI mode, работает, но есть вопросы...
AndreyVN
сообщение Nov 15 2006, 12:33
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Всем привет!
Народ, кто с MMC в SPI режиме работал? Хочу уточнить следующий момент.
Я отправляю в карточку команду, которая состоит из 6 байт. Если верить спецификации, то ответ (R1) генериться карточкой после первого байта команды (в котором сидит код команды, CMD0, CMD1...).
Код который я использую, естественно, из Интернета:

Цитата
char MMC_cmd(char befF, unsigned int AdrH, unsigned int AdrL, char befH)
{

MMC_spi(0xff);
MMC_spi(befF);
MMC_spi( (unsigned char) (AdrH>>8) );
MMC_spi( (unsigned char) (AdrH & 0xff) );
MMC_spi( (unsigned char) (AdrL>>8) );
MMC_spi( (unsigned char) (AdrL & 0xff) );
MMC_spi(befH);
MMC_spi(0xff);
return MMC_spi(0xff);
}


Не могу понять, зачем перед первым и после последнего байтов шлются FF, и почему ответ читается после всей посылки, да еще и 2 раза по FF после команды.

Хотя, отмечу, код работоспособный.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
aaarrr
сообщение Nov 15 2006, 13:03
Сообщение #2


Гуру
******

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



Цитата
Если верить спецификации, то ответ (R1) генериться карточкой после первого байта команды

Почитайте спецификацию со стр. 107 и ниже wink.gif
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение Nov 16 2006, 06:24
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата
Почитайте спецификацию со стр. 107 и ниже wink.gif


Да, перечитал более внимательно, действительно до и после команды, следует подавать FF, как я догадываюсь это надо чтобы не прекращалось тактирование SPI интерфейса.

Но теперь возник вопрос по таблице 43 (Timing Values).

Все интервалы (Ncs, Ncr..), даны в некоторых интервалах, например от 1...8 байт. То есть, MMC может ответить после одного байта FF, а может зависнуть до 8 байт FF. А в исходном коде в нее кинули 2 байта FF и считываем ответ.

Получается, следует слать до 8 байт высокого уровеня (FF) и анализировать готовность приемного буфера SPI интерфейса.

Правильно я понимаю спецификацию MMC или нет ???
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 16 2006, 06:49
Сообщение #4


Гуру
******

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



Правильно понимаете - нужно передавать 0xFF, и анализировать 7-й бит у принимаемых данных: в ответе он станет равен '0'.
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение Nov 16 2006, 09:08
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата(aaarrr @ Nov 16 2006, 09:49) *
Правильно понимаете - нужно передавать 0xFF, и анализировать 7-й бит у принимаемых данных: в ответе он станет равен '0'.

Понял, спасибо.
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение Nov 23 2006, 13:45
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Вот и еще вопросик возник.

Что-то не найду в спецификации подробного описания адресации массива данных.
Вроде адресация линейная. Читается из карты только сектор целиком, значит адресоваться должен тоже сектор. Но размер сектора я ведь могу изменить, (кажется размер сектора сидит в CSD регистре) тогда, то тот-же адрес будет ссылаться на другой байт (начало сектора).
Возникает какая-то неоднозначность. Где я ошибся?

И еще, если мне надо изменить 1 байт в MMC карте (например в таблице размещения файлов), получается нужно считать сектор, внести изменения и записать сектор. Других путей нет?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 23 2006, 13:56
Сообщение #7


Гуру
******

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



Цитата(AndreyVN @ Nov 23 2006, 13:45) *
Но размер сектора я ведь могу изменить, (кажется размер сектора сидит в CSD регистре) тогда, то тот-же адрес будет ссылаться на другой байт (начало сектора).
Возникает какая-то неоднозначность. Где я ошибся?

В регистре CSD это поле только для чтения. Размер блока можно установить командой CMD16, но значение, отличное от 512, как правило, вызывает ошибку при попытке записи. Кроме того, CMD16 не является обязательной для реализации.

Цитата(AndreyVN @ Nov 23 2006, 13:45) *
И еще, если мне надо изменить 1 байт в MMC карте (например в таблице размещения файлов), получается нужно считать сектор, внести изменения и записать сектор. Других путей нет?

Увы, нет.
Go to the top of the page
 
+Quote Post
hserg
сообщение Jan 11 2007, 11:16
Сообщение #8





Группа: Новичок
Сообщений: 3
Регистрация: 11-01-07
Пользователь №: 24 307



Народ, дайте, pls, ссылочку на MultiMediaCard system specification version 4.X
на мыло hserg@beholder.ru да и примеры какие желательно для PICа
Go to the top of the page
 
+Quote Post
umup
сообщение Feb 5 2007, 23:05
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 2-06-06
Пользователь №: 17 720



вот
Go to the top of the page
 
+Quote Post

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

 


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


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