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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Время записи в SD-card, Почему разное время записи
*rust*
сообщение Apr 28 2011, 19:09
Сообщение #1


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Всем привет. Столкнулся с такой проблемой: время записи данных в SD-card разное. Опишу все по порядку:

ядро: AT91SAM3U4E
SD-card: SanDisk 2GB

Данные пишет ARM3 в SD-card, используя библиотеку от Чена. Размер буфера для записи 16кБ.
Перед функцией записи ножку ARMа устанавливаю в "1" после сбразываю в "0", тем самым определяю время записи.
Запуск записи ручной в железе от кнопки (не в дебагере).
С 1 по 31 итерацию время записи 3 мС, 32 итерация длится 40 мС, далее цикл повторяется. Вот такая засада.

Кто сталкивался или знает, что происходит во время 32 итерации записи? Первое, что приходит в голову - это размер буфера в SD-card, примечательно, что 16*32=512, и вполне возможно буфер в SD-card равен 512 кБ. Когда он заполняется, то контроллер, который стоит в SD-card, переписывает его в память. Конечно, сильно притянуто за уши, тем более, что запись во флеш идет постраничная, а размер станиц равный 512кБ я нигде не встречал.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 28 2011, 20:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(*rust* @ Apr 28 2011, 23:09) *
Кто сталкивался или знает, что происходит во время 32 итерации записи?

Скорее всего, происходит стирание нового блока - у NAND они достаточно крупные. А вообще, так как внутри SD-карты живет еще целый уровень, обеспечивающий выравнивание износа, подмену битых блоков и тому подобное, задержки при записи могут быть достаточно случайными.

Проблемой такое поведение не является, и средняя скорость у вас получилась вполне на уровне.
Go to the top of the page
 
+Quote Post
*rust*
сообщение Apr 29 2011, 06:02
Сообщение #3


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



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


Да как сказать! Мне приходиться писать каждые 100mC 32кБ, с учетом того, есть еще подготовительные операции, то на запись в SD-card отводится 25mC(max), поэтому для меня это проблема.

Цитата
задержки при записи могут быть достаточно случайными.

Целый вечер вчера тестил, задержка появлялась только после 512кБ, в моем случае на 32 итерации.

У меня достаточно старая SD, 2 года ей где-то, может быть современные ведут себя по другому? И второй вопрос: Программно, существует способ перераспределить время записи?


Go to the top of the page
 
+Quote Post
_3m
сообщение Apr 29 2011, 07:20
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(*rust* @ Apr 29 2011, 10:02) *
Да как сказать! Мне приходиться писать каждые 100mC 32кБ, с учетом того, есть еще подготовительные операции, то на запись в SD-card отводится 25mC(max), поэтому для меня это проблема.

Буферизируйте.

Цитата
У меня достаточно старая SD, 2 года ей где-то, может быть современные ведут себя по другому? И второй вопрос: Программно, существует способ перераспределить время записи?

Карта это достаточно сложный черный ящик, ее внутренняя жизнь не документирована. Согласно спецификации длительность записи может доходить до сотни мс. Вот согласно спецификации и работайте!
Go to the top of the page
 
+Quote Post
*rust*
сообщение Apr 29 2011, 07:47
Сообщение #5


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Цитата
Буферизируйте.


Это как???

Сейчас полазил по производителям нашел разные современные карты со скоростью записи до 90MB/s какая-то сумасшедшая скорость, даже не вериться, дороговато к тому же.

Присмотрелся к SDHC SanDisk SDSDRX3-04G скорость записи 20 МБ/сек, Extreme Class 6 цена 990р. Должна быть побыстрей моей.
Как Вы думаете, стоит?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Apr 29 2011, 07:49
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(*rust* @ Apr 29 2011, 10:40) *
Это как???


Что-то непонятна ваша проблема. Вы вообще с файловыми операциями работаете или голые блоки пишете?
У файловый операций есть время открытия файла, время закрытия, время позиционирования, время записи, время чтения.
Вы о какой проблеме хотите поговорить?
Go to the top of the page
 
+Quote Post
klen
сообщение Apr 29 2011, 08:08
Сообщение #7


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(*rust* @ Apr 29 2011, 11:47) *
Сейчас полазил по производителям нашел разные современные карты со скоростью записи до 90MB/s какая-то сумасшедшая скорость, даже не вериться, дороговато к тому же.


