Низкая скорость сд карты что это значит

Медленная работа SD карточек — кто виноват и что делать?

Давно думал написать статью на Хабр, но все как-то не решался. Хотя и кажется, что есть мысли, которые были бы небезинтересны сообществу, но останавливает предположение, что это «кажется» проистекает от завышенной самооценки. Тем не менее попробую. Поскольку я профессионально занимаюсь электроникой, в частности, программированием микроконтроллеров, довольно-таки длительное время (как я подозреваю, дольше, чем живет большАя а может даже и бОльшая часть читателей Хабра), то за это время накопилось изрядное количество интересных случаев. Представляю на суд сообщества рассказ об одном из них.

Итак, в одной разработке мне потребовалось сохранять значительные объемы информации с целью последующей передачи через сеть в обрабатывающий центр. Поскольку полученное устройство предполагало серийное производство, был выбран вариант с применением относительно недорогих компонентов, и, в частности, микроконтроллера как центрального элемента системы. Поскольку в тот момент (середина 2012 года) предложение микроконтроллеров с Ethernet PHY на борту не отличалось разнообразием (да и сейчас положение не намного лучше), был выбран МК фирмы TI семейства Stellaris, конкретно LM3S8962, тем более что отладочная плата для него у меня уже имелась. МК на тот момент относительно новый, активно продвигаемый фирмой TI (это в конце 2013 года она ВНЕЗАПНО перевела всю серию в разряд NRND), и обладающий вполне достаточными для решения данной задачи параметрами. Для хранения информациии был выбран вариант с SD карточкой, в первую очередь из за их доступности и дешевизны, а также потому, что на отладочной плате наличествовало контактное устройство для них, а на поставляемом с платой отладки CD имелись многочисленные примеры, в том числе и для SD карт. Интерфейс к карточке был реализован простейший — SPI, предложенные примеры сходу заработали, принятое решение позволяло обрабатывать полученные данные до написания интерфейса при помощи элементарного переноса карточки из устройства в кард-ридер ПК, так что первоначальная отладка алгоритмов взаимодействия с объектом управления проблем не вызвало, по крайней мере в этой части проекта. Как все понимают, проблемы возникли несколько позже…

Читайте также:  Что значит мятежный характер

Когда алторитмы были отлажены и устройство в целом заработало, начались тестовые прогоны. И тут выясняется, что SD карточка не способна записывать информацию в том темпе, в котором объект управления ее поставляет, причем разница скоростей составляет разы, а с учетом размеров единицы хранения (2.7 мегабайта) создать промежуточный буфер по приемлемой цене не удасться. Переходя к конкретным цифрам, требовалось файл размером 2.7 мегабайта записывать на SD карточку не более, чем за 1.6 секунды, а реально данные записывались 30 секунд, причем карточки были приобретены класса 10, то есть утверждали скорость записи 10 мбайт/сек. Борьба за скорость шла в несколько этапов и противниками оказывались то микроконтроллер, то стандартная библиотека (фирменная от TI между прочим), то, собственно, SD карточки.

Первый этап — исследую тайминги записи и сразу же выясняю, что запись различных участков информации идет разное время, причем время записи одинаковых блоков информации существенно (в разы) отличается. Путем экспериментов с различными размерами блоков записи устанавливаю простую закономерность — чем больше блоки информации для записи, тем меньше время записи, отнесенное к ее размеру. Псокольку модули библиотеки поддерживают FAT и записывают информацию посекторно, а переделывать их смысла не вижу, переформатирую карточку на размер сектора 32 кбайт и получаю время записи 14 секунд — 1 очко SD.

Второй этап — проверяю работы SPI интерфейса и обнаруживаю, что он работает на частоте 12.5 мгц, хотя описание позволяет установить частоту передачи до 25 мгц (половина от тактовой частоты процессора 50 мгц). Выясняется, что подпрограмма установки частоты SPI модуля из библиотеки ограничивает максимально возможную частоту значением 12.5 мгц, причем в документации на интерфейсный модуль микроконтроллера подобное ограничение отсутствует.
Изменяем код и получаем уменьшение времени записи в 2 раза до 7 секунд — 1 очко TI.

Читайте также:  Что значит краткие тезисы

