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

SD-карта работает наполовину

Добрый день всем.

 

Взял с оперкорес контроллер SD карт. Прицепил, контроллер вроде все как надо на шину SD выдает, а вот карта на один запрос отвечает, на другой нет. Кто работал, подскажите куда копать. Я бы свалил на кривые руки, которые прикручивали wishbone корку к ниосу, но сигналы смотрю на шине SD сигналтапом, и они вроде как в порядке...

Вот две картинки: первая - посылаю команду CMD8 (первый байт 0х48) и получаю ответ от SD. Ответ - по спецификации, правильный. Точно таким же макаром посылаю CMD2 (первый байт 0х42)- чтение CID - ответа нет, при этом на шине SD (вторая картинка) вроде все ОК. Частота шины 20 МГц. Деления сверху соответствуют тактам клока.

Верхний сигнал - разрешение выхода CMD.

 

Пробовал так: CMD8->CMD8->CMD2 - на 8 ответ есть, на 2 нет

CMD8->CMD2->CMD8 - опять на cmd8 отвечает в обоих случаях, на cmd2-нет.

 

Вот честно, хз что еще смотреть. Вроде все уже прозрачно...

post-15968-1353917309_thumb.jpg

post-15968-1353917314_thumb.jpg

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


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

Пробовал так: CMD8->CMD8->CMD2 - на 8 ответ есть, на 2 нет

CMD8->CMD2->CMD8 - опять на cmd8 отвечает в обоих случаях, на cmd2-нет.

Вот честно, хз что еще смотреть. Вроде все уже прозрачно...

Так и не должно работать. Не была проведена процедура инициализации и в данном состоянии карты (IDLE) ответа на команду 2 и не должно быть

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


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

Так и не должно работать. Не была проведена процедура инициализации и в данном состоянии карты (IDLE) ответа на команду 2 и не должно быть

 

Ну если всю последовательность смотреть - то получается по программе у меня так:

 

CMD0-> ждем таймаут -> CMD8 -> получаем правильный ответ -> CMD2 -> нет ответа.

 

Получается надо после CMD8 CMD0(IDLE) поставить? Или в каком состоянии ответ на CMD2 надо ждать?

 

Софт опенкоровский, последовательность команд не менял в процедуре инициализации. Неужто неверно там?

Если не трудно, может приведете правильную последовательность для чтения CID (CMD2)? В спецификации так сразу никаких дополнительных требований не заметил (в смысле из какого состояния CMD2 можно вызывать)...

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


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

Если не трудно, может приведете правильную последовательность для чтения CID (CMD2)? В спецификации так сразу никаких дополнительных требований не заметил (в смысле из какого состояния CMD2 можно вызывать)...

В спецификации именно это и показано - посмотрите диаграмму инициализации например. Команду CMD2 можно выполнить только в состоянии READY. Последовательность команд для перевода карты из состояния IDLE в READY зависит от типа карты (для HC-карт необходимо выполнить CMD8 + выставить бит HCS в аргументе ACMD41 например)

 

Процедура инициализации описана в главе "Card Identification Mode" спецификации

Список команд и режимы работы карты в "Card State Transition Table"

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


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

После CMD8 надо ACMD41 и только потом CMD2 .

 

Инициализация проводится на частоте идущей на карту 100 - 400 КГц

 

Посмотрите SD спецификацию (она идет с исходниками контроллера) там есть рисунки

диаграм инициализации.

 

Речь идет об этом контроллере ?

 

http://opencores.org/project,sdcard_mass_storage_controller

 

Если используется вариант 8-битный, то там есть ошибочка - при записи

перепутаны тетрады в байте а в остальном работает.

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


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

После CMD8 надо ACMD41 и только потом CMD2 .

 

Инициализация проводится на частоте идущей на карту 100 - 400 КГц

 

Посмотрите SD спецификацию (она идет с исходниками контроллера) там есть рисунки

диаграм инициализации.

 

Речь идет об этом контроллере ?

 