а что сейчас максимально быстрое доступно в размере micro SDHC, цена не важно, главное чтоб летала побыстрее, скоро нада будет в мой видео регестратор накопитель лепить и прикручивать, от скорости разрешение максимальное зависеть будет в первом приближении.
Go to the top of the page
 
+Quote Post
*rust*
сообщение Apr 29 2011, 10:11
Сообщение #8


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Цитата
Что-то непонятна ваша проблема. Вы вообще с файловыми операциями работаете или голые блоки пишете?
У файловый операций есть время открытия файла, время закрытия, время позиционирования, время записи, время чтения.
Вы о какой проблеме хотите поговорить?


По-моему все написано предельно ясно в первом посте, если нет прошу прощения, перепишу снова:

!Для работы с SD-card использую библиотека от Сhan.

Сперва монтирую диск, создаю файл и открываю его. Время выполнения этих операций меня не интересуют.
Далее каждые 100mC происходит измерения, неважно какое, результатом которого является массив данных объемом 16кБ, при этом на запись этого массива в карту остается 25mС. Когда данные готовы к записи файл уже открыт, поэтому я могу определить время выполнения функции записи. Итак с 1 по 31 итерацию записи время 3mC, а 32 итерация длиться 40mC. После каждой итерации файл не закрывается. Файл я закрываю тогда, когда это необходимо. Думаю, все достаточно подробно.

Сама проблема в очень большом времени записи на 32 итерации.

Цитата
а что сейчас максимально быстрое доступно в размере micro SDHC, цена не важно, главное чтоб летала побыстрее, скоро нада будет в мой видео регестратор накопитель лепить и прикручивать, от скорости разрешение максимальное зависеть будет в первом приближении.


Посмотрите эту карту: Карта памяти CompactFlash SanDisk SDCFXP-032G
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 29 2011, 10:28
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(*rust* @ Apr 29 2011, 14:11) *
Далее каждые 100mC происходит измерения, неважно какое, результатом которого является массив данных объемом 16кБ, при этом на запись этого массива в карту остается 25mС. Когда данные готовы к записи файл уже открыт, поэтому я могу определить время выполнения функции записи. Итак с 1 по 31 итерацию записи время 3mC, а 32 итерация длиться 40mC. После каждой итерации файл не закрывается. Файл я закрываю тогда, когда это необходимо. Думаю, все достаточно подробно.

По спецификации операция записи может занимать до 250мс. Ваша программа должна обеспечивать буферизацию данных как минимум на это время.
Пытаться решить проблему подбором карты в корне неправильно. "Class 6" говорит о том, что средняя скорость не менее 6Мбайт/с, но это не значит, что задержки постоянны. Кстати, как показывают эксперименты, у современных карт при большей средней скорости максимальное время записи обычно больше, чем у карт 2-3 летней давности.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Apr 29 2011, 13:33
Сообщение #10


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(*rust* @ Apr 29 2011, 09:02) *
Да как сказать! Мне приходиться писать каждые 100mC 32кБ, с учетом того, есть еще подготовительные операции, то на запись в SD-card отводится 25mC(max), поэтому для меня это проблема.