Третий этап — исследую модули обмена с SD карточкой и обнаруживаю весьма непроизводительное расходование времени в низкоуровневых процедурах, а именно: модуль SPI в микроконтроллере имеет в своем составе FIFO буфер на 8 байт, что позволяет ускорить работу с ним. Модуль вывода до передачи очередного байте проверяет флаг «буфер передачи не полон» для ожидания возможности переслать следующий байт, и вроде бы все нормально. Но вслед за передачей байта вызывается модуль приема байта (дело в том, что при передаче в интерфейсе SPI одновременно производится и прием), который должен выбрать из приемного буфера эти ненужные принятые байты. И вот эта процедура опрашивает флаг «буфер приема не пуст», то есть ожидает окончания сериализации последнего байта буфера. То есть ждет, пока не будет полностью передан текущий байт и лишь потом готовит следующий для передачи.

Исправляю обнаруженую ошибку (а как это еще назвать ?) и получаю время передачи файла 3 секунды — 1 очко TI.
И вот что получилось в результате оптимизации, не учитывающей особенности задачи.

Четвертый этап — исследую модули более высокого уровня и выясняю что, поскольку передача данных в интерфейс предусмотрена только из памяти, мне приходится проводить двойную работу — сначала читать поток данных из объекта управления и пересылать в оперативную память микроконтроллера (а это, между прочим, 32 килобайта буфера), а потом из памяти в регистры интерфейса SPI. Пишу свой собственный модуль для передачи данных непосредственно из регистра в регистр, и получаю время записи 1.6 секунды. При этом обращение к своему модулю маскирую внутри стандартного вызова, чтобы файловую система понимала, что переданы 32 килобайта — 1 очко TI.

Читайте также:  Повышение давления после приема пищи что это значит

Пятый этап. Поставленная цель уже достигнута, но процесс оптимизации продолжается по инерции. Исследую еще раз сигналы на интерфейсе и обнаруживаю, что на самом деле передается не непрерывная последовательность тактовых импульсов, а 8 бит данных плюс пауза в 2 такта. Ну хорошо, девятый бит нужен для передачи сигнала синхронизации (не путать с тактовым сигналом), причем мне он совершенно не нужен, но десятый то зачем? Эксперименты с различными режимами SPI привели к получению передаваемого сигнала в реальные 8 бит без пропусков и, соответственно, к времени записи 1.3 секунды — 1 очко Stellaris.

Шестой этап. Вроде бы все хорошо, но совершенно неожидано возникает еще 1 проблема — при потоковой записи множества файлов первые 3 укладываются в требуемый интервал и даже с небольшим запасом, а вот четвертый файл показвает время записи намного большее — до 1.8-2.0 секунд и, соответственно, нарушает последовательность. Пробую очевидное решение, предположив что дело в переходах через страницы записи FLASH памяти, и исключаю эти места из обработки. Теперь начинают долго записываться те файлы, которые раньше записывались хорошо. Многочисленные эксперименты приводят к выводу, что поведение FLASH как то связано с ее особенностями внутренней организации. Я полагаю, что внутренний генератор высокого напряжения для записи ( его существование несомненно) не способен удержать требуемый уровень напряжения при длительных операциях и требует определенного времени на восстановление заряда. При этом общая средняя скорость выдерживается, но мне то нужна не средняя скорость, а мгновенная скорость записи каждого файла. Здесь могло бы выручить введение буфера данных для выравнивания нагрузки, но было найдено другое решение — приобретены SD карточки различных фирм и среди них нашлись те, которые давали постоянное время записи в 1.4 секунды без существенных разбросов. Конкретные названия фирм-производителей карточек называть не буду, чтобы не сочли статью рекламной — 1 очко SD.

Итог — задача решена, устройcтва отгружены потребителю и функционируют без сбоев, общий счет по количеству обнаруженных и исправленных проблем: SD карточки — 2, библиотека от TI — 3, особенности микроконтроллера -1. А из всего вышесказанного можно сделать следующий выводы:
1. С особым вниманием следует относится к имеющимся библиотекам стандартных программ с примерами применения. Они, как правило, функционируют и даже иногда без ошибок, но никоим образом НЕ оптимизированы по производительности. Так что смотрим исходные коды (благо они есть) и творчески модифицируем их. Более того, у меня сложилось мнение, что подобные свободно распространяемые бибилиотеки сознательно сделаны неоптимальными, чтобы стимулировать приобретение их платных аналогов.
2. С осторожностью относимся к спецификациям относительно производительности различных устройств, то есть внимательно читаем спецификации, в каких режимах и какие цифры достигнуты, а не просто смотрим 1-2 цифры параметров и решаем, что нас они устроят.
3. Внимательно читаем документацию на модули микроконтроллеров, пытаемся понять их внутреннее устройство, не забываем про осциллограф для изучения реальных процессов на реальной плате.

