PDA

Просмотр полной версии : Подключение SD карты



Lisitsin
16.11.2013, 20:00
Приветствую!
Кто может помочь советом в подключении SD карты?
Имею желание прикрутить SD карту к AVR ZX Spectrum. Стал разбираться и уткнулся в контрольную сумму. В спецификации на SD карты от SD Group (версия 3.01) https://dl.dropboxusercontent.com/u/12408899/SD%20PHISICAL%20LAYER%20SPECIFICATION.zip
на стр. 116 в разделе 7.2.2 сказано, что команда CMD8 всегда проверяется на контрольную сумму. CMD8 рекомендуется использовать при инициализации карты.
Кто может объяснить как реализовать на ассемблере подсчёт контрольной суммы, описанный в разделе 4.5?
Буду премного благодарен!

tnt23
16.11.2013, 20:11
Если SD подключается по SPI, то там можно CRC пренебречь.

http://elm-chan.org/docs/mmc/mmc_e.html

Lisitsin
16.11.2013, 20:24
Если SD подключается по SPI, то там можно CRC пренебречь.

http://elm-chan.org/docs/mmc/mmc_e.html

Да, но не в случае CMD8. Она всегда проверяет CRC: (раздел 7.2.2) The CMD8 CRC verification is always enabled.
CMD8 необходима для выяснения к какой спецификации относится карта. Эта команда была введена в версии 2.0

matr0s
16.11.2013, 21:35
При определении версии карты аргументом CMD8 вроде указывается "0x000001AA". На Си команда у меня выглядела примерно так:
sd_cmd(SEND_IF_COND,0x000001AA)

ASDT
16.11.2013, 22:24
Т.е. команда не изменяется и к.с. можно задать константой

Lisitsin
16.11.2013, 22:40
При определении версии карты аргументом CMD8 вроде указывается "0x000001AA". На Си команда у меня выглядела примерно так:
sd_cmd(SEND_IF_COND,0x000001AA)

А какая там crc получается?

ASDT
16.11.2013, 22:48
google говорит 0x87.

Lisitsin
17.11.2013, 10:32
google говорит 0x87.

Премного благодарен за ответ, сейчас буду пробовать.

matr0s
17.11.2013, 10:58
Посмотрел в исходнике - точно к.с. 0х87. Т.е. для CMD8 на карту подается последовательность 0х48(код команды), 0х000001АА(аргумент), 0х87(crc).
Любой ответ карты, кроме 0х01, говорит о первой версии, иначе - вторая.

Lisitsin
17.11.2013, 13:23
Чёт 0х78 для CMD8 0x000001AA у меня не идёт ... Ошибка CRC пишет ...

---------- Post added at 13:11 ---------- Previous post was at 13:04 ----------

Туплю ... Вбиваю 0x78 вместо 0x87 ...

---------- Post added at 13:23 ---------- Previous post was at 13:13 ----------

Отвечает: 01 00 00 01 AA, Всё нормально !

Lisitsin
17.11.2013, 20:53
Люди, ещё появилась проблема.
Пытаюсь отправить ACMD41. Выставляю на CS ноль. Передаю команду 55 с нулевым аргументом и нулевой КС. Ставлю CS в единицу. Делаю паузу порядка 3 мкС. Снова CS в ноль. Передаю команду 41. В ответ вместо response R3 вижу R1 = 0x01. Чё это? Что я не правильно делаю?

---------- Post added at 20:53 ---------- Previous post was at 20:28 ----------

Всё, разобрался. В SPI режиме он отвечает как R1 ...

Lisitsin
18.11.2013, 21:21
Опять какая-то фигня. Пытаюсь прочитать нулевой сектор отформатированной в FAT32 SD карты 16 G. Результат чтения - 512 байт пишу в eeprom контроллера. Читаю командой cmd17. Правда, не знаю как CS делать. Пробовал по-всякому, и держать в нуле и поднимать ненадолго в 1 перед чтением самого блока данных. Результат всегда разный. Например, как во вложении. Что-то не похоже на правду ...

Lisitsin
18.11.2013, 21:29
Читаю байт за байтом, последовательно 512 раз, с CS в нуле.

ILoveSpeccy
21.11.2013, 16:27
Можете посмотреть тут: http://elm-chan.org/docs/mmc/mmc_e.html
Или скачайте примеры FAT-библиотеки, там всё понятно в исходникак как и что.

ILoveSpeccy
21.11.2013, 18:03
Хорошая дока, но перевод поршивый. Даже с моими мизерными знаниями
английского оригинал читается легче.

shurik-ua
23.11.2013, 21:47
подозреваю что ты стоповый бит забываешь отсылать, покажи в hex значениях что конкретно ты отсылаешь в контроллер.
вот что я отсылаю(vhdl):

SEND_CMD_00 =>
command <= X"FF400000000095";

SEND_CMD_08 =>
command <= X"FF48000001AA87";

SEND_CMD_55 =>
sd_ver_2 <= not responce(34);
command <= X"FF7700000000FF";

SEND_ACMD_41 =>
command <= X"FF69" & '0' & sd_ver_2 & "000000" & X"000000FF";

Lisitsin
09.12.2013, 19:55
Да вроде разобрался, сейчас и пишу и читаю посекторно ...