Я недавно занимался тестированием SD-карт, в том числе измерял время записи сектора при массированной последовательной записи блоков различной длины. Поделюсь результатами и своей теорией.
Тест 1 - пишем последовательно в сектор записи по 16 байт, сектор закончился - берем следующий, с номером на единичку большим. Результат - типовое время записи порядка 1 мс (несколько зависит от типа карты и класса), но каждые примерно N записей - провал с некоторым типовым значением. Это значение составляет от 30 мс у самой быстрой новейшей SD 3.0 карты (30Мбайт/сек) до 300 мс у нестарой и заявленной как класс 4 SDHC. Карты 4-5 летней давности уложились в пределы 60-150мс.
Тест 2 - карта предварительно стерта командой SET_LOCK_UNLOCK. Пишем последовательно по целому сектору - типовое время записи сектора осталось то же самое, периодические 'выбросы' тоже есть, но они сократились очень значительно - ну раза в полтора-два больше чем типовое время записи. То есть карта в худшем случае 'думает' всего 2..5мс.
Eще был ряд тестов с привлечением команд стирания, я уже деталей полностью не помню.
Выводы у меня такие - карта, ее внутренний контроллер и его прошивка это черный ящик, но - 99% что основной массив флеш памяти "исповедует" принципы NAND - можно писать страницами (под размер сектора) и стирать только блоками (группами страниц). Отсюда следует основа алгоритма записи - заводится внутри некоторый пул свободных стертых страниц (размер пула равен периоду 'выбросов' времени записи), когда он заканчивается - информация переносится в основное хранилище - или ремаппингом (изменением индексов в базе) или тупо перезаписыванием. Также есть сильное подозрение что если есть возможность записывать сектор сразу на постоянное место (пишущийся сектор в основном массиве "стерт") то пишется на постоянное место.
Итого - если нужный набор секторов стереть (командами стирания) и писать каждый сектор не более одного раза - то такие 'спорадические' увеличения времени записи можно в большинстве случаев купировать. Эксперимент это подтверждает, проверено около 10 карт SD/SDHC разного возраста, объема и производителей.
Выявился еще интересный результат тестов - если в момент 'долгой записи' с карты снять питание (или просто стабилизатор не вытянет броска тока - жрать в этот момент карта начинает ой-ей) или подать команду сброса (так что тайм-ауты корректно все обрабатываем - это карта 'задумалась', а не умерла sm.gif), то на некоторых картах приходит пушной зверь - могут разрушиться данные, которые вообще не имели отношения к записываемому сектору - я думаю, что разрушается внутренняя индексная база.
Go to the top of the page
 
+Quote Post
*rust*
сообщение May 2 2011, 15:16
Сообщение #11


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Понятно, смысл ясен. Спасибо всем участникам обсуждения за ликбез. Я все же прикуплю ряд карт разной давности и различных классов и проделаю опыты с замером скорости записи и задержек. Результаты могу выложить здесь.
Go to the top of the page
 
+Quote Post
*rust*
сообщение May 5 2011, 11:58
Сообщение #12


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



У AT91SAM3U есть поддержка MMC Specification V4.3, как Вы думаете у карт MMCplus задержки записи будут меньше чем у SDcard?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 5 2011, 17:38
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(*rust* @ May 5 2011, 15:58) *
У AT91SAM3U есть поддержка MMC Specification V4.3, как Вы думаете у карт MMCplus задержки записи будут меньше чем у SDcard?

Думаю, будут примерно такие же. Чтобы гарантированно писать 32кБайт/мс на SAM3U нужна внешняя память, иначе никак.
Go to the top of the page
 
+Quote Post
*rust*
сообщение May 6 2011, 11:12
Сообщение #14


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Понял Вас, спасибо.
Go to the top of the page
 
+Quote Post
shishka
сообщение May 17 2011, 08:16
Сообщение #15





Группа: Новичок
Сообщений: 5
Регистрация: 25-08-09
Пользователь №: 52 030



[quote name='VslavX' date='Apr 29 2011, 20:03' post='922688']
Доброого времени суток.
У меня та же проблема с SD картами. Среднюю скорость записи на карту без проблем достигаю 4-6 Мбайт/с. Пишу по кусками по 32 кБайт при помощи CMD25. И мне ужасно мешают жить эти большие задержки по 30-150 мс !!! На проце уже нет свободной ОЗУ, чтобы буфферизировать данные в течение этого времени. Максимум могу делать буфферизацию в течение 25 мс.
Использование команды Pre-erase существенного выигрыша не дает. При предварительном стирании больших кусков памяти при помощи команды CMD38 также не увидел пропадания этих больших задержак при WRITE_MULTIPLY_BLOCK.

Поэтому крайне интересно то, что написал "VslavX" 1111493779.gif

Цитирую:
"Тест 2 - карта предварительно стерта командой SET_LOCK_UNLOCK. Пишем последовательно по целому сектору - типовое время записи сектора осталось то же самое, периодические 'выбросы' тоже есть, но они сократились очень значительно - ну раза в полтора-два больше чем типовое время записи. То есть карта в худшем случае 'думает' всего 2..5мс. "