И в завершение статьи одно маленькое замечание — решил посмотреть, как обстоят дела в реализации аналогичных процедур в новом пакете поддержки микроконтроллеров типа TIVA-C (TivaWare_C_Series-2.0.1.11577). Ну что можно сказать — традиции не нарушены. Абсолютно все те же грабли лежат все в тех же местах, причем добавились еще одни — теперь функциии вызываются не непосредственно из FLASH памяти, а из так называемой ROM библиотеки с использованием двойного индексирования, что быстродействия не прибавляет. Как говорил Михаил Жванецкий «Или мы будет жить хорошо, или мои произведения всегда будут актуальны». Пока что верно второе.

Источник

Низкая скорость сд карты что это значит

  1. Всегда, перед отключением карты памяти от компьютера или другого девайса, выбирайте «Безопасное извлечение»!
  2. Бэкап карты памяти можно делать спец. утилитами, но проще использовать облачное хранилище, или просто копировать всю карту на ПК.
  3. Главнейший рецепт при наличии проблем с картой — форматирование в цифровом фотоаппарате, часто справляется лучше всех утилит. Или низкоуровневое форматирование, с помощью SDFormatter4 (v5.0) или HDD L.L.F.T.
  4. При временном «пропадании» карты памяти, подвисании и т.д рекомендуется продуть хорошенько слот для карты, прочистить все, можно даже спиртом(но очень аккуратно) — и контакты карты, и контакты SD слота.
  5. Если у вас не записываются новые данные на карту, а старые после удаления появляются вновь и форматирование не помогает — карта труп и восстановить ее не удастся, хоть она и читается!Закапывать?! Нее, не верю!
  6. Как вывести Карту памяти из режима «рид-онли» — Скорее всего это действие необратимо. Физически выжигается перемычка в контроллере, отвечающая за запись. По крайней мере в ssd, которые ковырял, это было так.

  • Определение реального размера накопителя. Рекомендуется всем! Всем!
  • Восстановление реального объема, или как восстановить фейковую карту
  • Программы для восстановления утраченных данных, и еще
  • Утилиты для работы с проблемными картами памяти
  • Утилиты для работы с картами памяти(Android)

Сообщение отредактировал ferhad.necef — 27.06.21, 12:19

В эту тему приходим когда есть трудности с картами памяти.

1.1. Бэкап карты памяти конечно можно делать специальными утилитами, типа Spb Backup , но проще просто копировать всю карту на ББ, вот и получится идеальный бэкап.
1.2. Первая и последняя инстанция для карт памяти — низкоуровневое форматирование. Главнейший рецепт при наличии проблем с картами памяти — форматирование в цифровом фотоаппарате, или на ББ(но это — однозначно худший вариант, поэтому, если проблема не решилась, нужно искать фотоаппарат) используя специальные утилиты, такие как ScanDisk, HDD SCAN и т.п. (Смотреть — здесь, также советуют — эту.) Но цифровой фотоаппарат часто справляется значительно лучше всех утилит. Перед форматированием не забываем сохранять нужную информацию.
Новую карту можно и не форматировать, почти не встречались случаи некорректной работы новых карт, а вот Б\У карты — форматировать обязательно.

1.3. Название для карты памяти лучше выбирать латинскими буквами, как переименовать карту памяти можно посмотреть — здесь.
1.4. При наличии проблем с картой памяти, для их решения, очень часто достаточно обычной проверки этой карты на ББ, на наличие компьютерных вирусов.
1.5. Как отключить шифрование карты памяти — здесь.
1.6. Как заставить карту памяти не отключаться при засыпании девайса читаем здесь, здесь и здесь.
1.7. Как заставить катру памяти не отключаться при низком заряде батареи? Поможет программа — KeepCard
1.8. При временном «пропадании» карты памяти, подвисании и т.д рекомендуется продуть хорошенько слот для карты, прочистить все, можно даже спиртом(но очень аккуратно) — и контакты карты, и контакты SD слота.
1.9. Для тестирования карт памяти рекомендуется использовать утилиту h2testw: (1), (2), (3) .

4. Стандартный способ проверить аппаратная проблема или программная (глючность софта или железа):

Сообщение отредактировал AndrewP_one — 22.02.18, 16:16

