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

LPC2478 и SD карта

Всем привет! На выше упомянутом проце запустил SD и FatFS, с 1Гиговой флешкой всё работает норм, а вот с 2Гиговой чет не хочет... может кто то встречался с такой ситуацией? Флешка точно работает и отформатирована как надо. При вызове disk_initialize возвращается всё время STA_NOINIT.

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


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

Находил несколько схожих тем

 

http://electronix.ru/forum/lofiversion/index.php/t98209.html

http://electronix.ru/forum/lofiversion/index.php/t65532.html

 

Но окончательного решения проблемы там так и не появилось...

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


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

Всем привет! На выше упомянутом проце запустил SD и FatFS, с 1Гиговой флешкой всё работает норм, а вот с 2Гиговой чет не хочет... может кто то встречался с такой ситуацией? Флешка точно работает и отформатирована как надо. При вызове disk_initialize возвращается всё время STA_NOINIT.

Надо разбираться с драйвером сдэшки, а точнее со стандартами флешки. FatFS тут точно не причём :rolleyes:

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


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

haker_fox абсолютно прав. 99 % что отличаются ревизии SD карт. Вставьте карты в картридер ПК считайте с них двоих служебную информацию и сравните.

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


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

Буклвак HC не нашёл) буду сравнивать служебную инфу, если что найду отпишусь

 

с 1Гиговой флешкой всё работает норм, а вот с 2Гиговой чет не хочет...

 

Скорее всего карта 2го типа, 1й тип - самые старинные флешки, работают с упрощенной инициализацией, как ММС. 2й тип требует дополнительной ACMD, а НС еще и CMD8. Посмотрите в эту сторону...

Возможно еще то, что флешки бывают "медленные", в смысле их контроллер. Раз такое бывало, проверил так - пробовал инициализацию 3 раза через секунду, так некоторые со 2го, а одна даже только с 3го раза запускалась.

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

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


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

Пробовал увеличить время между попытками инициализации, не помогло. Буду копать в сторону 2-го типа флешки... Интересно, а FatFS со вторым типам флешки вообще не работает или надо где настраивать...т

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


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

Пробовал увеличить время между попытками инициализации, не помогло. Буду копать в сторону 2-го типа флешки... Интересно, а FatFS со вторым типам флешки вообще не работает или надо где настраивать...т

FatFS все равно какой тип флешки. Это решается на уровне disk initialize в этой процедуре флешка инициализируется на низком уровне, в дальнейшем файловую систему интересуют только функции чтения, записи и состояния диска.

Когда я только начал освоение флешек и фатфс, то чановская функция инициализации мне не понравилась (трудна в понимании и использует таймера, я писал для аврки, а там таймеры на вес золота :rolleyes: ) плюс небыло поддержки НС карт.

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


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

FatFS все равно какой тип флешки. Это решается на уровне disk initialize в этой процедуре флешка инициализируется на низком уровне, в дальнейшем файловую систему интересуют только функции чтения, записи и состояния диска.

Когда я только начал освоение флешек и фатфс, то чановская функция инициализации мне не понравилась (трудна в понимании и использует таймера, я писал для аврки, а там таймеры на вес золота :rolleyes: ) плюс небыло поддержки НС карт.

 

А можете скинуть исходники с инициализацией?

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


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

А можете скинуть исходники с инициализацией?

 

Вот пример инициализации с поддержкой всех типов карт(MMC SD SD2.0 SDHC)

Использую в своем микроПЛК уже 2 года, люди вставляют разные карточки и вроде как не жалуются :biggrin:

sdmmc.txt

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

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


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

Посмотрел Ваши исходники и то что использую (исходники Martin THOMAS для инициализации), команды отсылаются в одинаковом порядке. Начал снова дебажить, в функции MCI_disk_initialize()

 

инициализация самой флешки проходит нормально (в выше написанной функции дергаются MCI_CardInit() и MCI_Check_CID, и они возвращают true), а вот дальше при вызове MCI_Set_Address() уже начинаются косяки. Вот как выглядит сама функция:

 

DWORD MCI_Set_Address(void) {
    volatile DWORD i; // mthomas - volatile
    DWORD retryCount;
    DWORD respStatus;
    DWORD respValue[4];
    DWORD CmdArgument;

    /* If it's a SD card, SET_RELATIVE_ADDR is to get the address
     from the card and use this value in RCA, if it's a MMC, set default
     RCA addr. 0x00010000. */
#if 1
    // mthomas:
    if (MCI_CardType & MMC_CARD) {
        /* If it's unknown or MMC_CARD, fix the RCA address */
        CmdArgument = 0x00010000;
    } else {
        CmdArgument = 0;
    }
#else
    // NXP original:
    if ( MCI_CardType == SD_CARD )
    {
        CmdArgument = 0;
    }
    else /* If it's unknown or MMC_CARD, fix the RCA address */
    {
        CmdArgument = 0x00010000;
    }
#endif

    retryCount = 0x20; /* reset retry counter */
    while (retryCount > 0) {
        /* Send CMD3 command repeatedly until the response is back correctly */
        MCI_SendCmd( SET_RELATIVE_ADDR, CmdArgument, EXPECT_SHORT_RESP, 0);
        respStatus = MCI_GetCmdResp( SET_RELATIVE_ADDR, EXPECT_SHORT_RESP, (DWORD *)&respValue[0]);
        /* bit 0 and bit 2 must be zero, or it's timeout or CRC error */
        /* It should go to IDEN state and bit 8 should be 1 */
        if ( !(respStatus & MCI_CMD_TIMEOUT) && ((respValue[0] & (0x0F << 8))
                == 0x0500)) {
            CardRCA = respValue[0] & 0xFFFF0000; /* Save the RCA value from SD card */
            return ( TRUE ); /* response is back and correct. */
        }
        for (i = 0; i < 0x20; i++) {
        ;
        }
        retryCount--;
    }
    return ( FALSE );
}

 

когда пытаемся прочитать ответ

respStatus = MCI_GetCmdResp( SET_RELATIVE_ADDR, EXPECT_SHORT_RESP, (DWORD *)&respValue[0]);

MCI_GetCmdResp возвращает -1

 

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


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

Посмотрел Ваши исходники и то что использую (исходники Martin THOMAS для инициализации), команды отсылаются в одинаковом порядке. Начал снова дебажить, в функции MCI_disk_initialize()

 

 

MCI_GetCmdResp возвращает -1

 

Карта подключена по SPI или в режиме SD(4битном)? Просто команды инициализации разные. То, что в файле исходников работало в режиме SPI на аврках и стмах, думаю на лпсишках тоже должно работать. Может что еще недосмотрели?

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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