Перейти к содержанию
    

Осваиваю MMC SPI mode

Всем привет!

Народ, кто с 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 после команды.

 

Хотя, отмечу, код работоспособный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Почитайте спецификацию со стр. 107 и ниже ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитайте спецификацию со стр. 107 и ниже ;)

 

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

 

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

 

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

 

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

 

Правильно я понимаю спецификацию MMC или нет ???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно понимаете - нужно передавать 0xFF, и анализировать 7-й бит у принимаемых данных: в ответе он станет равен '0'.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно понимаете - нужно передавать 0xFF, и анализировать 7-й бит у принимаемых данных: в ответе он станет равен '0'.

Понял, спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Что-то не найду в спецификации подробного описания адресации массива данных.

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

Возникает какая-то неоднозначность. Где я ошибся?

 

И еще, если мне надо изменить 1 байт в MMC карте (например в таблице размещения файлов), получается нужно считать сектор, внести изменения и записать сектор. Других путей нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но размер сектора я ведь могу изменить, (кажется размер сектора сидит в CSD регистре) тогда, то тот-же адрес будет ссылаться на другой байт (начало сектора).

Возникает какая-то неоднозначность. Где я ошибся?

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

 

И еще, если мне надо изменить 1 байт в MMC карте (например в таблице размещения файлов), получается нужно считать сектор, внести изменения и записать сектор. Других путей нет?

Увы, нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ, дайте, pls, ссылочку на MultiMediaCard system specification version 4.X

на мыло [email protected] да и примеры какие желательно для PICа

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...