Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Спецификации (все) на SD карты нужны)
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
haker_fox
Добрый день!

Друзья, если у кого есть именно все спецификации на карты, выложите пожалуйста rolleyes.gif

У меня сейчас есть 1.0 от 2001 года, и 3.01 с официального сайта.

Слышал, что еще есть 2.xx, которой у меня нет

Дело в том, что где-то слышал, что на тривильную CMD0 карта должна ответить 0x01 (в IDLE режиме). Но новейшая спецификация с сайта sdcard.org говорит о том, что ответа не будет. У меня под руками пока одна SD на 4Гб. Она не отвечает на CMD0. На CMD8 отвечает 1AA, что соответствует новой спецификации, но не соответствует старой.

В общем хотелось бы написать "интеллектуальный, творческий" драйвер, способный работать с разными картами.

То, что есть в инете не устраивает: задержки в виде пустых циклов, где-то нет проверок ошибок и откликов. Да и пишу я на Си++ с использованием ООП, да под замечательную РТОС scmRTOS bb-offtopic.gif

Спасибо!
Mikhalych
Цитата(haker_fox @ Jan 22 2013, 14:46) *
Дело в том, что где-то слышал, что на тривильную CMD0 карта должна ответить 0x01 (в IDLE режиме). Но новейшая спецификация с сайта sdcard.org говорит о том, что ответа не будет. У меня под руками пока одна SD на 4Гб. Она не отвечает на CMD0. На CMD8 отвечает 1AA, что соответствует новой спецификации, но не соответствует старой.

не совсем так - на тривиальную CMD0 карта отвечает 0x01 в SPI-режиме, в SD-режиме ответа не будет
haker_fox
QUOTE (Mikhalych @ Jan 22 2013, 21:00) *
не совсем так - на тривиальную CMD0 карта отвечает 0x01 в SPI-режиме, в SD-режиме ответа не будет

Ну вот... тогда у меня все правильно, т.к. MCI модуль позволяте работать в "нативном" режиме.
MrYuran
Цитата(Mikhalych @ Jan 22 2013, 16:00) *
не совсем так - на тривиальную CMD0 карта отвечает 0x01 в SPI-режиме, в SD-режиме ответа не будет

Только добавить, что с некоторых пор SPI режим не у всех карт, и чем дальше, тем меньше
Mikhalych
Цитата(MrYuran @ Jan 22 2013, 16:25) *
Только добавить, что с некоторых пор SPI режим не у всех карт, и чем дальше, тем меньше

Откуда такие сведения? Согласно спецификации на физический уровень SD-карты (вплоть до 4й версии спецификации включительно) режим SPI является обязательным и должен присутствовать во всех картах
haker_fox
Если делать опознание версии карты согласно диаграмме в спецификации 3.01, этого достаточно?

QUOTE (Mikhalych @ Jan 22 2013, 21:38) *
(вплоть до 4й версии спецификации включительно)

О! А где эту спецификацию взять? На базе не предлагают crying.gif
Ruslan1
Цитата(Mikhalych @ Jan 22 2013, 14:38) *
Откуда такие сведения? Согласно спецификации на физический уровень SD-карты (вплоть до 4й версии спецификации включительно) режим SPI является обязательным и должен присутствовать во всех картах

вроде бы микро-SD могут быть без SPI.
Mikhalych
спецификацию 3й версии (не упрощённую) видел в закромах. в ней описываются карты до 32х ГБ со скоростями DS,HS,UHS-1. В 4й версии добавляются XC-карты размером от 64 ГБ (и все предыдущие версии) со скоростями UHS-II и ниже - такие карты только начали разрабатывать и в широком доступе их пока очень мало. Полная версия спецификации стоит 2k$ приобрести можно у sdcard.org. "бесплатную версию" в интернете не видел.

для микроSD режим SPI также является обязательным и в текущей версии спецификации ничего не сказано о том, что его будут исключать в следующих версиях
haker_fox
QUOTE (Mikhalych @ Jan 23 2013, 02:17) *
В 4й версии добавляются XC-карты размером от 64 ГБ

Чтож, такие объемы нам не светят. Буду искать полную 3 версию в закромах. Если не найду, упрощенная тоже пойдет.
Спасибо!
Upd: ага, есть полная третья спецификация, и еще куча всего)
haker_fox
Спасибо всем!

Все обсуждение переносится в ветку "программирование".
vladimir_orl
Здравствуйте.