http://opencores.org/project,sdcard_mass_storage_controller

 

Если используется вариант 8-битный, то там есть ошибочка - при записи

перепутаны тетрады в байте а в остальном работает.

 

Большое спасибо, сейчас попробую. Про 100-400 кгц упустил, перевыкурю спецификацию. А можно ссылки на исходники контроллера (от спецификации)? В моей спецификации нет таких ...

 

Контроллер - да, в точку, он самый, 8-битный. Только не заметил я перемену тетрад, команда нормально проходит, это в данных? А разве не учтено в контроллере 100-400 кГц? там ведь клок всегда один - вишбоновский, не переключается.

Если не жалко, можете скинуть исходники инициализации и чтения / записи ?

И еще при компиляции у меня он сказал, что три-стейт выходы на данные нет необходимости ставить... Еще не разбирался с этим, не дошел, у вас не было такого?

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


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

Вот проект на котором пробовал этот контроллер. Плата Spartan-3E Starter Kit HW-SPAR3E-SK

с подпаяным SD разъемом. Процессор - софтпроцессор Lattice LM8, lm8_prg.s - программа на ассемблере LM8

(Он несложный, разобраться с последовательностью команд можно.)

Она инициализирует карту и читает 0 сектор выводя отладочные данные в COM порт.

Вот проверил сейчас с картой 512 МБ

term.txt - результат работы. SDHC под рукой нет, но инициализацию она тоже проходила, чтение не пробовал.

По записи, к сожалению, примеров нет, все это было 2 года назад и частично потерялось.

 

sd_clk - программируется, и может быть не больше чем половина вишбона

 

SD спецификация - файл Simplified_Physical_Layer_Spec-1.pdf в документации к исходникам контроллера

 

И да, тетрады поменяны при записи данных.

Три-стейт -если речь идет об sd_dat то надо, посмотрите в моем примере

lm8m_sd2.7z

Изменено пользователем gk2

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


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

В общем, все равно на CMD2 не отвечает. Делаю сейчас так как написано в спецификации, Card Initialization and identification process:

 

CMD0 -> жду таймаут, ответа нет

CMD8 -> получаю ответ "compatible voltage and check pattern correct"

CMD55 -> получаю ответ R1, в регистре card status = 0x00000120 имею следующее: поле current_state =0 (Idle), Ready for data = 1, APP_CMD=1. Остальные биты в нуле.

CMD41 -> получаю ответ R3, ответ OCR=0xff800001, т.е. busy=1 (не занята), CCS=1 (high capacity card), диапазон питаний 3.5-3.6В

CMD2 -> Нет ответа

CMD3 -> Нет ответа

 

Что теперь не так?

 

PS Частоту не менял, так на 20 МГц и читаю, но вроде ответы то адекватные до CMD2...

PPS Пока писал, gk2 прислал проект, огромное спасибо, посмотрю, сравню.

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


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

Большое спасибо, gk2! C Вашим алгоритмом все получилось. Инициализация проходит как надо, хоть больших, хоть маленьких карт, клок оставил 20 МГЦ - с ним все работает. До данных не добрался еще, начинаю копать...

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


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

С данными вопрос возник: после чтения блока получаю блок данных, как положено, данные те что ожидаю, но после 1024 тактов (512 бай, по 2 тетрады на байт), а после еще 17 тетрад какой-то лабуды. Хотел было списать на CRC, но в спецификации вроде CRC16 - 4 тетрады. Пицепляю картинку сигналтапа (вверху видно что после 1024 - го такта сыплется еще что-то. Это что-то остается в FIFO, конечно можно его (фифо) чистить перед чтением, но охота разобраться, что это такое. Кто знает, поскажите пожалуйста.

 

UPD: Все, разобрался, CRC для каждой линии данных своя, 16-битная, все сходится.

post-15968-1354112368_thumb.jpg

post-15968-1354112375_thumb.jpg

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


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

Хотел было списать на CRC, но в спецификации вроде CRC16 - 4 тетрады.

Для каждой линии 16.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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