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

    

SD CARD в SD MODE

Всем доброго времени суток.

Пытаюсь работать с SD картой в SD моде, даю 80 клоков, отсылаю CMD0 - нет ответа. Отсылаю 100 клоков. CMD8- есть ответ( 0x01 0 0 0x01 0xaa), ACMD41 - кручу в цикле, до получения бита busy status "1". Потом отсылаю CMD2- Получаю длинный ответ, выводил его на монитор и переводил этот SID, вроде все верно. Дальше отсылаю CMD3, получаю ответ и в в битах от 12 до 9 получаю 0X05 - data mode. И все, дальше после отправки CMD9 или CMD13 - тишина, карта не отвечает. Что самое интересное, я испробовал около 20 карт, и только 1 отвечает на CMD3 - 0x04 в статус битах - tran. . И после этого дает ответ на CMD9 и CMD13. Что только не пробовал, остальные карты молчат. С CMD3 отсылаю - 0x43 00 00 00 00 0x21, с CMD13 - 0x4D 0xDA 0x71 00 00 0xBB, CMD9 - 0x49 0xDA 0x71 00 00 0x19..... Кто чем может подсказать, что то вообще понять не могу в чем беда то =((

 

Все карточки SDHC 2.0. и та карточка которая отвечает - тоже, более того у меня есть 4 таких же карточки, единст отличие это в Manufacture date, она на пару месяц свежее остальных

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

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


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

Пытаюсь работать с SD картой в SD моде, даю 80 клоков, отсылаю CMD0 - нет ответа. Отсылаю 100 клоков. CMD8- есть ответ( 0x01 0 0 0x01 0xaa), ACMD41 - кручу в цикле, до получения бита busy status "1". Потом отсылаю CMD2- Получаю длинный ответ, выводил его на монитор и переводил этот SID, вроде все верно. Дальше отсылаю CMD3, получаю ответ и в в битах от 12 до 9 получаю 0X05 - data mode. И все, дальше после отправки CMD9 или CMD13 - тишина, карта не отвечает. Что самое интересное, я испробовал около 20 карт, и только 1 отвечает на CMD3 - 0x04 в статус битах - tran. . И после этого дает ответ на CMD9 и CMD13. Что только не пробовал, остальные карты молчат. С CMD3 отсылаю - 0x43 00 00 00 00 0x21, с CMD13 - 0x4D 0xDA 0x71 00 00 0xBB, CMD9 - 0x49 0xDA 0x71 00 00 0x19..... Кто чем может подсказать, что то вообще понять не могу в чем беда то =((

 

Все карточки SDHC 2.0. и та карточка которая отвечает - тоже, более того у меня есть 4 таких же карточки, единст отличие это в Manufacture date, она на пару месяц свежее остальных

Ладно, никто не вкурсе,можно удалить тему(впринице я это и ожидал от русского комьюнити, каждый сам за себя))

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


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

А какой card_rca вы передаете в параметрах команд CMD3 и CMD9?

В остальном порядок команд правильный.

Карты в ПК работают?

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


Ссылка на сообщение
Поделиться на другие сайты
А какой card_rca вы передаете в параметрах команд CMD3 и CMD9?

В остальном порядок команд правильный.

Карты в ПК работают?

Спасибо за ответ, есть рабочий программатор для работы с карточками(пишет,читает. вообщем весь функционал делает), карты все он эти читает, по командам та же последователость,данные в цмдках такие же как и у меня, и RCA в CMD3 у там нули как я понял, потмоу что он отсылает в CMD3 0x43 00 00 00 00 0x21 - 4 байта в поле данных это же RCA? И там ответ yна CMD3 всегда одни и те же биты на любую карту, все 32 бита от RCA до CARD STATUS и CRC ( 0x03, 16 бит RCA, 0x04 в битах статуса(12:9)) и после этого там отсылается CMD9 и CMD13 с соответсв. ответами, но у меня же выставляется 0x05 в битах статуса на CMD3, и другой RCA и дальше карта просто молчит, кроме вот одной единственной карты(у нее такой же ответ на команду CMD3 как и в программаторе,наверное поэтому и робит). Дополнительный клок из 8 бит между командами выставляю задержки между командами в 4 милисекунды, задежка между командой и ответом на нее 100микросекунд, вообще задержки пробывал разные и увелич. и уменьшал - толку ноль. Я не могу понять от чего зависит этот статус карты и RCA, в ответе на CMD3, как он выставляется, судя по даташиту RCA генерируется случайным образом, каждый раз на CMD3?

 

CMD9 это же запрос на получение CSD, как он влияет на RCA, или я что то не понимаю?

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

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


Ссылка на сообщение
Поделиться на другие сайты
CMD9 это же запрос на получение CSD, как он влияет на RCA, или я что то не понимаю?

Вы передаете карточке в CMD3 нулевой RCA, в ответ карточка вернет в старших 16 битах новый RCA,

который нужно передавать в качестве аргумента в последующие CMD9, CMD13 и т.п.

В вашем очень подробном первом посте не хватает ответа на CMD3. Получается, что RCA=0xDA 0x71.

Мне это подозрительно. Я за RCA не следил, но мне кажется там должно быть что-то типа 0x0001.

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


Ссылка на сообщение
Поделиться на другие сайты
Кто чем может подсказать, что то вообще понять не могу в чем беда то =((

вам бы поискать последнюю спецификацию на SD card, хотя бы открытую часть, там д.б. разрисовано и расписано..

в аттаче картинка от тошибы за 2003 год, может чем-то поможет..

и текст оттуда же:

6.3. Card Initialize
To initialize the Toshiba SD card, follow the following procedure is recommended example.
1) Supply Voltage for initialization.
Host System can apply the Operating Voltage from initialization to the card.
Apply more than 74 cycles of Dummy-clock to the SD card.
2) Select operation mode (SD mode or SPI mode)
In case of SPI mode operation, host should drive 1 pin (CD/DAT3) of SD Card I/F to “Low” level. Then, issue CMD0.
In case of SD mode operation, host should drive or detect 1 pin of SD Card I/F (Pull up register of 1 pin is pull
up to “High” normally).
Card maintain selected operation mode except re-issue of CMD0 or power on below is SD mode initialization procedure.
3) Send the ACMD41 with Arg = 0 and identify the operating voltage range of the Card.
4) Apply the indicated operating voltage to the card.
Reissue ACMD41 with apply voltage storing and repeat ACMD41 until the busy bit is cleared.
(Bit 31 Busy = 1) If response time out occurred, host can recognize not SD Card.
Note: In MMC-SPI Mode, CMD1 can use in this state.
However, do not use CMD1 in case of SD Mode.
5) Issue the CMD2 and get the Card ID (CID).
Issue the CMD3 and get the RCA. (RCA value is randomly changed by access, not equal zero)
6) Issue the CMD7 and move to the transfer state.
If necessary, Host may issue the ACMD42 and disabled the pull up resistor for Card detect.
7) Issue the ACMD13 and poll the Card status as SD Memory Card. Check SD_CARD_TYPE value. If significant 8 bits
are “all zero”, that means SD Card. If it is not, stop initialization.
8) Issue CMD7 and move to standby state.
Issue CMD9 and get CSD.
Issue CMD10 and get CID.
9) Back to the Transfer state with CMD7.
Issue ACMD6 and choose the appropriate bus-width.

post-13050-1517523764_thumb.jpg

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


Ссылка на сообщение
Поделиться на другие сайты
Вы передаете карточке в CMD3 нулевой RCA, в ответ карточка вернет в старших 16 битах новый RCA,

который нужно передавать в качестве аргумента в последующие CMD9, CMD13 и т.п.

В вашем очень подробном первом посте не хватает ответа на CMD3. Получается, что RCA=0xDA 0x71.

Мне это подозрительно. Я за RCA не следил, но мне кажется там должно быть что-то типа 0x0001.

Спасибо большое adnega, вот почему та карточка работала, а остальные нет. Потому что я передавал не те значение для RCA в CMD9 и CMD13. Спасибо еще раз.

 

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация