Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SDHS и FatFS
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Danis
Приветствую коллеги!

Возникла надобность поработать с FAT32 на STM32.
Имеется демо плата TE-STM32F103:
TE-STM32F103
Две micro SDCH каждая по 4Гб, Kingston и QUMO. Класс 4.
Для реализации низкоуровневого драйвера я использовал поставляемый к отладочной плате STM3210E_EVAL, файлы stm32_eval_sdio_sd.c и stm32_eval_sdio_sd.h.
Запустится сразу - не получилось. ИМХО карточкам памяти не понравилась частота 24Mhz передачи данных по интерфейсу SDIO. Формула такая:
SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2).

По умолчанию в файле stm3210e_eval.h было определо:
#define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x00)

Я изменил SDIO_INIT_CLK_DIV на 0x01.

При этом карточка QUMO заработала, низкоуровневые функции read/write/erase стали работать корректно. Скорости тоже адекватные. Использую режим данных SDIO data - 4 bit. Карточка Kingston начала работать только после того как я допаял дополнительно 6 подтягивающих резисторов на линии D0-D3, CLK и CMD, подтяжка к VCC.

Проверил запись/чтение/ верификация на весь объем карточек, все корректно.

Теперь подключил FatFs Generic FAT File System Module, R0.09 ©ChaN, 2011.
Реализовал функции
Disk I/O Interface

disk_initialize - Initialize disk drive
disk_status - Get disk status
disk_read - Read sector(s)
disk_write - Write sector(s)
disk_ioctl - Control device dependent features
get_fattime - Get current time.

На ПК подготовил файл около 3,5GB, записал на microSD.
Функцией f_read и f_lseek, считал по блокам и верифицировал – все корректно, скорость чтения получилась около 1,8-2,3 MB/sec.
C функцией f_write возникли затруднения, а именно при дозаписи файлов размер которых становится больше 3,5MB, возникает ошибка записи. Папки, маленькие файлы - создаются нормально и читаются на ПК. Сильно не хочется рыться в «исходниках» FatFs, поэтому приму с благодарностью советы и опыт по устранению этого «косяка».
Danis
Цитата(Danis @ Aug 26 2012, 15:18) *
....советы и опыт по устранению этого «косяка».


Разобрался, забыл закрыть файл после его создания, вот и «глючило». Сейчас все корректно идет. Записываются «гигантские» файлы нормально!


res = f_open(&fdst, "Message.txt", FA_CREATE_ALWAYS | FA_WRITE);

f_close(&fdst); // Забыл включить эту строку

res = f_open(&fdst, "Message.txt", FA_READ|FA_WRITE);
...
res = f_lseek( *,*);
...
res = f_write(...)
...
KnightIgor
Цитата(Danis @ Aug 28 2012, 17:59) *
Разобрался, забыл закрыть файл после его создания, вот и «глючило». Сейчас все корректно идет. Записываются «гигантские» файлы нормально!

res = f_open(&fdst, "Message.txt", FA_CREATE_ALWAYS | FA_WRITE);

f_close(&fdst); // Забыл включить эту строку

res = f_open(&fdst, "Message.txt", FA_READ|FA_WRITE);

Никогда бы не подумал, что так нужно делать. Разве первая команда не достаточна для начала действий по записи? По-моему, это явный глюк у Чена. Как догадался сделать такой work around?
Danis
Цитата(KnightIgor @ Aug 29 2012, 11:06) *
Никогда бы не подумал, что так нужно делать. Разве первая команда не достаточна для начала действий по записи? По-моему, это явный глюк у Чена. Как догадался сделать такой work around?


Возможно, Вы правы, на разбор полетов как всегда нет времени. Чисто случайно попробовал и получилось, на ПК редко когда приходилось дозаписью файлов заниматься. Сейчас меня интересует перенос этого (FAT32 + microSD) на младшую линейку STM32, где нет SDIO, но есть SPI. Как известно карточки его (SPI) поддерживают. Если есть таковой опыт, поделитесь: совместимость, подводные камни, скорость r/w и т.п. заранее Спасибо!
Grape
Пишу на SDHC файлы до 25Мб, проблем вроде нет.
FatFs R0.09, sdio, lpc2468, lpc1778

скорее что-то не так с низкоуровневыми функциями...

/gr
spectral1989
spi+microsd на младших сериях stm32
http://mycontroller.ru/category/vneshnie-u...rta-pamyati-sd/
Genadi Zawidowski
Цитата(Danis @ Aug 29 2012, 15:51) *
SPI. Как известно карточки его (SPI) поддерживают. Если есть таковой опыт, поделитесь: совместимость, подводные камни, скорость r/w и т.п. заранее Спасибо!


Не забыть про подводный камень: когда читаете данные, в карточку гнать по SPI единицы. Иначе операция чтения завершится раньше чем надо.
скорость не выще скорости передачи по SPI, сама карточка может задержать начало выдачи данных или приём данных при записи.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.