Форум по микроконтроллерам: Работа с SD/MMC картой. - Форум по микроконтроллерам

Перейти к содержимому

  • 2 Страниц +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Работа с SD/MMC картой.

#1 Пользователь офлайн   nick14 

  • Группа: Администраторы
  • Сообщений: 1 471
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 08 Апрель 2013 - 19:07

Здесь можно задать вопросы по статье " Работа с SD/MMC картой "
0

#2 Пользователь офлайн   viktor_36 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 43
  • Регистрация: 07 Июль 11

Отправлено 11 Апрель 2013 - 20:30

Нашел схему сопряжения по питанию микроконтроллера с ММС картой. Вывод CS не обязательно согласовывать?

Прикрепленное изображение: MMC_pic16.JPG
0

#3 Гость_dosikus_*

  • Группа: Гости

Отправлено 11 Апрель 2013 - 20:37

CS активный уровень - низкий .
Для таких схем эти согласователи уровней большое зло . Лучше выбрать камень с 3v . Подтяжку к 3v со стороны MMC .
И очень важно, что карты не хило кушают ...

#4 Пользователь офлайн   nick14 

  • Группа: Администраторы
  • Сообщений: 1 471
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 11 Апрель 2013 - 21:01

Вообще схема то рабочая?
Не очень понятно зачем стоит на входе пика (SDI) делитель. Напряжение и так ниже.....
1

#5 Гость_vassabi_*

  • Группа: Гости

Отправлено 03 Май 2013 - 04:31

Вот читаю статью (в том числе оригинал и первый перевод оригинала ;)) и немогу никак разобраться, как должна выглядеть команда ACMD41(*1) (*1:ACMD означает последовательность команд CMD55, CMD.)
В оригинале еще есть сноска для списка аргументов этой команды - *2: Rsv(0)[31], HCS[30], Rsv(0)[29:0]
И что в конечном итоге должно "поехать" в SPI?

#6 Пользователь офлайн   nick14 

  • Группа: Администраторы
  • Сообщений: 1 471
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 03 Май 2013 - 20:23

Просмотр сообщенияvassabi (03 Май 2013 - 04:31) писал:

Вот читаю статью (в том числе оригинал и первый перевод оригинала ;)) и немогу никак разобраться, как должна выглядеть команда ACMD41(*1) (*1:ACMD означает последовательность команд CMD55, CMD.)
В оригинале еще есть сноска для списка аргументов этой команды - *2: Rsv(0)[31], HCS[30], Rsv(0)[29:0]
И что в конечном итоге должно "поехать" в SPI?


При работе SD/MMC картой применяется для инициализации команда CMD1.
SDC-картах в случае отклонения команды CMD1 рекомендуется использовать команду ACMD41, которая состоит из последовательность команд CMD55 и CMD41, т.е. необходимо дать команду CMD55 дождавшись ответа R1, дать CMD41.
Что касается аргументов в команде ...если не трудно киньте ссылку на оригинал , который Вы читаете.

0

#7 Гость_vassabi_*

  • Группа: Гости

Отправлено 03 Май 2013 - 20:33

Цитата

... т.е. необходимо дать команду CMD55 дождавшись ответа R1, дать CMD41...

Т.е. CMD55 вместо CMD1? А затем CMD41 и ждать ответ 0х00?
У меня получается карточка отвечает 0x01 на CMD0, шлю CMD1 она опять же отвечает 0х01...

ссылка 1
ссылка 2

#8 Пользователь офлайн   nick14 

  • Группа: Администраторы
  • Сообщений: 1 471
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 03 Май 2013 - 21:05

Просмотр сообщенияvassabi (03 Май 2013 - 20:33) писал:

Т.е. CMD55 вместо CMD1? А затем CMD41 и ждать ответ 0х00?
У меня получается карточка отвечает 0x01 на CMD0, шлю CMD1 она опять же отвечает 0х01...


На CMD0 ждем процесса инициализации ответ R1 (0x01). После этого посылаем CMD1 и ждем (посылаем по SPI 0хFF) пока не получим ответ 0x00. Ответ может занимать длительное время, Вы похоже просто не дожидаетесь ответа.
0

#9 Гость_vassabi_*

  • Группа: Гости

Отправлено 03 Май 2013 - 23:03

Цитата

Вы похоже просто не дожидаетесь ответа.
Исключено, я в цикле пробовал ждать (с активным СS и посылкой 0xff, естественно). На CMD1 ответ тоже 0х01...
Сейчас еще попробую последовательность CMD55-CMD41...

#10 Гость_vassabi_*

  • Группа: Гости

Отправлено 04 Май 2013 - 02:09

Странно, но флешка отвечает 0х00 только после последовательности CMD0(0х01) -> CMD1(0х01) -> CMD1(0х00)
Такое возможно?

#11 Пользователь офлайн   nick14 

  • Группа: Администраторы
  • Сообщений: 1 471
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 04 Май 2013 - 06:18

Просмотр сообщенияvassabi (04 Май 2013 - 02:09) писал:

Странно, но флешка отвечает 0х00 только после последовательности CMD0(0х01) -> CMD1(0х01) -> CMD1(0х00)
Такое возможно?

Попробуйте в конце и в начале команды давать байт 0xFF.
0

#12 Гость_vassabi_*

  • Группа: Гости

Отправлено 04 Май 2013 - 16:44

Цитата

Попробуйте в конце и в начале команды давать байт 0xFF.

Что-то у меня не получается...
Гляньте, пробую делать вот так:
Скрытый текст


Ответ на инициализацию получаю иногда такой:
255 255 255 255 255 255 255   1 255 
255 255 255 255 255 255 255   1 255 
255 255 255 255 255 255 255   0 255

... а иногда вот такой:
255 255 255 255 255 255 255   1 255 
255 255 255 255 255 255 255   1 255 
208   0   0   0   0  37 127   0 255


Ответ на команду CMD17 выглядит вот так:
255 255 254 176   0   0   0   0   0 127 255

Сообщение отредактировал vassabi: 04 Май 2013 - 21:40


#13 Гость_vassabi_*

  • Группа: Гости

Отправлено 04 Май 2013 - 17:49

Поправил функцию _SDC_Get_xxx, что бы ждала 0xfe и затем читала 512 байтов...

Ответ на команду:
255 255 255 255 255 255 255   0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254

Прием 512-ти байтов:
176   0   0   0   0   3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 128   0   0   0   1  43 255 255 255 255 255 255 255 255 255............ и так далее

Что скажете, похоже на правду?

Текущий вариант кода:
Скрытый текст

Сообщение отредактировал vassabi: 04 Май 2013 - 17:57


#14 Пользователь офлайн   nick14 

  • Группа: Администраторы
  • Сообщений: 1 471
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 04 Май 2013 - 18:22

Скачайте программу WinHex , ей очень удобно смотреть содержимое карт...
0

#15 Гость_vassabi_*

  • Группа: Гости

Отправлено 04 Май 2013 - 18:31

Цитата

Скачайте программу WinHex , ей очень удобно смотреть содержимое карт...

В смысле чтобы проверить содержимое? К сожалению сейчас не смогу, т.к. карточка была одна с большим формфактором объемом до 2Гб и я уже проделал с ней вот это :moil:
Чтобы не заморачиваться на макетке...

http://forumimage.ru/thumbs/20130504/136768150475914017.jpg

Сообщение отредактировал vassabi: 04 Май 2013 - 18:32


#16 Гость_vassabi_*

  • Группа: Гости

Отправлено 04 Май 2013 - 21:38

Вроде со всем разобрался, читает/пишет (пока пробовал только поблочно).
Осталась одна проблема - возвращает байт подтверждения записи 0х00...
Пока пишу пакет проходит как положено (карта молчит), после пакета шлю два байта CRC - ответы 0х00, дальше читаю один байт (0xff) - ответ 0х00.
В чем еще прикол, где я не досмотрел?

Цитата

По этому процесс инициализации (CMD1) необходимо практически каждый раз повторять при чтении/записи блока данных или делать проверку состояния карты.