Так вот у меня возник вопрос к "VslavX" !!! Что это за команда такая предварительного стирания SET_LOCK_UNLOCK, которой Вы пользовались и которая Вам так облегчила жизнь ????? Можете написать ее номер ???
Вроде как в спецификации на карту оговорены только команды для стирания CMD38 (ERASE) и ACMD23(Pre-erase).

Спасибо

Go to the top of the page
 
+Quote Post
VslavX
сообщение May 17 2011, 09:03
Сообщение #16


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(shishka @ May 17 2011, 11:16) *
Так вот у меня возник вопрос к "VslavX" !!! Что это за команда такая предварительного стирания SET_LOCK_UNLOCK, которой Вы пользовались и которая Вам так облегчила жизнь ????? Можете написать ее номер ???

CMD42, с установленным флажком ERASE.
По идее - команда обычного стирания (CMD38) тоже должна помочь, но ее я не пробовал. Возможно у Вас в один и тот же сектор пишется несколько раз после стирания (если там файловая система типа FAT, то такое вполне может быть) - поэтому задержки не устранились.
Go to the top of the page
 
+Quote Post
shishka
сообщение May 17 2011, 10:01
Сообщение #17





Группа: Новичок
Сообщений: 5
Регистрация: 25-08-09
Пользователь №: 52 030



Цитата(VslavX @ May 17 2011, 15:33) *
CMD42, с установленным флажком ERASE.
По идее - команда обычного стирания (CMD38) тоже должна помочь, но ее я не пробовал. Возможно у Вас в один и тот же сектор пишется несколько раз после стирания (если там файловая система типа FAT, то такое вполне может быть) - поэтому задержки не устранились.


Спасибо за ответ, но:
1. Команда CMD42, если я все правильно понимаю, предназначена для блокирования/разблокирования карты. Установка в этой команде флажка ERASE приведет к тому, что в дальнейшем картой будут блокироваться запросы на стирание.
2. На данном этапе я просто тестирую карты и еще не использую файловую систему. Результатом тестирования является гисторграмма распределения длительности записи. Запись в моем тесте идет последовательно и адреса наращиваются тоже последовательно. Так вот, тест показал, что при записи 80000 кусков данных (каждый кусок - это 64 блока по 512 байт) или что тоже самое 2.5 Гбайт на SDHC время записи у, примерно, 5-15 кусков превышает 50 мс. в то время как у оставшихся 7995-7985 кусков оно не превышает и 6 мс!!!
3. Использование команды CMD38 не помогло устранить этой проблемы.

'VslavX' возможно ли как то хотя бы взглянуть на Ваши условия тестирования и полученные результаты ??? rolleyes.gif

Еще что интересно, так это то, что и на зарубежных сайтах не дают четкого ответа откуда возникают это большое "busy time" при мультиблоковой записи и как с ним бороться!!! Тогда как работают, например, видеокамер, которые используют SD карты ??? неужели у них такой большой внутренний буфер (ОЗУ), что его хватает аж на 250 мс видеопотока (250 мс вроде как заявлено в спецификации).

Еще раз спасибо 'VslavX' за ответ laughing.gif
Go to the top of the page
 
+Quote Post
VslavX
сообщение May 17 2011, 10:40
Сообщение #18


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(shishka @ May 17 2011, 13:01) *
1. Команда CMD42, если я все правильно понимаю, предназначена для блокирования/разблокирования карты.

Да, для блокирования-разблокирования. Но, допустим, у Вас есть карта с установленным паролем, и Вы его забыли. Что делать? Выкидывать всю карту? Ж-а-а-а-лко sm.gif Вот поэтому и есть опция ERASE - снимается пароль, а перед этим стираются все данные которые были этим паролем защищены, так сказать карта приводится "к печке" - в некоторое начальное состояние. Кстати, я использовал в тестах стирание через команду CMD42 не потому что "что-то знал", а просто у меня был готовый код и лень было писать процедуры с использованием CMD38.

Цитата(shishka @ May 17 2011, 13:01) *
Установка в этой команде флажка ERASE приведет к тому, что в дальнейшем картой будут блокироваться запросы на стирание.

Хм, а почему Вы так думаете? Я что-то пропустил/недопонял в стандарте?

Цитата(shishka @ May 17 2011, 13:01) *
возможно ли как то хотя бы взглянуть на Ваши условия тестирования и полученные результаты ??? rolleyes.gif

Взглянуть можно на функцию теста - она очень простая. Варьируя число в цикле j<128 я пробовал разное количество записей в один и тот же сектор, и выводил к консоль время выполнения операций которые длились более 10мс. Снаружи еще была функция стирания по CMD42 - все эти тестовые функции можно было запускать по клавишам в консоли в произвольном порядке.
Точных результатов, к сожалению, не помню, и этот-то кусочек кода случайно сохранился. Сначала я выводил информацию о времени всех операций в файл - получил представление о среднем времени записи и о спорадических задержках. Потом выполнил CMD42 и увидел что ситуация намного улучшилась если одна запись в один сектор. Ну а потом уже поставил лимит time<10000 - и игрался наблюдая только задержки.

CODE

static void io_test_mmc_wsecbytes(void)
{
IO_STATUS io_status;
DWORD size, i, j, time, n;

n = 0;
size = io_mmc_size();
if (size != 0)
{
for(i=0; i<size; i++)
{
tst_printf("\r\nSector: %08X\f", i);

hal_memset(mmc_udma, 0xFF, sizeof(mmc_udma));
for(j=0; j<128; j++)
{
DWORD old;

mmc_udma[j] = i + j;

tn_task_raise_priority(TN_UPPER_APP_PRIORITY, &old);
time = hal_profiler_counter();
io_status = io_mmc_write(i, 1, mmc_udma);
time = hal_profiler_elapsed_us(time);
tn_task_lower_priority(old);

if (io_status != IOERR_SUCCESS)
{
tst_printf("\r\nWrite %08X sector error: %d", i, io_status);
return;
}
if (time > 10000)
{
tst_printf("\r\n %06d: %d\f", n, time);
}
n++;
tn_task_sleep(MS_TO_TICKS(10));
if (hal_inkey() != 0)
{
return;
}
io_status = io_mmc_read(i, 1, mmc_ndma);
if (io_status != IOERR_SUCCESS)
{
tst_printf("\r\nRead %08X sector error : %d", io_status);
return;
}
if (hal_memcmp(mmc_ndma, mmc_ndma, IO_MMC_BLOCK_SIZE))
{
tst_printf("\r\nRead data back are wrong");
return;
}
}
}
}
}

Upd: я тут еще заметил что у меня пауза между операциями в 10 мс стоит, надо бы повторить тест без нее - а то не совсем чисто получается.
Upd2: только что попробовал старую SD-micro карту на 512Мбайт - так она и по 128 записей на сектор и без предварительного стирания всегда в 10 мс укладывается. Я примерно час буду занят - потом попробую более тостые карты и без задержки 10 мс - отпишусь.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 17 2011, 10:44
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(shishka @ May 17 2011, 14:01) *
Еще что интересно, так это то, что и на зарубежных сайтах не дают четкого ответа откуда возникают это большое "busy time" при мультиблоковой записи и как с ним бороться!!!

Откуда берется не пишут, так как это внутренняя кухня производителя (и у каждого своя), и нет нужды знакомить с ней общественность. На деле все и так более-менее понятно: стирание нового блока, перенос данных из частично пустого для подготовки к стиранию и т.п. издержки организации хранения данных в NAND.
Бороться нельзя никак, природу не обманешь.
Цитата(shishka @ May 17 2011, 14:01) *
Тогда как работают, например, видеокамер, которые используют SD карты ??? неужели у них такой большой внутренний буфер (ОЗУ), что его хватает аж на 250 мс видеопотока (250 мс вроде как заявлено в спецификации).

Конечно, используется достаточно большой буфер: 2-4 мегабайта - это по нынешним временам почти ничего.
Go to the top of the page
 
+Quote Post
shishka
сообщение May 17 2011, 11:53
Сообщение #20





Группа: Новичок
Сообщений: 5
Регистрация: 25-08-09
Пользователь №: 52 030



Спасибо за ответы.

Для VslavX: По поводу команды CMD42 с установленным флагом ERASE - прошу прощения я не корректно перевел спецификацию.
Go to the top of the page
 
+Quote Post
VslavX
сообщение May 17 2011, 14:33
Сообщение #21


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



В-общем, проделал я такие тесты:
CODE

Карта Transcend 512M
- подали питание и инициализировали
- выполнили CMD42 с полным стиранием

номер время в дельта
записи микросек номера

- 1 запись на сектор
001099: 167556 +1099
003099: 163378 +2000
005099: 162215 +2000
007099: 164809 +2000
008099: 63701 +1000
009099: 165216 +1000
011099: 163590 +2000
013099: 163729 +2000

- 1 запись на сектор, повтор
001897: 164404 +1897
003897: 164989 +2000
004897: 66539 +1000
005897: 168102 +1000
007897: 166940 +2000
009897: 163613 +2000
011897: 167304 +2000

- 128 записей на сектор
000639: 209017 +639
001150: 211718 +511
001661: 209965 +511
002172: 213462 +511
002683: 209975 +511
002733: 65913 +50
003194: 210256 +461
003705: 212577 +511
004216: 212983 +511
004727: 212452 +511
005238: 210349 +511

- 1 запись на сектор
000158: 211175 +158
000414: 213704 +256
000670: 214446 +256
000926: 213426 +256
001024: 33885 +98
001042: 165776 +18
003042: 167437 +2000
005042: 163185 +2000

- приводим карту "к печке"
- подали питание и инициализировали
- выполнили CMD42 с полным стиранием
- 1 запись на сектор
000599: 64916 +599
001099: 168699 +500
003099: 164326 +2000
005099: 162175 +2000
007099: 164776 +2000
009099: 168463 +2000


Видно что после приведения "к печке" становится лучше (залеты каждые 2000 секторов), но таки "не совсем хорошо" - спорадические задержки остаются. Увы,значит CMD42 - не панацея sad.gif.
Go to the top of the page
 
+Quote Post
shishka
сообщение May 20 2011, 07:48
Сообщение #22





Группа: Новичок
Сообщений: 5
Регистрация: 25-08-09
Пользователь №: 52 030



Ну вот - теперь у Вас почти совсем как и у меня biggrin.gif
Go to the top of the page
 
+Quote Post
*rust*
сообщение Jun 27 2011, 10:54
Сообщение #23


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



В очередной раз убедился, что абсолютно новая карточка с магазина, ведет себя намного лучше прописал 1гиг, по 32кБ каждые 100мС, все нормально, правда у меня есть небольшая буферизация.

Но стоит только начать писать по писанномуsm.gif все начинаются сюрпризы с большими задержками.
Пробовал разные способы форматирования, даже форматировал прогой от производителя, все равно не достигнул того, что было когда карта была новой.

Как привести карту к первоначальному состоянию?
Go to the top of the page
 
+Quote Post
_3m
сообщение Jun 27 2011, 14:14
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(*rust* @ Jun 27 2011, 14:54) *
Как привести карту к первоначальному состоянию?

А смысл???
Допустим приведете вы карточку к магазинному состоянию (вообще не факт что это в принципе возможно) и что дальше? Повесите в рамочке на стену?
Как только начнете использовать карту - сразу возникнут задержки.
Расчитывайте буфер на указанное в документации время записи до 250мс и будете спать спокойно!


Go to the top of the page
 
+Quote Post
*rust*
сообщение Jun 27 2011, 17:59
Сообщение #25


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



Цитата
Расчитывайте буфер на указанное в документации время записи до 250мс и будете спать спокойно!

Нет возможности сделать такой буфер.
Цитата
Повесите в рамочке на стену?

При чем тут стена? Я же говорю, что новая ведет себя вполне достойно! Если перед каждым использованием проделывать процедуру приведения в первоначальное состояние, меня бы это устроило.

Цитата
Как только начнете использовать карту - сразу возникнут задержки.

Еще раз, на совершенно новой SD-card прописал 1GB, задержек было очень мало и они были короткие, моя буферизация это выравнивала.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Jun 27 2011, 21:43
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Есть еще некоторые карточки, которые (даже полностью стертые) не выносят запись малого количества данных. Скорость записи падает ниже указанного класса в разы. Способ борьбы - писать в мультисекторном режиме большими кусками. Тогда задержки становятся нормальными.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 27 2011, 21:53
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(*rust* @ Jun 27 2011, 21:59) *
Нет возможности сделать такой буфер.

Значит нет возможности гарантировать работоспособность системы в любых обстоятельствах.
Можно попробовать ограничить ущерб от этой ошибки в проектировании системы.
Go to the top of the page
 
+Quote Post
bels
сообщение Aug 31 2011, 11:49
Сообщение #28





Группа: Новичок
Сообщений: 4
Регистрация: 23-10-08
Пользователь №: 41 123



Цитата(*rust* @ Jun 27 2011, 21:59) *
Нет возможности сделать такой буфер.



Еще раз, на совершенно новой SD-card прописал 1GB, задержек было очень мало и они были короткие, моя буферизация это выравнивала.


*Rust* - в итоге все же было бы очень интересно знать как Вы разрешили свою проблему. Т.е. какой буфер Вы используете (32К) ? Как он устроен? Как кольцевой или обычное карамысло(2 области попеременно заполняемые и соответственно вычитываемые)? Как часто Вы закидываете данные в карту?

У моего сотрудника похожая ситуация: ядро: AT91SAM3U4E, происходит опрос датчиков с частотой 2 милисекунды, за этот же период времени необоходимо закинуть на SD карточку 2кбайт данных, используем карамысло - 2 области по 4кбайт каждая (попробуем увеличить буфер, но думаю это возможно не более чем в 2 раза, в виду нагруженности другими задачами) . В результате работы имеем пропуски в записи на карту. Очень хочется решить проблемму имеющимися средствами, и очень не хочется вешать дополнительные внешние буфера памяти (хотя пока и не уверен что это возможно....).

Спасибо!
Go to the top of the page
 
+Quote Post
Lotor
сообщение Sep 1 2011, 05:06
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(bels @ Aug 31 2011, 15:49) *
и очень не хочется вешать дополнительные внешние буфера памяти

Из собственного опыта записи на SD - советую не надеяться на чудо, а начинать думать, как навесить буфера... wink.gif


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
bels
сообщение Sep 1 2011, 15:37
Сообщение #30





Группа: Новичок
Сообщений: 4
Регистрация: 23-10-08
Пользователь №: 41 123



Цитата(Lotor @ Sep 1 2011, 09:06) *
Из собственного опыта записи на SD - советую не надеяться на чудо, а начинать думать, как навесить буфера... wink.gif


А каков гарантированный минимальный размер этого буфера(ов)?

