Давно думал написать статью на Хабр, но все как-то не решался. Хотя и кажется, что есть мысли, которые были бы небезинтересны сообществу, но останавливает предположение, что это «кажется» проистекает от завышенной самооценки. Тем не менее попробую. Поскольку я профессионально занимаюсь электроникой, в частности, программированием микроконтроллеров, довольно-таки длительное время (как я подозреваю, дольше, чем живет большАя а может даже и бОльшая часть читателей Хабра), то за это время накопилось изрядное количество интересных случаев. Представляю на суд сообщества рассказ об одном из них.
Итак, в одной разработке мне потребовалось сохранять значительные объемы информации с целью последующей передачи через сеть в обрабатывающий центр. Поскольку полученное устройство предполагало серийное производство, был выбран вариант с применением относительно недорогих компонентов, и, в частности, микроконтроллера как центрального элемента системы.
Поскольку в тот момент (середина 2012 года) предложение микроконтроллеров с Ethernet PHY на борту не отличалось разнообразием (да и сейчас положение не намного лучше), был выбран МК фирмы TI семейства Stellaris, конкретно LM3S8962, тем более что отладочная плата для него у меня уже имелась. МК на тот момент относительно новый, активно продвигаемый фирмой TI (это в конце 2013 года она ВНЕЗАПНО перевела всю серию в разряд NRND), и обладающий вполне достаточными для решения данной задачи параметрами. Для хранения информациии был выбран вариант с SD карточкой, в первую очередь из за их доступности и дешевизны, а также потому, что на отладочной плате наличествовало контактное устройство для них, а на поставляемом с платой отладки CD имелись многочисленные примеры, в том числе и для SD карт. Интерфейс к карточке был реализован простейший — SPI, предложенные примеры сходу заработали, принятое решение позволяло обрабатывать полученные данные до написания интерфейса при помощи элементарного переноса карточки из устройства в кард-ридер ПК, так что первоначальная отладка алгоритмов взаимодействия с объектом управления проблем не вызвало, по крайней мере в этой части проекта. Как все понимают, проблемы возникли несколько позже…
Низкая скорость работы SD-карты
Когда алторитмы были отлажены и устройство в целом заработало, начались тестовые прогоны. И тут выясняется, что SD карточка не способна записывать информацию в том темпе, в котором объект управления ее поставляет, причем разница скоростей составляет разы, а с учетом размеров единицы хранения (2.7 мегабайта) создать промежуточный буфер по приемлемой цене не удасться. Переходя к конкретным цифрам, требовалось файл размером 2.7 мегабайта записывать на SD карточку не более, чем за 1.6 секунды, а реально данные записывались 30 секунд, причем карточки были приобретены класса 10, то есть утверждали скорость записи 10 мбайт/сек. Борьба за скорость шла в несколько этапов и противниками оказывались то микроконтроллер, то стандартная библиотека (фирменная от TI между прочим), то, собственно, SD карточки.
Восстановление карты памяти MicroSD в несколько кликов
Первый этап — исследую тайминги записи и сразу же выясняю, что запись различных участков информации идет разное время, причем время записи одинаковых блоков информации существенно (в разы) отличается. Путем экспериментов с различными размерами блоков записи устанавливаю простую закономерность — чем больше блоки информации для записи, тем меньше время записи, отнесенное к ее размеру. Псокольку модули библиотеки поддерживают FAT и записывают информацию посекторно, а переделывать их смысла не вижу, переформатирую карточку на размер сектора 32 кбайт и получаю время записи 14 секунд — 1 очко SD.
Второй этап — проверяю работы SPI интерфейса и обнаруживаю, что он работает на частоте 12.5 мгц, хотя описание позволяет установить частоту передачи до 25 мгц (половина от тактовой частоты процессора 50 мгц). Выясняется, что подпрограмма установки частоты SPI модуля из библиотеки ограничивает максимально возможную частоту значением 12.5 мгц, причем в документации на интерфейсный модуль микроконтроллера подобное ограничение отсутствует.
i = ROM_SysCtlClockGet() / 2; if(i > 12500000)
Изменяем код и получаем уменьшение времени записи в 2 раза до 7 секунд — 1 очко TI.
Третий этап — исследую модули обмена с SD карточкой и обнаруживаю весьма непроизводительное расходование времени в низкоуровневых процедурах, а именно: модуль SPI в микроконтроллере имеет в своем составе FIFO буфер на 8 байт, что позволяет ускорить работу с ним. Модуль вывода до передачи очередного байте проверяет флаг «буфер передачи не полон» для ожидания возможности переслать следующий байт, и вроде бы все нормально. Но вслед за передачей байта вызывается модуль приема байта (дело в том, что при передаче в интерфейсе SPI одновременно производится и прием), который должен выбрать из приемного буфера эти ненужные принятые байты. И вот эта процедура опрашивает флаг «буфер приема не пуст», то есть ожидает окончания сериализации последнего байта буфера. То есть ждет, пока не будет полностью передан текущий байт и лишь потом готовит следующий для передачи.
void xmit_spi(BYTE dat) < uint32_t ui32RcvDat; SSIDataPut(SDC_SSI_BASE, dat); /* Write */ SSIDataGet(SDC_SSI_BASE, /* flush data */ >
Исправляю обнаруженую ошибку (а как это еще назвать ?) и получаю время передачи файла 3 секунды — 1 очко TI.
И вот что получилось в результате оптимизации, не учитывающей особенности задачи.
static void xmit_spi_my (BYTE const *dst, int length) < int i, *p, *d; d=(int*)(SDC_SSI_BASE+SSI_O_DR); p=(int*)(SDC_SSI_BASE+SSI_O_SR); do < while (!(*p >*d=*dst++; > while (—length); while (*p >
Четвертый этап — исследую модули более высокого уровня и выясняю что, поскольку передача данных в интерфейс предусмотрена только из памяти, мне приходится проводить двойную работу — сначала читать поток данных из объекта управления и пересылать в оперативную память микроконтроллера (а это, между прочим, 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 библиотеки с использованием двойного индексирования, что быстродействия не прибавляет. Как говорил Михаил Жванецкий «Или мы будет жить хорошо, или мои произведения всегда будут актуальны». Пока что верно второе.
Источник: habr.com
Как установить карту памяти на Honor 6C Pro
Одним из главных достоинств смартфона Honor 6C Pro является поддержка карт памяти формата MicroSD. Данная возможность позволяет расширить внутреннее хранилище при помощи внешнего накопителя. Установить SD-карту на Honor 6C Pro довольно просто, но у некоторых пользователей все равно возникают сложности. Кроме того, важно не только поставить карточку, но и выполнить ее настройку.
Установка карты памяти
Из-за того, что карточка MicroSD характеризуется очень маленьким размером, а телефон Honor 6C Pro внешне не выдает наличия разъема, бывает трудно отыскать место установки накопителя. Поэтому рекомендуется действовать по инструкции:
- Осмотрите корпус устройства и найдите лоток. Как правило, его можно идентифицировать по небольшому отверстию, расположенному поблизости (только не перепутайте его с микрофоном). Также лоток немного выделяется своими гранями.
- В комплекте с Honor 6C Pro идет специальная скрепка для извлечения лотка. Посмотрите, не завалялась ли она в коробке от смартфона. Если ее нет, можно воспользоваться иголкой соответствующего диаметра. Вставьте скрепку в отверстие до характерного щелчка.
- Одновременно с щелчком произойдет выдвижение слота. Автоматически он выдвигается только на 10-20%. Далее его нужно потянуть, чтобы полностью извлечь.
- Осмотрите лоток. Он должен иметь специальную площадку для установки MicroSD-карты. Как правило, она чуть больше площадки для SIM.
- Положите на него карту памяти чипом вниз в соответствии с конструктивными особенностями лотка.
- Вставьте лоток до щелчка.
После выполнения указанных шагов на экране Honor 6C Pro должно появиться уведомление об установке внешнего накопителя. Не торопитесь начинать им пользоваться, так как необходимо также провести подготовительные действия.
Необходимые действия перед использованием
Несмотря на то, что после установки карта памяти уже готова к использованию, перед началом эксплуатации ее рекомендуется отформатировать. Операция выполняется по следующей инструкции:
- Откройте настройки Андроид.
- Перейдите в раздел «Хранилище».
- Выберите используемую SD-карту.
- Нажмите на кнопку «Форматировать» и подтвердите действие.
Обратите внимание, что в ходе форматирования с карты стираются все данные. Поэтому не заполняйте внешний накопитель перед началом эксплуатации.
Решение возможных проблем
Хотя в том, чтобы установить карту памяти на Honor 6C Pro, нет ничего сложного, в ходе ее эксплуатации могут возникнуть разные проблемы. Главная из них – телефон не видит SD-карту. У произошедшего может быть две причины:
- вы установили карту памяти большего объема, чем поддерживает смартфон;
- накопитель неисправен.
В обоих случаях шансов на исправление ситуации практически нет. Но некоторые действия предпринять все-таки стоит. Во-первых, посетите сайт производителя, чтобы уточнить, карты памяти какого объема поддерживает Honor 6C Pro. Если она превышает лимит, то смартфон не сможет ее распознать.
Если объем соответствует критериям, то попробуйте подключить внешний накопитель к ПК и произведите форматирование через «Этот компьютер».
Аналогичным образом следует действовать в том случае, если Honor 6C Pro сначала видит накопитель, но через некоторое время перестает его распознавать. К сожалению, проблема решается только форматированием, из-за которого стираются все данные.
Поделитесь страницей с друзьями:
Источник: proshivku.ru
Самая простая вещь, которая ускорит ваш старый смартфон и продлит ему жизнь
Расскажем, как творить чудеса с помощью карты памяти. Вы тоже так сможете!
Выбирая новый смартфон, все обращают внимание на количество камер, мощность процессора, разрешение дисплея. Но есть одна вещь, которой многие пренебрегают и очень-очень зря.
Она не пригодится вам, если вы покупаете флагманские смартфоны и меняете их каждый год. Но если вы практичны и не готовы тратить много денег, она вам точно пригодится.
О чем это мы? О карте памяти.
Многие производители не оснащают смартфоны слотами для карт памяти MicroSD, а крупные корпорации Apple и Google не делают этого принципиально, утверждая, что современным смартфонам не нужны карты памяти.
Давайте разберемся, почему они ошибаются (или лукавят), и почему смартфонам необходимы карты памяти. Никаких абстрактных разговоров о «гигабайтах любимой музыки и фильмов в вашем кармане», только реальные преимущества и лайфхаки, которые способны продлить жизнь вашему смартфону и ускорить его не хуже дорогих моделей!
Как с помощью карты памяти ускоряется работа приложений
За пределами мира розовых единорогов, в котором существует компания Google, производители смартфонов часто экономят на встроенной памяти. Не только в количестве, но и качестве — скорость передачи данных в обе стороны часто оказывается низкой. Либо замедляется со временем, как было, кстати, с некоторыми смартфонами Google Nexus.
Если смартфон лагает даже в системных приложениях, фотографии в «Галерее» еле грузятся, игры тормозят, ставьте в него карту памяти побольше да побыстрее. В идеале, соответствующую стандарту Class 10 UHS-I или даже UHS-III. Решительно сгружайте на карточку все, что только можно: приложения, фото, видео, игры.
Даже простенькая Kingston Select работает быстрее бюджетного смартфона «из коробки», а уж Kingston React может потягаться по скорости на равных даже с флеш-накопителем дорогого устройства. При этом обойдется она, максимум, в 3000 рублей. Попробуйте-ка купить за эти деньги новый смартфон.
Что произойдет, когда вы перенесете файлы на карту памяти?
Перекинув файлы приложений на быструю карту памяти с тормозной внутренней памяти, вы увидите маленькое чудо: тормозившие программы внезапно ускоряются и больше не раздражают беспричинными «залипаниями».
Как начинает работать быстрее смартфон с небольшим объемом памяти
Часто производители экономят еще и на объеме памяти, особенно это часто происходит с недорогими смартфонами. В результате, купив хороший смартфон, но с объемом памяти 32 Гбайт или меньше, вы очень быстро сталкиваетесь с забитой памятью. А сам смартфон начинает тормозить. Потому что без достаточного количества свободных кластеров памяти контроллер внутреннего флеш-накопителя сталкивается с невозможностью штатной работы уборщика данных и неспособностью быстро записывать новые данные.
В таких случаях карта памяти становится суровой необходимостью для приложений и их громоздкого кэша. Не экономьте на ней и покупайте ее вместе со смартфоном, чтобы сразу же организовать на ней основное хранилище.
Как решить проблему с нехваткой оперативной памяти
Еще одна любимая статья экономии для производителей — оперативная память смартфона. Нередко даже в хороших смартфонах ценой 10-15 тысяч рублей стоит 3 Гбайт оперативки, что уж тут говорить о бюджетных телефонах менее 10 000.
Если оперативной памяти смартфону уже не хватает, делу можно помочь созданием SWAP-файла. Это не так просто, как перенести на карту памяти файлы, но вы точно справитесь.
Для начала смартфон должен получить Root-права***. Это даст вам полный контроль над вашим Android-фоном. К сожалению, универсального способа, как получить Root-права на смартфон нет, все сильно зависит от производителя и модели смартфона. К счастью, в сети легко нагуглить инструкцию получения Root-прав на любой смартфон, кроме разве что самых экзотических.
После получения нужно постановить из Google Play одну из многочисленных утилит и создать необходимый файл подкачки на карте памяти. Само собой, чем качественней будет карта памяти, тем быстрее будет работать виртуальная «оперативка».
Карта памяти как последний рубеж обороны смартфона
Предположим, вы уронили смартфон или утопили. Ремонт стоит больших денег, гораздо проще, чем купить новый смартфон. Но что будет с важной информацией, которую вы на нем хранили, не доверяя ее облачным хранилищам или ленясь делать бекап?
Если данные хранились на встроенной памяти, все очень плохо. Она хрупкая и не защищена от замыкания, поэтому в случае гибели смартфона данные потеряются. А вот карта памяти, особенно с высоким стандартом защищенности от внешних воздействий, как Kingston Canvas Go! прекрасно справится с ролью «черного ящика». Даже если смартфону конец, ее можно извлечь, вставить в другой аппарат, и порядок.
В пару к этому методу все же советуем вам освоить продвинутые программы резервного копирования вроде Titanium Backup, и хранить на «бессмертной» microSD резервную копию всей информации. Запас, как говорится, карман не тянет.