реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SDHS и FatFS, Вопрос по дозаписи файлов.
Danis
сообщение Aug 26 2012, 11:18
Сообщение #1


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Приветствую коллеги!

Возникла надобность поработать с 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, поэтому приму с благодарностью советы и опыт по устранению этого «косяка».


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
Danis
сообщение Aug 28 2012, 15:59
Сообщение #2


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(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(...)
...


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Aug 29 2012, 07:06
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(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?
Go to the top of the page
 
+Quote Post
Danis
сообщение Aug 29 2012, 11:51
Сообщение #4


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



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


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


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
Grape
сообщение Aug 30 2012, 08:34
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 69
Регистрация: 22-10-04
Пользователь №: 956



Пишу на SDHC файлы до 25Мб, проблем вроде нет.
FatFs R0.09, sdio, lpc2468, lpc1778

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

/gr
Go to the top of the page
 
+Quote Post
spectral1989
сообщение Aug 30 2012, 10:13
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 5-04-12
Из: Томск
Пользователь №: 71 210



spi+microsd на младших сериях stm32
http://mycontroller.ru/category/vneshnie-u...rta-pamyati-sd/
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Aug 30 2012, 11:12
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(Danis @ Aug 29 2012, 15:51) *
SPI. Как известно карточки его (SPI) поддерживают. Если есть таковой опыт, поделитесь: совместимость, подводные камни, скорость r/w и т.п. заранее Спасибо!


Не забыть про подводный камень: когда читаете данные, в карточку гнать по SPI единицы. Иначе операция чтения завершится раньше чем надо.
скорость не выще скорости передачи по SPI, сама карточка может задержать начало выдачи данных или приём данных при записи.

Сообщение отредактировал Genadi Zawidowski - Aug 30 2012, 11:19
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 05:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.02348 секунд с 7
ELECTRONIX ©2004-2016