Немного не по теме... я бы хотел (если это конечно возможно) проконсультироваться более подробно с *Rust*( e-mail или Skype), но когда начинаю пытаться ему сбросить сообщение через форум - система выдает: "...Вам запрещено использовать личные сообщения на форуме...". Простите, но другой возможности как писать сюда у меня просто нету sad.gif(
Модераторы, жду Вашей помощи...

Спасибо!
Go to the top of the page
 
+Quote Post
Lotor
сообщение Sep 1 2011, 20:01
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(bels @ Sep 1 2011, 18:37) *
А каков гарантированный минимальный размер этого буфера(ов)?

Гарантированный не высчитывал, у меня таких проблем нету - стоит sdram на 256Mb, буферизация по 4 МБайта...
И да, при записи небольших порций данных (до 300 Кбайт) - microSD гораздо лучшие результаты по быстродействию показывали чем SDHC.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 2 2011, 11:24
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(bels @ Sep 1 2011, 19:37) *
А каков гарантированный минимальный размер этого буфера(ов)?

SD-карта может давать задержки до 250мс, поток у Вас около 1мБайт/с, соответственно, размер буфера должен быть никак не меньше 250кБайт.
Go to the top of the page
 
+Quote Post
bels
сообщение Sep 2 2011, 16:27
Сообщение #33





Группа: Новичок
Сообщений: 4
Регистрация: 23-10-08
Пользователь №: 41 123



Я понимаю что по спецификации задержка может достигать 250мс, но у нас нет сейчас времени на доработку.
А ни у кого не было опыта с тестированием карточек 6го и 10го класса? Какая там задержка набегает максимальная?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 2 2011, 17:35
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(bels @ Sep 2 2011, 20:27) *
А ни у кого не было опыта с тестированием карточек 6го и 10го класса? Какая там задержка набегает максимальная?

Как ни парадоксально, но чем выше класс, тем больше и задержка. Наиболее скоростными будут не HC-карты объемом около 1ГБайт.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Sep 5 2011, 10:47
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



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


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
toretto
сообщение Oct 11 2011, 13:48
Сообщение #36


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



С какого адреса можно начинать чтение данных с SD-флешки: с любого байта или адреса, кратного сектору (например 512 байт)?
Go to the top of the page
 
+Quote Post
Lotor
сообщение Oct 11 2011, 13:52
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(toretto @ Oct 11 2011, 17:48) *
С какого адреса можно начинать чтение данных с SD-флешки: с любого байта или адреса, кратного сектору (например 512 байт)?

В зависимости от того, какая у Вас адресация в карточки - побайтовая (адрес кратен 512) или посекторная (адрес равен номеру сектора).


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
toretto
сообщение Oct 12 2011, 08:56
Сообщение #38


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



а каким образом я могу узнать способ адрессации карты?
Go to the top of the page
 
+Quote Post
Lotor
сообщение Oct 12 2011, 09:42
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(toretto @ Oct 12 2011, 12:56) *
а каким образом я могу узнать способ адрессации карты?

Если по-простому, то оригинальная SD использует схему побайтовой адресации, а SDHC - посекторную.
Чуть посложнее - прочесть регистры карты (а именно: после завершения инициализации, прочитайте регистр OCR и проверьте бит CCS[30]. Если он установлен, то адресация блочная).


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
toretto
сообщение Oct 12 2011, 10:49
Сообщение #40


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



спасибо, попробую. если мне действтельно удастся читать с любого байта, это на порядок упростит мне жизнь sm.gif
Go to the top of the page
 
+Quote Post
Lotor
сообщение Oct 12 2011, 10:53
Сообщение #41


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(toretto @ Oct 12 2011, 14:49) *
если мне действтельно удастся читать с любого байта, это на порядок упростит мне жизнь sm.gif

А я разве Вам сказал, что можно читать с любого байта?.. sm.gif Просто 3 сектор например в побайтовой адресации будет иметь адрес 1536, а в поблочной - 3.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
toretto
сообщение Oct 12 2011, 11:26
Сообщение #42


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 14-03-11
Пользователь №: 63 590



хех.. sm.gif значит читать можно только целыми секторами?
Go to the top of the page
 
+Quote Post
Lotor
сообщение Oct 12 2011, 12:33
Сообщение #43


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(toretto @ Oct 12 2011, 15:26) *
хех.. sm.gif значит читать можно только целыми секторами?

Именно. sm.gif


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
*rust*
сообщение Oct 13 2011, 11:26
Сообщение #44


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

Группа: Участник
Сообщений: 109
Регистрация: 19-01-11
Пользователь №: 62 335



По задержкам.

Я перепробовал огромное количество карточек, вывод один - задержки есть у всех. У некоторых они чаще и дольше, а у некоторых реже и меньше соответственно. Остановился на Transcend, тестил как SDHC так и microSDHC, все не ниже 6 класса и ведут себя примерно одинаково.
Я раньше об этом уже писал, что задержек намного меньше если тестируешь новую неписанную карту. Объяснение этому есть, не буду тут его приводить, эту информацию и так можно найти. Остановлюсь конкретно на вопросе как приводить карту к первоначальному состоянию. Путем многочисленных экспериментов, после каждого использования карты, линейной записи до конца (благо проект это позволяет), выяснил, что достаточно отформатировать карту спец. программкой от Transcend. Все, карта как новая. В моем случае вероятность появления задержек, которые приводят к ошибкам снизилась в пять раз, но не принимайте это за панацею. Т.к в моем проекте также есть небольшая буферизация данных на случай задержек.
Советую почитать How to Use MMC/SDC и особенно обратить внимание на Optimization of Write Performance.

Программа для форматирования от Transcend
Прикрепленный файл  AutoFormat_1_.zip ( 266.06 килобайт ) Кол-во скачиваний: 203
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 03:06
Рейтинг@Mail.ru


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