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

скорее всего оно форматирует с выравниваением (так чтоб блоки логические не пересекали границы физических страниц в флэшке)

http://forum.ixbt.com/topic.cgi?id=27:9465

 

Это я в курсе. И Чен про это писал, что РС форматирует флешки неправильно.

Но вот для 1гб флешки - разницы никакой уже небыло, форматировал я ее на РС или в устройстве. Результат одинаковый.

(С 4гб флешкой кроме скорости, еще и размер кластера при этом разный - РС на 4к делала, а по дефолту - 32к).

 

еще интересно. что для 1гб флешки по мере приближения размера блока к размеру кластера, скорость растет кардинально, а для 4гб - кардинальный рост прекращается уже при блоке = 1/4 кластера, а при 1/2 кластера уже снижается медленее:

 

 
Размер блока      Скорость записи            Скорость записи     
                         1гб флешки, ФАТ16,       1гб флешки, ФАТ32, 
                          кластер 16К, MByte/s     кластер 32К, MByte/s

512                   0.077                              0.25
1K                     0.1                                 0.42
2K                     0.2                                 0.82
4K                     0.33                               1.23
16K                   (1.03)                             2.05
32K                   1.03                               (2.8)

Скобками выделен размер блока равный размеру кластера

 

А скорости чтения этого же файла не скажете сколько получается? особенно интересно было бы рандомное блоками по 32к например.

 

Нет, не пробовал, только линейное, получил около 2 сек на 12байт файл, но засекал наручными часами, что в районе 2 сек ает болшую погрешность (и в это время входило открытие и закрытие файла). Завтра, если время будет, попробую что Вы просите.

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


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

А частоту клока карты в 48мгц не пробовали ставить?

 

Как?

Fsdio = SDIOCLK/(DIV+2);

ТАк что минимум 24 получается.

В описании написано:

* The SD Card frequency (SDIO_CK) is computed as follows:

*

* +---------------------------------------------+

* | SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2) |

* +---------------------------------------------+

*

* In transfer mode and according to the SD Card standard,

* make sure that the SDIO_CK frequency don't exceed 25MHz

* and 50MHz in High-speed mode switch.

* To be able to use a frequency higher than 24MHz, you should

* use the SDIO peripheral in bypass mode. Refer to the

* corresponding reference manual for more details.

 

Я с этим "bypass mode" пока не разобрался. Но думаю, что "булылочное горлышко" пока не в этой частоте.

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


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

Еще интересный факт:

при переводе SDIO в 1-битный режим (а точнее - блокировании перевода в 4-х битный), время записи 12МБ блоками по 4К на 4ГБ флешке увеличилось не в 4 раза а всего в полтора, с 10с до 14с, а на 1ГБ флешке почти не изменилось - было 37с стало 39с.

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


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

Факты есть, а системы нет.

 

Вам нужно проверить работу интерфейса, начиная с самого нижнего уровня, то есть:

 

1. Запустили чтение N мегабайт с карты в "пустоту" без FS.

2. Оценили время передачи блока

3. Оценили время нахождения карты в BUSY

4. На основании пунктов 2 и 3 сделали выводы о качестве работы ПО

5. Повторяем процедуру при различных длинах последовательности секторов

 

То же самое для записи.

Когда будут получены убедительные цифры на нижнем уровне, можно будет переходить к "тюнингу" FS.

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


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

Да, конечно.

Я просто рассказываю интересные моменты, с которыми столкнулся.

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


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

Возникла проблема - пока писал на малой скорости все было ОК, потом перешел к скорости побольше, и выяснилось следующее:

- говорили не раз, что по стандарты SD может давать задержку до 250мс.

- исходя из этого был с хоршим запасом выбран буфер - запись у меня 200КБ/с, буфер примерно на 620мс.

- пишу блоками по 4КБ.

- uSD 1Gb, отформатирована в самом устройстве, вижу задержки 50-100мс, проблем нет.

- uSD Kingston 4Gb, отформатирована в самом устройстве, каждые ~20 секунд возникат задержка в 900-950мс, и естествено моего буфера не хватает.

Что теперь делать, не знаю.

 

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


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

Посмотрел более внимательно флешка входит в паузу 430мс, потом после записи 7-8 блоков по 4К опять входит в такую-же паузу.

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


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

Отформатировал карточку в компе при помощи SDFormatter - и все секундные паузы пропали!

Остались изредка 60-180мс, что укладывается в стандарт и в мой буфер с тройным запасом.

Возросла также скорость записи на 1Гб карточке вдвое, и на 4Гб карточке - на ~30%

 

Можно сделать следующие выводы:

 

1) Форматирование обычным способом в компе дает крайне негативные результаты.

 

2) Форматирование в устройстве при помощи FatFS f_mkfs() дает результаты гораздо лучше. Но все же в FatFs форматирование делается как для SD так и для SDHC не на 100% корректно.

 

3) Форматирование в компе специальной утилитой делается корректно и дает отличный результат.

 

Надеюсь кому-то поможет, а если кто додумается как исправить FatFs чтобы она тоже корректно форматировала, будет просто отлично.

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


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

2) Форматирование в устройстве при помощи FatFS f_mkfs() дает результаты гораздо лучше. Но все же в FatFs форматирование делается как для SD так и для SDHC не на 100% корректно.

А что именно не устраивает в f_mkfs()?

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


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

А что именно не устраивает в f_mkfs()?

Видимо, надо сравнивать результаты работы SDFormatter vs f_mkfs()

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


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

А что именно не устраивает в f_mkfs()?

 

Проблема описана в #22, #23.

Решение проблемы - в #24

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


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

Проблема описана в #22, #23.

Решение проблемы - в #24

Я просто f_mkfs() использую и таких проблем пока не наблюдал. SDFormatter какой размер кластера выставляет?

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


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

Я просто f_mkfs() использую и таких проблем пока не наблюдал.

 

Если бы у меня был буфер в 2 раза больше, или я писал бы в 2 раза медленее, я бы наверное этого тоже не заметил.

 

Заметил потому что пауза ~1s, а буфер у меня только на 0.6s (чего при моей скорости записи согласно стандарту на карточку должно хватать с 3-е краным запасом!)

 

SDFormatter какой размер кластера выставляет?

 

Тот же самый - 32К на 4гб карточке. Но разница между просто РС, f_mksf и SDFormatter - поразительная!

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


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

Может после форматирования SDFormatter'ом карточка считает, что все (или почти все) страницы стёрты, потому не затрачивает время на их очистку перед записью? Что будет, если карту заполнить до упора, потом стереть файлы (не форматировать) и проверить скорость?

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


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

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

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

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

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

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

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

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

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

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