Это наверное особенности именно вашей карточки, т.к. у меня например в idle вообще не сваливается...

=====================
Вроде проясняется...
Карта сразу после записи последнего байта, на посыл бвух байтов CRC два раза отвечает 0x00, в место байта подтверждения отвечает тоже 0х00,
и потом 0х00 еще в течении 512 бйтов (запросов 0xff), и только потом байт подтверждения 0хD5,
опрашиваю дальше - опять в течение 512 байтов возвращает 0х00 потом 0хD5 и так до бесконечности.
При этом запись/чтение проходит без проблем, т.е. реакция (ответы) на CMD17 и CMD24 адекватная...

Сообщение отредактировал vassabi: 04 Май 2013 - 22:44


#17 Гость_vassabi_*

  • Группа: Гости

Отправлено 05 Май 2013 - 11:50

Цитата

Карта сразу после записи последнего байта, на посыл бвух байтов CRC два раза отвечает 0x00, в место байта подтверждения отвечает тоже 0х00,
и потом 0х00 еще в течении 512 бйтов (запросов 0xff), и только потом байт подтверждения 0хD5,
опрашиваю дальше - опять в течение 512 байтов возвращает 0х00 потом 0хD5 и так до бесконечности.
При этом запись/чтение проходит без проблем, т.е. реакция (ответы) на CMD17 и CMD24 адекватная...

Ребят, ни у кого нет мыслей по этому поводу?

#18 Пользователь офлайн   nick14 

  • Группа: Администраторы
  • Сообщений: 1 471
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 05 Май 2013 - 13:01

Просмотр сообщенияvassabi (05 Май 2013 - 11:50) писал:

Цитата

Карта сразу после записи последнего байта, на посыл бвух байтов CRC два раза отвечает 0x00, в место байта подтверждения отвечает тоже 0х00,
и потом 0х00 еще в течении 512 бйтов (запросов 0xff), и только потом байт подтверждения 0хD5,
опрашиваю дальше - опять в течение 512 байтов возвращает 0х00 потом 0хD5 и так до бесконечности.
При этом запись/чтение проходит без проблем, т.е. реакция (ответы) на CMD17 и CMD24 адекватная...

Ребят, ни у кого нет мыслей по этому поводу?


После передачи блока данных для записи (512 байт + 2 байта CRC) должен прийти байт подтверждения, а после этого нужно ждать окончания записи блока (до изменения байта 0х00).
Мне кажется нужно посмотреть не пропущен ли байт подтверждения?
А вообще запись то производится в блок ? Что читается после записи?
0

#19 Гость_vassabi_*

  • Группа: Гости

Отправлено 05 Май 2013 - 14:34

Цитата

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

Я же написал, вместо байта подтверждения приходит 0х00...

Цитата

А вообще запись то производится в блок ? Что читается после записи?

Я и пишу в блок (512 байтов), и читается то, что записал.
Проблема только в том, что не вижу байт подтверждения.
Вот на картинке отмечено место, сразу после двух байтов CRC шлю 0xff для чтения байта подтверждения, а получаю в ответ 0х00.
http://forumimage.ru/thumbs/20130505/136775364317519274.jpg

Затем карточка отвечает 0х00 еще 512 раз, и только потом приходит что-то похожее на байт подтверждения 0хD5...

======================
Я уже предполагал, что это алгоритм работы конкретной карточки, что она сначала сваливается в busy и только потом выдает байт подтверждения...
Но тогда какого она отвечает 0хD5 каждые 512 байт?

Сообщение отредактировал vassabi: 05 Май 2013 - 14:39


#20 Гость_vassabi_*

  • Группа: Гости

Отправлено 07 Май 2013 - 21:49

Нашел официальный документик по SD-картам с описанием системы команд, SPI режима и всех регистров!
Может кому пригодится...

Прикрепленные файлы

  • Прикрепленный файл  part1_410.pdf (1,88МБ)
    Количество загрузок:: 822

Сообщение отредактировал vassabi: 07 Май 2013 - 21:58


Поделиться темой:


  • 2 Страниц +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей