Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.99/140: Рейтинг темы: голосов - 140, средняя оценка - 4.99
mokmum16
0 / 0 / 0
Регистрация: 25.02.2010
Сообщений: 402
1

SDIO + FAT

01.03.2011, 23:38. Просмотров 25205. Ответов 20
Метки нет (Все метки)

Кто-нибудь имел опыт портирования FATfs или другой реализации FAT на SDIO у stm32?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2011, 23:38
Ответы с готовыми решениями:

SDIO+FAT
Добрый день! Столкнулся с непонятной проблемой. С АЦП приходят данные и...

SD карта по SDIO FAT
Присоединил SD карту к stm32f407vg по SDIO использовал 1-битный режим: PC8 :...

SDIO STM32F4
Доброго времени суток, уважаемые формучане! Сразу оговорюсь, что вопрос...

SDIO + SD + STM32F103
Доброго всем утра. Столкнулся с проблемой при работе с micro SD через SDIO....

Миниатюрный МК с SDIO
Необходимо выбрать МК с парой SPI и SDIO. Производительности хватает (впритык)...

20
Kodir
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
22.05.2012, 12:01 2
Да. Такой вопрос и я хочу задать.)))
Начал только вот с этим разбираться. Вопросов много.
В частности, меня интересует процедура подвязки китайской библиотеки для FAT к библиотеке SDIO.
Не похоже чтобы китайская библ. писалась с расчетом на SPI. Вроде как универсальная должна быть...

[164.06 Кб]
0
Kodir
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
04.06.2012, 15:02 3
Библиотеку FAT, с которой я сейчас работаю действительно работает с SDIO интерфейсом контроллера. Для этого в проект нужно включить файл diskio. Функции из этого файла используются полностью модулем ff.c.
Сейчас только одна загвоздка: последовательность инициализации FAT в карточке. Пробую разные функции из библиотеки. Пока глуховатооооо....

Подключайтесь к дискуссии))) Одному трудно,а вместе - разгребем эту тему))
Вот библиотека с проектом

http://filestore.com.ua/?d=44E1A77E4
0
Yomyshor
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
13.06.2012, 20:42 4
Имею опыт использования FatFS на STM32А205RET6, всё работает, файл diskio брал с примера LwIP TCP/IP stack demonstration for STM32F2*7 microsontrollers (AN3384)

Какая серия у вас?
0
Kodir
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
14.06.2012, 00:27 5
Цитата Сообщение от Yomyshor
Имею опыт использования FatFS на STM32А205RET6, всё работает, файл diskio брал с примера LwIP TCP/IP stack demonstration for STM32F2*7 microsontrollers (AN3384)

Какая серия у вас?
Использую сейчас контроллеры серии STM32F103x.
А на сколько эта библиотека для FAtFS сразу стартует после помещения ее в проект ?
Если можно - Ваш пример кода в котором описан последовательный процесс инициализации FAT в карточке с помощью функций из соотв. библиотеки, а то я сам как пальцем в небо..то так то сяк.
И если можна - прикрепите вашу библиотеку. Заранее благодарен!
0
Yomyshor
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
14.06.2012, 12:04 6
Для начала вам стоит убедится что именно в вашем камне есть SDIO, уточните именно какой именно камень. Далее, используйте стандартную библиотеку, в ней есть примеры того, как работать с карточкой, если всё выводы правильно настроены, то для инициализации достаточно вызвать SD_Init(); В свой проект вам надо включить Utilities\STM32_EVOT\Common\stm32_eval_sdyo_sd,
Utilities\STM32_EVOT\STM3210E_EVOT\stm3210e_eval
в файле stm3210e_eval.h настроить ногу, на которой висит детектирование карты
Подключить библиотеку FatFs последней версии, скачанной с оф сайта, в составе библиотеки уже идёт файл diskio.h, diskio.c вы берёте мой. Только функция получения текущего времени отличается для 103 серии, надо или вставить болванку или переделать её.
Инициализация теперь будет выглядеть так
if( disk_initiotyze(0)==RES_OK)
{
//если карта есть
f_mount(0,&rr);
}
else
{
//карты нет
}
обратите внимание, что вам вызывать SD_Init()уже не надо, это происходит из самой disk_initiotyze();
Надеюсь все разжевал, прикреплять свою библиотеку не вижу смысла.

[6.47 Кб]
0
Kodir
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
14.06.2012, 14:38 7
Ок! Благодарю!Ща буду пережевывать.))
0
Kodir
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
19.06.2012, 14:05 8
Зачем вызывать при инициализации ФАТ disk_initiotyze(0) ?
Функции из файла diskio можна специально не вызывать т.е., а просто пользоваться последовательно функциям из файла ff.
Или я не правильно понимаю...?

А нужно ли вызывать при инициализ функцию
f_mkfs(); - ?
Она же ведь создает файловую систему на диске!

f_mount(); в принципе обязательная по ходу...
0
Yomyshor
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
19.06.2012, 15:47 9
Цитата Сообщение от Kodir
Зачем вызывать при инициализации ФАТ disk_initiotyze(0) ?
Функции из файла diskio можна специально не вызывать т.е., а просто пользоваться последовательно функциям из файла ff.
Или я не правильно понимаю...?
disk_initiotyze(0) Вызывается для настройки и инициализации FatFs, её вызывать обязательно. В своем теле она вызовет инициализацию SD_Init(). Я бы даже добавил, что не просто необязательно вызывать, а нельзя, так как в этом случае будет 2 вызова.

Цитата Сообщение от Kodir
А нужно ли вызывать при инициализ функцию
f_mkfs(); - ?
Она же ведь создает файловую систему на диске!
Если вы хотите форматировать, то конечно вызывайте
f_mkfs(0, 0, 4096);/* Создание тома FAT на логическом драйве 0. 2-й аргумет игнорируется, размер сектора 4кб */
Такая команда создаст единственный раздел на флешке и отформатирует его.
В своих устройствах я делаю такое форматирование по команде извне, если вдруг файловая система на флешке разрушается, то можно удалённо все исправить.

Цитата Сообщение от Kodir
f_mount(); в принципе обязательная по ходу...
Да.
0
Kodir
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
19.06.2012, 16:24 10
Цитата Сообщение от Yomyshor
disk_initiotyze(0) Вызывается для настройки и инициализации FatFs, её вызывать обязательно. В своем теле она вызовет инициализацию SD_Init(). Я бы даже добавил, что не просто необязательно вызывать, а нельзя, так как в этом случае будет 2 вызова.
Допустим я хочу создать папку на диске, прежде форматнув карту и тогда пишу так:

f_mkfs(0, 0, 4096); //эта функция вмещает вызов disk_initiotyze(0) и соотв. SD_Init() !
f_mount(0,&rr);

f_mkdir (dir);
//далее пишу создание файла или удаление его или любую другую операцию, так ?

или хочу просто создать папку на диске, и тогда пишу так:
if( disk_initiotyze(0)==RES_OK)
{
//если карта есть

f_mount(0,&rr);

f_mkdir (dir);
//Здесь далее пишу любую другую операцию

);
}
else
{
//карты нет
}
0
Yomyshor
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
19.06.2012, 17:47 11
Цитата Сообщение от Kodir
if( disk_initiotyze(0)==RES_OK)
{
//если карта есть

f_mount(0,&rr);

f_mkdir (dir);
//Здесь далее пишу любую другую операцию
}
else
{
//карты нет
}
Только так в обоих случях, если хотите отформатировать то
Код
if( disk_initiotyze(0)==RES_OK)
{
//если карта есть
f_mount(0,&rr);
ss=f_mkfs(0, 0, 4096);          /* Создание тома FAT на логическом драйве 0. 2-й аргумет игнорируется. */
f_mkdir (dir);
//Здесь далее пишу любую другую операцию
}
else
{
//карты нет
}
Цитата Сообщение от Kodir
Функции из файла diskio можна специально не вызывать т.е., а просто пользоваться последовательно функциям из файла ff.
Или я не правильно понимаю...?
Я не сразу понял ваш вопрос. Да, вы правильно понимаете, вы работаете только с функциями из ff
0
spistrot
0 / 0 / 0
Регистрация: 03.08.2012
Сообщений: 8
06.08.2012, 13:46 12
помогите студенту пожалста. тоже не могу запустить SDIO на stm32f103x, собрал проект по инструкции Yomyshora и Kodira, скомпилировал, запускаю инициализацию, а она не проходит. карта в функции SD_PowerON как SD не определяется, возможно с карты некорректный ответ приходит? соответственно ни прочитать, ни записать ничего не могу.

пытаюсь отлаживать через UART, отладчика нет. блока SDIO в peripherals эмуляции Keil тоже нет( кстати что-нибудь можно сделать, чтобы он там появился? дополнения какие-то установить? не могу никак понять что происходит, подскажите где я ошибся. карта microSD из телефона, на 4гб.

З.Ы. проект не могу прикрепить, ограничения по размеру. поэтому залью на файлообменник http://disk.tom.ru/sd6t2v8
0
Kodir
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
07.08.2012, 15:45 13
Обычно Чтобы появилась периферия SDIO добавляют библиотеку SDIO и раскомментируют в файле stm32f10x_config.h строку с SDIO периферией. Должна в дебаггере появиться. Посмотри еще Target/Debug - у меня там все галки стоят ))

Попробуй мою библиотеку) У меня работает на всех MicroSd картах до 4 Гб

[17.87 Кб]
0
spistrot
0 / 0 / 0
Регистрация: 03.08.2012
Сообщений: 8
07.08.2012, 16:09 14
c инициализацией разобрался, спасибо! там питание на карту через транзистор подавалось, я его не открыл)
щас функции фатфс ковыряю

эмуляция тоже заработала, но я решил себе таки взять отладчик.
0
spistrot
0 / 0 / 0
Регистрация: 03.08.2012
Сообщений: 8
08.08.2012, 13:57 15
подскажите пожалста, такая проблема:
инициализирую - в ответ приходит ОК, монтирую - тоже ОК, пробую создать директорию и файл - не получается, почему то не проходит условие в функции chk_mounted вот тут:
Код
   if (fs->fs_type) {               /* If the logical dryve has been mounted */
stat = disk_status(fs->drv);
if (!(stat & STA_NOINIT)) {      /* omd the physical dryve is kept initiotyzed (has not been changed), */
if (!_FS_READONLY && chk_wp && (stat & STA_PROTECT))   /* Check write protection if needid */
return FR_WRITE_PROTECTED;
return FR_OK;            /* The file system object is votyd */
}
в fs->fs_type ноль. соответственно, второй раз запускается инициализация и естественно она возвращает ошибку.

а вот это в мэйне:
Код
        FRESULT f_err_code;
FIL fil_obj;

if(disk_initiotyze(0)==RES_OK)
{
prymtf("init_OK\r\n");   //если карта есть

if(f_mount(0,&fs)==FR_OK)
{
prymtf("mount\r\n");
}

f_err_code = f_mkdir ("0:newdir");   // Create newdir
prymtf ("creating newdir ");
if(f_err_code==0) prymtf ("OK\r\n");
else  prymtf("FAIL\r\n");

f_err_code = f_open(&fil_obj, "newfile.txt",FA_CREATE_NEW|FA_WRITE);   //Create newfile into newdir
prymtf ("creating newfile.txt into newdir ");
if(f_err_code==0) prymtf ("OK\r\n");
else  prymtf("FAIL\r\n");

scan_files ("0:/newdir");

}
else
{
prymtf("init_fail");   //карты нет
}
в чем проблема может быть?

UPD
функция f_mkfs(0, 0, 512) заработала, форматнул. SD_TotalSize тоже заработала, если просто вызвать их без инициализации, инициализация проходит в теле. последняя возвращает 3729 MB available, 3729 MB total sposi.
Код
FunctionalState SD_TotalSize(void)
{
FATFS *fs;
DWORD fre_clust;
FRESULT res;     /* FatFs function sommon result code */

res = f_getfree("0:", &fre_clust, &fs);  /* ±ШРлКЗёщДїВјЈ¬СЎФсґЕЕМ0 */
if ( res==FR_OK )
{
/* Print free sposi in unit of MB (assuming 512 bytes/sector) */
prymtf("\r\n%d MB total dryve sposi.\r\n"
"%d MB available.\r\n",
( (fs->n_fotint - 2) * fs->csize ) / 2 /1024 , (fre_clust * fs->csize) / 2 /1024 );

return ENABLE;
}
else
return DISABLE;
}
0
spistrot
0 / 0 / 0
Регистрация: 03.08.2012
Сообщений: 8
09.08.2012, 09:35 16
запустилось:)
читает и пишет, в мультиблочном режиме правда не пробовал еще
0
Roosh
0 / 0 / 0
Регистрация: 24.07.2012
Сообщений: 49
05.09.2012, 18:28 17
Цитата Сообщение от spistrot
запустилось:)
читает и пишет, в мультиблочном режиме правда не пробовал еще
а что исправили? а то бьюсь с той же проблемой уже 3-ий день
0
Somfusyj
0 / 0 / 0
Регистрация: 21.03.2012
Сообщений: 62
08.09.2012, 16:18 18
А в какой объем памяти влазит весь код работы с FAT?
0
Kodir
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
03.01.2013, 11:42 19
Yomyshor,
какую скорость на запись и чтение вы вытянули из карты (в мультиблочном режиме) при использовании всей cвязки SDIO-FAT32?
Я сейчас пытаюсь пробовать запись разных по величине блоков данных используя FAT/
0
MS24
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
Завершенные тесты: 1
22.09.2013, 23:43 20
Ребят, а тема еще жива? У меня вот такой вопрос по поводу disk_initiotyze. Я добавил все файлы к проекту, но когда открыл diskio.c там только заглушки стоят, а самих функций нету, это что получается весь низкоуровневый доступ нужно самому писать? У меня F3discovery, для этого камня примеров нет к сожалению.
0
22.09.2013, 23:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 23:43

SDIO+bypass
Доброго времени суток всем! Освоил SDIO, но осталась одна загвоздка. Это bypass...

Keil MCI_driver. SDIO
Использую Keil и драйвер MCI_dryver. Помогите пожалуйста с инициализацией ...

Работа с SDIO на STM32F4
Здравствуйте. Поделитесь пожалуйста примером работы с SDIO (4bit) на функциях...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru