Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подключение microSD объемом больше 1GB через 4bit SDIO
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
-SANYCH-
Подключил к микроконтроллеру STM32F103VET6 microSD карту памяти размером 1GB через 4bit SDIO + fatfs. Все работает нормально (могу форматировать, читать, писать в файл), но когда вставляю карту памяти 2GB, то получаю в ответ ошибку об аппаратном сбое. При этом функция инициализации проходит и объем карточки определяется верно. Когда пытаюсь писать - получаю ошибку.
В чем может быть проблема ?
Может кто нить знает где можно взять рабочий (проверенный на картах памяти размером больше 1GB) пример 4bit SDIO + fatfs с исходниками для микроконтроллера STM32F103VET6?
Код 4bit SDIO + fatfs брал с прикрепленного файла.
MK2
А откуда ты брал этот пример?? У меня там что-то кодировка не определяется в ридми файле
Какая файловая система на 2гб карточке? и с какой файловой системой работает пример?
Еще проверь (очень маловероятно, но все же ) не SDHC ли карточка ли у тебя, там адресация другая?
Warlockwolf
у меня все кончилось подбором карточек. то есть трнсенд заработали, а сандиск и кингстон нет. притом проблема не в файловой системе. аппаратная. сама микросд карта не работает как надо. сандиск инициализируется, но ни писать ни читать данные внутрь себя не хочет. кингстон, инициализируется, но читает 1 раз. 1 фаил. и все уходит в аут. трансценд работает на ура и в 1 и в 4 бит режимах. карты пробовал по 1 и 2 гига.
-SANYCH-
Цитата
А откуда ты брал этот пример?


Точно уже не помню окуда скачивал, но это 32 -х метровый архив с примерами. Этот прекрипленный файл один из примеров который был в архиве, использования SDIO + FatFs.

Цитата
Какая файловая система на 2гб карточке?


Какая разница, какая на ней файловая система, если я пытаюсь форматировать карточку а в ответ - ошибка.

Цитата
у меня все кончилось подбором карточек.


Собственно после пары дней ковырянья выяснил что неработает именно драйвер карточки (функции чтения/записи блока на карточку ). Размер карточки определялся верно, а вот с определением размера блока какие то проблемы. Контроллер определяет размер блока 1024 на 2-х гиговой карточке, а на компе когда я смотрел через WinHex эту же карточку то размер блока определяется 512.
Где глюк пока не искал. Отложил на позже. Щас пока вписал костыль (забил константой размер блока 512). Пока работает на одно гиговой и двух гиговой карточке. На карточках большего и меньшего размера не тестил так как нет таких карточек в наличии laughing.gif .
RA3WUM
Цитата(-SANYCH- @ Jul 16 2011, 20:35) *
Щас пока вписал костыль (забил константой размер блока 512). Пока работает на одно гиговой и двух гиговой карточке. На карточках большего и меньшего размера не тестил так как нет таких карточек в наличии laughing.gif .

Сталкнулся с подобной проблемой, можете более подробно описать "костыль" rolleyes.gif
aaarrr
Цитата(-SANYCH- @ Jul 16 2011, 20:35) *
Щас пока вписал костыль (забил константой размер блока 512).

Это не костыль, так как стандарт обязывает любую карту работать с блоками по 512 байт.
BLOCK_LEN > 512 нужен для корректного описания емкости карты в том случае, когда она равна 2 или 4GB.
-SANYCH-
Цитата
Сталкнулся с подобной проблемой, можете более подробно описать "костыль" rolleyes.gif


/*-----------------------------------------------------------------------*/
/* Read Sector(s) */

DRESULT disk_read (
BYTE drv, /* Physical drive nmuber (0..) */
BYTE *buff, /* Data buffer to store read data */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to read (1..255) */
)
{
SD_Error Status;
if( !count )
{
return RES_PARERR; /* countІ»ДЬµИУЪ0Ј¬·сФт·µ»ШІОКэґнОу */
}

switch (drv)
{

case 0:
if(count==1) /* 1ёцsectorµД¶БІЩЧч */
{
if(SDCardInfo.CardBlockSize>512){ //<---------- костыль
Status = SD_ReadBlock( buff ,sector << 9 , 512 );
}
else{
Status = SD_ReadBlock( buff ,sector << 9 , SDCardInfo.CardBlockSize );
}
}
else /* ¶аёцsectorµД¶БІЩЧч */
{
if(SDCardInfo.CardBlockSize>512){
Status = SD_ReadMultiBlocks( buff ,sector << 9 , 512, count);
}
else{
Status = SD_ReadMultiBlocks( buff ,sector << 9 ,SDCardInfo.CardBlockSize,count);
}
}
if(Status == SD_OK)
{
return RES_OK;
}
else
{
return RES_ERROR;
}

case 1:
break;

case 2:
break;

default:
break;

}

return RES_ERROR;
}



/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions */

DRESULT disk_ioctl (
BYTE drv, /* Physical drive nmuber (0..) */
BYTE ctrl, /* Control code */
void *buff /* Buffer to send/receive control data */
)
{
volatile unsigned char rc = RES_PARERR;

if (drv){
rc = RES_PARERR; /* ЅцЦ§іЦµҐґЕЕМІЩЧчЈ¬·сФт·µ»ШІОКэґнОу */
}
else{
switch (ctrl){
case CTRL_SYNC :
rc = RES_OK;
break;

case GET_SECTOR_COUNT : {
//*(DWORD*)buff = SDCardInfo.CardCapacity/SDCardInfo.CardBlockSize;
*(DWORD*)buff = SDCardInfo.CardCapacity/512; //<---------- костыль
rc = RES_OK;
break;
}

case GET_BLOCK_SIZE : {
//*(WORD*)buff = SDCardInfo.CardBlockSize;
*(WORD*)buff = 512; //<---------- костыль
rc = RES_OK;
break;
}

case GET_SECTOR_SIZE : {
*(WORD*)buff = SDCardInfo.CardBlockSize;
rc = RES_OK;
break;
}

case CTRL_POWER :
break;

case CTRL_LOCK :
break;

case CTRL_EJECT :
break;

case MMC_GET_TYPE : /* MMC/SDC command */
break;

case MMC_GET_CSD :
break;

case MMC_GET_CID :
break;

case MMC_GET_OCR :
break;

case MMC_GET_SDSTAT :
break;

default :
break;
}
}

return rc;
}

RA3WUM
-SANYCH-, aaarrr
Спасибо, буду пробовать.
MiklPolikov
Глупый вопрос :

Почему в документации на STM32L151 в таблицах назначением ног я не могу найти ноги, относящиеся к SDIO ? Как они должны называтся ? Разьве не SDIO_CK, SDIO_CMD .... ?
aaarrr
Цитата(MiklPolikov @ Mar 17 2012, 14:14) *
Глупый вопрос :

Почему в документации на STM32L151 в таблицах назначением ног я не могу найти ноги, относящиеся к SDIO ? Как они должны называтся ? Разьве не SDIO_CK, SDIO_CMD .... ?

Потому что таких ног у него нет, как нет и самого интерфейса. В даташите есть только упоминание о том, что можно-де карточку прицепить к SPI и задействовать hardware CRC.
MiklPolikov
Цитата(aaarrr @ Mar 17 2012, 23:50) *
Потому что таких ног у него нет, как нет и самого интерфейса. В даташите есть только упоминание о том, что можно-де карточку прицепить к SPI и задействовать hardware CRC.


А что тогда вот это такое, на с 714 документации ? Не SD интерфейс ?

28 Secure digital input/output interface (SDIO)

Medium-density devices are STM32L151xx, and STM32L152xx microcontrollers where
the Flash memory density ranges between 64 and 128 Kbytes.
High-density devices are STM32L151xx and STM32L152xx microcontrollers where the
Flash memory density ranges between 256 and 512 Kbytes.
This section applies to high-density devices only.

28.1 SDIO main features

The SD/SDIO MMC card host interface (SDIO) provides an interface between the APB2
peripheral bus and MultiMediaCards (MMCs), SD memory cards, SDIO cards and CE-ATA
devices.
aaarrr
Цитата(MiklPolikov @ Mar 18 2012, 02:09) *
Flash memory density ranges between 256 and 512 Kbytes.

А они такие есть в природе-то? В даташите только до 128К.
MiklPolikov
Цитата(aaarrr @ Mar 18 2012, 01:23) *
А они такие есть в природе-то? В даташите только до 128К.


Medium-density devices are STM32L151xx, and STM32L152xx microcontrollers where
the Flash memory density ranges between 64 and 128 Kbytes.

64-128 есть. И 256 то же есть .
Но я не понимаю смысла вопроса "есть в природе или нет ?". Если в документации есть, значит и в природе есть.

Вопрос в другом : если SDIO это не аппаратный интерфейс SD карты, то что это тогда ?


aaarrr
Цитата(MiklPolikov @ Mar 18 2012, 02:34) *
И 256 то же есть .

Где? В даташите вижу только до 128.

Цитата(MiklPolikov @ Mar 18 2012, 02:34) *
Но я не понимаю смысла вопроса "есть в природе или нет ?". Если в документации есть, значит и в природе есть.

User manual общий на семейство. Ясно написано, что раздел касается только устройств с 256+К флеш.
Возможно, их когда-нибудь выпустят.
MiklPolikov
Цитата(aaarrr @ Mar 18 2012, 01:47) *
Где? В даташите вижу только до 128.
User manual общий на семейство. Ясно написано, что раздел касается только устройств с 256+К флеш.
Возможно, их когда-нибудь выпустят.


Разьве вот из этой фразы не следует, что SDIO должен быть у всех процессоров с памятью >= 64КБ ?

Medium-density devices are STM32L151xx, and STM32L152xx microcontrollers where
the Flash memory density ranges between 64 and 128 Kbytes.


В природе вот они
http://www.st.com/internet/mcu/subclass/1376.jsp
aaarrr
Цитата(MiklPolikov @ Mar 18 2012, 02:55) *
Разьве вот из этой фразы не следует, что SDIO должен быть у всех процессоров с памятью >= 64КБ ?

Нет: This section applies to high-density devices only.

Цитата(MiklPolikov @ Mar 18 2012, 02:55) *

Если в этой табличке выбрать SDIO, то он покажет кристаллы, где SDIO действительно есть. Вот, например.
Ну и бардак у ST sad.gif
MiklPolikov
Цитата(aaarrr @ Mar 18 2012, 02:02) *
Нет: This section applies to high-density devices only.

Спасибо.
EugenyAM
У STM32 могут быть разные даташиты на МК одного семейства, но с разной density.
В свое время были раздельные даташиты на семейство F103
Один документ - STM32F103x4, STM32F103x6.
Второй документ - STM32F103x6, STM32F103x8, STM32F103xB.
Третий документ - STM32F103xC, STM32F103xD, STM32F103xE.
Естественно, что выводы SDIO описаны только в третьем документе. Возможно, что для семейства STM32L151 существует аналогичное разделение даташитов.
MK2
Возник глюк с работой SDIO в STM32. Использую ФС от чана .
Неправильно читает данные из секторов. Вернее не до конца считывает сектор, но ф-ция f_read возращает, что данные считались все.
Причем проблемы возникают если встречаются большие массивы с единственным значением 0xFF, c "разношерстными" данными глюка не земечано.
У кого-нить что-нибудь подобное было?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.