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

Медленная работа 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 одновременно производится и прием), который должен выбрать из приемного буфера эти ненужные принятые байты. И вот эта процедура опрашивает флаг «буфер приема не пуст», то есть ожидает окончания сериализации последнего байта буфера. То есть ждет, пока не будет полностью передан текущий байт и лишь потом готовит следующий для передачи.

Читайте также:  Checkbox is selected android

Исправляю обнаруженую ошибку (а как это еще назвать ?) и получаю время передачи файла 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 библиотеки с использованием двойного индексирования, что быстродействия не прибавляет. Как говорил Михаил Жванецкий «Или мы будет жить хорошо, или мои произведения всегда будут актуальны». Пока что верно второе.

Читайте также:  Системные папки андроид через компьютер

Источник

Увеличиваем скорость чтения 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. : да, попробовал. Шустрее. Но все же останусь на стандартной галерее. Тем более, что вообще в галерею не часто лазить приходится 🙂

Источник

Что делать, если Андроид не сохраняет приложения на карту памяти

от UpDron

Добрый день, наши уважаемые читатели и одновременно пользователи современных девайсов. Сегодня мы поговорим о проблеме, столь знакомой очень многим из нас.

Случается, вы устанавливаете новое приложение, но загрузка на включается, а всплывает окошко, мол, удалите старые приложения, чтобы освободить память на устройстве. Когда Андроид не сохраняет на карту памяти, как с этим быть?

Читайте также:  Чем удалить файлы с флешки которые не удаляются андроид

Опасность проблемы

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

Конечно, в наш век любой понимает, что элементарное здесь решение – подключение SD карты, ведь сегодня в телефонах хранятся не только контакты, но и масса всего полезного и развлекательного.

Так современные microSD могут добавить вам до 8 Гб памяти, microSDHC – до 32 Гб, microSDXC – оптимально предлагают 64 или 128 Гб, но самые дорогие из них способны вмещать и 2 Тб информации.

Для сравнения, скачиваемая на телефон музыка «весит» обычно 3-10 Мб, фотография в смартфоне занимает – 1-5 Мб, а фильм самого плохого качества от 700 Мб. Не говоря уже об играх для смартфонов. В общем, приобретая карту, вы, конечно, будете ориентироваться не только на возможности вашего девайса, но и на ваши запросы.

Вот только бывает, что карта, наконец, вставлена, проблема должна наладиться, но вот снова: вы скачиваете приложение из Play Market, а оно снова стремится в память смартфона.

Очистка кэша – эта только временная мера. Так почему Андроид не желает сохранять на карту? Вопрос принудительного перемещения файлов на внешнюю карту напрямую зависит от версии ОС.

Узнаем версию Android

Как узнать версию Андроид? Для этого нужно:

  1. заходим в «Настройки»;
  2. в списке пунктов найдите «О телефоне»;
  3. теперь нажмите «Информация о версиях», и тут увидите версию операционной системы.

Решение для версий Андроид 4.0 — 6.0

Последовательность решения этого вопроса различна для определённых ОС. Так сегодня большое число смартфонов среднего сегмента работает на Android из ряда 4-й версии, также на андроид 5.1 и 6.0.

Android 4.0, 4.1 и 4.2 позволяют настраивать сохранение фалов на SD карту, не располагая правами суперпользователя. Нужно просто попасть в «Настройки» войти в подменю «Память» и указать там в качестве ресурса для сохранения данных по умолчанию установленную карту памяти.

Впредь из Play Market новое приложение будет сохраняться именно там. Правда, старые приложения придётся перемещать вручную, а если не выйдет – устанавливать заново.

Для осуществления задачи зайдите в «Приложения», выберете нужное и указывайте каждый раз путь – «Перенести на SD». Но не все приложения, особенно из системных, «послушаются» вас, ведь для переноса данных на Андроид от 4.4 и выше вам потребуется заполучить Root-права.

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

Самые известные из них: Framaroot и Kingo Android Root. Но при полном доступе к вашим файлам, вы терпите некоторые издержки при получении Root-прав: вы лишаетесь прав на гарантийное обслуживание устройства, обновления не приходят сами собой по воздуху, по незнанию вы можете повредить работу системы, удалив случайно важные файлы.

Использование сторонних приложений

Заставить смартфон быстрее переносить приложения можно через AppMgr Pro III.

Скачайте приложение в Маркете Гугл, очищайте кэш приложений автоматически и производите иные манипуляции. Программа делит приложения по трём характеристикам: хранящиеся на «на карте SD», «на телефоне» и «перемещаемые». Последние можно транслировать на внешнюю карту. Можно даже кликнуть сразу «перенести всё» — быстро и удобно.

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

Телефон не видит карту памяти

Есть несколько причин, почему телефон не различает карту:

  1. Отошли контакты – первая причина. Просто вытащите и вновь вставьте карту SD.
  2. Секторы повреждены. Что делать в этом случае? Отформатировать карту памяти.
  3. Причина – блокировка в системе безопасности телефона. Снять её вам могут помочь в сервисе.
  4. В сервисном же центре вам подскажут, если что-то внутри телефона не ладится, и помогут починить данный элемент, возвращая аппарату отзывчивый «диалог» с картой памяти.
  5. Несовместимая карта. Вам только останется заменить карту, внимательно читая в инструкции о совместимости вашего устройства.

Когда девайс определит наличие карты, можете пробовать переносить на неё программы по указанным выше инструкциям. А разгруженная системная память будет служить вам бесперебойно, сохранять приложения, видео и фото на смартфон и не станет озадачивать вас неприятными извещениями при скачивании новых приложения из Магазина Гугл.

Надеюсь, мы оказали вам реальную помощь и рады в дальнейшем рассказывать о тонкостях работы современных устройств. Заходите также к нам вместе с друзьями в группу ВК, на Фейсбуке, на Твиттере, а также на [urlspan]канал на Ютубе[/urlspan].

Источник

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