Подскажите, как определить объём подключаемой SD карты. какой командой CMD?
А то в интернете особо не нашёл. Заранее благодарен.
haker_fox
QUOTE (vladimir_orl @ Jan 25 2013, 20:08) *
Здравствуйте.

Подскажите, как определить объём подключаемой SD карты. какой командой CMD?
А то в интернете особо не нашёл. Заранее благодарен.

Я пока не знаю rolleyes.gif Еще не дошел до этого пункта.

maniac.gif Всем новичкам типа меня : не ждите правильной CRC от ACMD41. Ее нужно просто игнорировать. Промаялся часов 5, пока не нашел на просторах интернета подсказку о том, что ответ R3 содержит поле КС 'reserved'. Интересно, почему?

QUOTE (vladimir_orl @ Jan 25 2013, 20:08) *
Заранее благодарен.

Товарищ, а Вы зачем кросс-постингом занимаетесь? Размещение одного и того же вопроса в нескольких темах форума строго карается по закону (правилам форума) rolleyes.gif
haker_fox
Ну вот, я застрял(

Инициализирую так: cmd0, cmd8, acmd41, cmd2, cmd3, cmd7 и здесь все "виснет".
После команды 7 карта говорит, что она в stand-by режиме, хотя должна быть в trans.

Команда 7 отрабатывается успешно. Но после нее попытка дать любую команду оборачивается таймаутом.

Карта определилась как SDHC (вроде так и должно быть, это сдшка на 4 Гб).

Почему cmd7 не переводит карту в режим trans? Почему после этого все замирает?

Спасибо!
haker_fox
Ага!
Исправил!

ACMDx это CMD55 + CMDx. Так вот, я посылал команду 55 с аргументом 0, а там должен быть RCA. Это я на первых порах, когда RCA не получал, поставил заглушку.

Просьба к модераторам. Пожалуйста, разрешите мне здесь делится достижениями, даже если я просто буду цитировать свои ошибки.

Я вижу много тем по SD картам. Может быть кому-либо моя тема поможет. Буду рад) Фактически, это "хождение по-мукам в онлайне")))
Спасибо!
haker_fox
Хотя нет, все равно странно. В tran карту выводит не CMD7, а ACMD6 (установка 4 битного интерфейса)...

А вот уже после этого CMD7 "деселектирует" карту (RCA = 0) и выбирает (RCA = полученному от карты значению).

Резюме: CMD7 работает в 4-х битном режиме только?
haker_fox
Господа, помогите, пожалуйста.

На CMD17 карта не дает данных. Пытаюсь вычитать один блок (512 байт). Команда отрабатывается MCI успешно. В ответ тишина. В регистре статуса: Data Timeout. Пытался данные вычитывать на частоте < 400 КГц, на однобитной шине. Все одно...

Уже бодаюсь не один день. Эти карты какие-то не простые, хотя в спецификации все просто...

Спасибо!

Поистине волшебный форум) Только напишешь, как проблема решается!
Подглядывая в драйвера, раздаваемые с FatFS, переписал код.
Там дается CMD17, затем модуль MCI натравливается на ожидание данных. Возникает таймаут.
Я сделал наоборот. Сначала подготовил MCI к ожиданию данных от карты. Потом дал CMD17. Данные пришли))) Правда я пока без DMA принимаю, возникает RX Overrun. Но это уже дело техники.

CODE
    MCI_DATA_TMR = 5 * 6000000; // 5 sec at 6000 000 Hz
    MCI_DATA_LEN = 512;

    uint8_t buffer[ 512 ];

    MCI_DATA_CTRL = 1 | ( 1 << 1 ) | ( 9 << 4 );
    do
    {
        retVal = sendCmd( 17, 2048, FMCIShortResp );
        if( ( retVal == FOk ) && ( ( response.resp0 & ( 0x0f << 8 ) ) == 0x900 ) )
            break;
        FHAL::sleep( 100 );
        timeout -= 100;
    }
    while( timeout );
MiklPolikov
Работаю в SPI mode с любыми картами от 1 до 16 Гб.
Некоторые карты отвечают на CMD0 со второго раза.

Можно по подробнее про новую спецификацию, в практическом аспекте : скоро появятся новые карты, с которыми мой код перестанет работать ?

Инициализирую вот так. CMD7 ни где не применяю и даже не знаю зачем она.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.