Источник

Увеличиваем скорость чтения sd-карты

Скорость чтения карты памяти варьируется в зависимости от ее класса. Но многих постигает разочарование, сравнивая скорость работы карты на компьютере и на устройстве с Андроидом. Один из весьма подкованных участников XDA форума brainmaster утверждает.

Скорость чтения карты памяти варьируется в зависимости от ее класса. Но многих постигает разочарование, сравнивая скорость работы карты на компьютере и на устройстве с Андроидом. Один из весьма подкованных участников XDA форума brainmaster утверждает, что будь у тебя SD карта 10-ого класса — всё равно вся соль в кеше.

Кеш для чтения карты памяти в Андроид по умолчанию установлен значением 128kb, а некоторые прошивки имеются даже 4kb!

Чтобы проверить это значение на своем устройстве вам нужно открыть файл to /sys/devices/virtual/bdi/179:0/read_ahead_kb. Это число можно изменять вручную, но таким образом оно будет действовать только до перезагрузки. Чтобы сделать значение постоянным, придется постоянно загружать скрипт при загрузке телефона через init.d. Товарищ с XDA подготовил CWM.zip архив для облегчения этой операции.

Чтобы выяснить оптимальное значение кеша для вашей SD карты и лучший метод для изменения значения нам предлагаю заглянуть в ветку форума .

От себя замечу, что архив подходит для прошивки через ClockworkMod Recovery и доступен для загрузки с форума XDA. Для тех, у кого не установлено модифицированное рекавери, в топике на форуме имеются альтернативные рецепты для изменения размера кеша вручную через консоль.

Для моего HTC Desire HD с картой памяти на 8GB Transcend class 6 оптимальным оказалось значение кеша 3072.

Собственно, на скриншоте видны результаты тестов карты памяти с этим значением кеша в SD Tools и SD Card Speed Test соотвественно. Можно заметить, что обе программы выдают немного странные и фантастические результаты. Но у меня скорость чтения с карты памяти точно увеличилась. Это видно невооруженным взглядом, к примеру, в галерее.

Но по множеству сообщений на форуме XDA было решено, что оптимальное значение для большинства карт все же 2048.

Кроме того на страницах droidnews был обзор платной утилиты Sd Card Speed Booster, которая позволяет телефонам с рут доступам менять это значение через приложение. Недавно в Маркете появилось аналогичная бесплатная программа — SD Increse .

Тогда можно поддержать её лайком в соцсетях. На новости сайта вы ведь уже подписались? 😉

Или закинуть денег на зарплату авторам.

Или хотя бы оставить довольный комментарий, чтобы мы знали, какие темы наиболее интересны читателям. Кроме того, нас это вдохновляет. Форма комментариев ниже.

Что с ней так? Своё негодование вы можете высказать на zelebb@gmail.com или в комментариях. Мы постараемся учесть ваше пожелание в будущем, чтобы улучшить качество материалов сайта. А сейчас проведём воспитательную работу с автором.

Если вам интересны новости мира ИТ также сильно, как нам, подписывайтесь на наш Telegram-канал. Там все материалы появляются максимально оперативно. Или, может быть, вам удобнее «Вконтакте» или Twitter? Мы есть также в Facebook.

Поговорить?

Уже наговорили:

zeleboba:
@ASD: нет-нет, как раз ничего не впариваем, а просто сделали перевод статьи с XDA, чуть дополнив его своими комментариями и наблюдениями, чтобы обсудить с остальными. Потому что тема интересна 🙂

А что подразумаеваете под «использовать в реале»? То, что галерее стала шустрее — это не подходит?

ASD:
Это будет работать на коротких повторяющихся операциях чтения/записи опять же пока это вмещается в кеш, и пока эти данные в кеше. Далее если были операции на запись, они должны быть выполнены реально и тормоза вернуться.
Так же с чтением.
Галерея стала шустрее только после того как было считывание в кеш, само считывание как было медленным так и осталось.
Не забывайте еще что кеш занимает память причем не выгружаемую, хотя это мелочи.

PS Хотите быструю галерею, используйте QuickPic, гораздо быстрее.

zeleboba:
@gren: @ASD: спасибо за комментарии. Теперь я лучше стал понимать принцип работы кеша в Android.

@Dreamer. : да, попробовал. Шустрее. Но все же останусь на стандартной галерее. Тем более, что вообще в галерею не часто лазить приходится 🙂

Источник

Оцените статью