Почему телефон не видит sd карту памяти или usb-флешку. Что делать? Xiaomi не видит карту памяти

Сейчас практически каждый девайс на операционной системе Android поддерживает карты памяти (microSD). Однако иногда случаются проблемы, связанные с ее обнаружением в устройстве. Причин возникновения такой неполадки может быть несколько, и для их решения требуется осуществить определенные манипуляции. Далее мы рассмотрим методы исправления такой ошибки.

Перед тем как вы перейдете к выполнению приведенных ниже инструкций, мы рекомендуем осуществить следующие действия:

  • Перезагрузите устройство. Возможно, возникшая проблема является единичным случаем, а при следующем запуске девайса просто исчезнет, и флешка будет работать корректно.
  • Подключите заново. Иногда съемный носитель информации не отображается, поскольку отошли или засорились контакты. Вытащите его и вставьте обратно, после чего проверьте корректность обнаружения.
  • Максимальный объем. Некоторые мобильные аппараты, особенно старые, поддерживают карты памяти только определенных объемов. Мы советуем ознакомиться с этой характеристикой на официальном сайте производителя или в инструкции, дабы убедиться в том, что SD-карта с таким количеством памяти нормально функционирует с вашим девайсом.
  • Проверьте на других устройствах. Вполне может быть, что флешка повреждена или сломана. Вставьте ее в другой смартфон или планшет, ноутбук или компьютер, чтобы убедиться в работоспособности. Если она не читается ни на одном оборудовании, следует ее заменить на новую.

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

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

Способ 1: Удаление кэш-данных

Ежедневно на устройстве накапливаются временные данные. Они не только занимают физическое пространство в памяти, но и могут вызывать различные сбои в работе девайса. В первую очередь мы рекомендуем стереть кэш через меню «Recovery» . В нем вам следует выбрать пункт «Wipe Cache Partition» , дождаться завершения процедуры и перезагрузить телефон.

Развернутые инструкции о том, как перейти в режим Recovery в операционной системе Андроид и как еще можно удалить кэш, вы найдете в следующих статьях.

Способ 2: Проверка ошибок карты памяти

В рамках данного способа выполните ряд простых действий:


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

Способ 3: Форматирование носителя

Для выполнения этого метода вам также потребуется подключить SD-карту к компьютеру или ноутбуку, используя переходники или специальные адаптеры.

Обратите внимание, что при выполнении данной процедуры со съемного носителя будет стерта вся информация, поэтому перед началом советуем сохранить важные данные в любом другом удобном месте.

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

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

Способ 4: Создание чистого тома

Иногда в связи с тем, что карта имеет скрытый раздел, ее памяти недостаточно для сохранения информации со смартфона. Помимо прочего, в таком случае возникают проблемы с обнаружением. Для их устранения вам нужно подключить карту к ПК и выполнить следующие действия:

  1. Через меню «Пуск» перейдите в «Панель управления» .
  2. Здесь выберите категорию «Администрирование» .
  3. Среди списка всех компонентов отыщите и нажмите дважды на «Управление компьютером» .
  4. В открывшемся окне вам следует выбрать «Управление дисками» .
  5. Здесь ознакомьтесь с номером диска, который является вашей флешкой, а также обратите внимание на полный объем памяти. Запишите или запомните эту информацию, поскольку она пригодится далее.
  6. Комбинацией клавиш Win + R запустите оснастку «Выполнить» . Введите в строке cmd и кликните на «ОК» .
  7. В открывшемся окне введите команду diskpart и нажмите Enter .
  8. Предоставьте разрешение для запуска утилиты.
  9. Теперь вы перешли к программе по работе с разделами диска. Она имеет идентичный «Командной строке» вид. Здесь вам нужно ввести list disk и снова нажать на Enter .
  10. Ознакомьтесь с перечнем дисков, отыщите там свою флешку, после чего введите select disk 1 , где 1 – номер диска необходимого носителя.
  11. Осталось только очистить все данные и разделы. Выполняется эта процедура с помощью команды clean .
  12. Дождитесь завершения процесса и можете закрывать окно.

Сейчас мы добились того, что SD-карта является полностью чистой: с нее была удалена вся информация, открытые и скрытые разделы. Для нормального функционирования в телефоне следует создать новый том. Делается это так:

  1. Повторите первые четыре шага из предыдущей инструкции, чтобы снова вернуться к меню управления дисками.
  2. Выберите необходимый съемный носитель, нажмите на отметке с его памятью правой кнопкой мыши и выберите пункт «Создать новый том» .
  3. Перед вами откроется Мастер создания простого тома. Для начала работы с ним кликните на «Далее» .
  4. Указывать размер тома не нужно, пусть он занимает все свободное пространство, так флешка будет лучше работать с мобильным устройством. Поэтому просто переходите к следующему шагу.
  5. Назначьте любую свободную букву для тома и нажмите «Далее» .
  6. Форматирование следует выполнить в том случае, если установленный по умолчанию формат не FAT32 . Тогда выберите эту файловую систему, размер кластера оставьте «По умолчанию» и двигайтесь дальше.
  7. По завершении процедуры перед вами отобразится информация о выбранных параметрах. Ознакомьтесь с ними и завершайте работу.
  8. Теперь в меню «Управление дисками» вы видите новый том, который занимает все логическое пространство на карте памяти. Значит, процесс был завершен успешно.

Осталось только извлечь флешку из ПК или лэптопа и вставить ее в мобильный девайс.

Начиная с версии андроил 6.0 появилась возможность использования флэш карты в качестве внутреннего хранилища данных устройства. Теперь девайс, после определенных действий, может пользоваться доступной на SD памятью так же свободно, как и внутренней. В статье будет рассказано о том, как подключить SD карту в таком качестве и какие ограничения при этом налагаются на нее.

Как подключить флешку, как внутреннюю память

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

Первым делом необходимо зайти в Настройки , а затем перейти в раздел «Хранилище и накопитель », где следует нажать по SD-карте.

Далее нужно выбрать «Настроить » и клацнуть «Внутренняя память ». Сразу после этого устройство предупредит пользователя, что вся информация будет удалена и ее станет невозможно прочитать на других устройствах без полного форматирования.

Здесь нужно выбрать пункт «Очистить и отформатировать » и дождаться завершения процесса очистки памяти. Затем может высветиться сообщение о том, что носитель работает медленно. Как правило, это обозначает, что используемая флешка не очень хорошего качества и её использование в качестве хранилища устройства может отразится и на производительности самого смартфона. Для хорошей и быстрой работы рекомендуется использовать накопители UHS Speed Class 3 (U3).

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

Особенности и ограничения использования SD-карты

Есть несколько особенностей, о которых следует знать, перед тем, как начинать использовать флэшку таким образом.

  1. После преобразования все данные, кроме некоторых приложений и обновлений для системы, будут помещаться на SD накопитель.
  2. При подключении к компьютеру, так же будет доступна для взаимодействия только эта часть памяти.

Фактически, все действия производятся лишь с флэшкой, настоящее внутреннее хранилище телефона не доступно для взаимодействия и, практически, никак не используется. Во-первых, это значит, что при извлечении накопителя пропадут практически все данные, фотографии и приложения. Во-вторых, если объем флешки меньше чем реальный объем хранилища смартфона, то таким образом, количество доступной памяти уменьшится, а не увеличится.

Форматируем карту с помощью ADB для использования в качестве внутреннего хранилища

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

Чтобы воспользоваться этим способом, потребуется совершить много действий. Нужно загрузить с сайта и произвести установку Android SDK , затем загрузить и установить с официального сайта драйвера для устройства , а так же, требуется включить «режим отладки по USB » на устройстве.

  • adb shell
  • sm list-disks (после выполнения будет выдан id в виде disk:ХХХ,ХХ его следует записать и ввести в следующей строке)
  • sm partition disk:ХХХ,ХХ private

Затем потребуется отключить телефон , перейти в настройки и нажать по sd, выбрать меню и кликнуть «Перенести данные ». Все, на этом действия закончены.

Как перевести карту памяти в стандартный режим

Чтобы вернуть флэшку в стандартный режим нужно просто зайти в ее настройки, как в первом варианте, и выбрать в меню «Портативный носитель ». Перед этим всю важную информацию следует перенести в другое место, потому что накопитель будет отформатирован в процессе.

Большинство современных смартфонов оснащены слотом для карты памяти. Хiaomi не является исключением. Наличие этой функции позволяет сохранить на устройстве важную информацию (музыка, фото, документы, заметки), расширить его возможности, функциональность, а также использовать мобильное устройство в качестве внешнего накопителя. Когда Хiaomi не видит карту памяти, владельцы сталкиваются с некоторыми трудностями, особенно если телефон был способом хранения данных для учебы или работы.

Что нужно сделать в первую очередь

Если вы решили сразу форматировать карту или нести гаджет в ремонт, не спешите это делать. Для начала вставьте SD в другое устройство (планшет или компьютер) и проверьте её работу. Эти простые действия помогут понять, проблема в телефоне или в съемном накопителе. Только после этого можно выбрать способ решения.

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

Какие могут быть причины поломки

Иногда нарушение может заключаться непосредственно в смартфоне. Чтобы вернуть функциональность флешки, скопируйте информацию на компьютер или другое устройство, выполните следующие действия (в зависимости от ситуации):

  1. Сбои программного обеспечения смартфона. Выньте и вставьте флешку обратно, перезагрузите гаджет. Работа системы восстановится.
  2. Хiaomi не поддерживают работу с SD от некоторых производителей или в связи со своими ограниченными возможностями не может работать с накопителями большой емкости. Изучите технические параметры гаджета, возможно, ему не под силу карты объемом памяти свыше 8 Гб, а вы предлагаете ему 32 Гб. Стоит отметить, что иногда правильная работа невозможна из-за типа файловой системы.
  3. Поломка контактов в слоте. Когда Хiaomi не видит накопительную sd карту по этой причине, выньте карточку и вставьте ее обратно. Если проблема повторилась неоднократно, стоит отнести гаджет в ремонт. Исправление поломки занимает несколько минут и стоит сравнительно недорого.

Как восстановить функциональность

При выходе sd карты из строя можно отметить следующие причины:

  1. Память флешки переполнена. Выньте ее с телефона и откройте на компьютере, удалив лишние файлы или сохранив их на компьютере. Освободив пространство на накопителе, вы восстановите функциональность устройства;
  2. Заражение вирусами или неверный формат файловой системы. Нужно провести форматирование на телефоне или компьютере. При таком способе решения задачи, данные на устройстве будут утрачены.

Чтобы провести форматирование с помощью смартфона следуйте следующему алгоритму:

  • зайдите в Меню и выберете раздел «Память»;
  • выберете функцию «Извлечь карту памяти» или «Очистить карту памяти» и ожидайте, пока начнется процесс;
  • после завершения форматирования, появится функция «Подключить карту SD».

В зависимости от модели Хiaomi название или порядок функций может измениться.

Чтобы провести форматирование с помощью компьютера, стоит придерживаться следующего алгоритма:

  • подключаем карту к компьютеру с помощью картридера;
  • на компьютере открываем раздел «Мой компьютер» (значок находится в меню Пуск или на рабочем столе), выбираем SD, которая обычно отображается как флешка (или съемный диск);
  • нажав правой кнопкой мыши на флешку, перед вами появится меню, где нужно выбрать функцию «Форматировать»;
  • нажимаем кнопку начать и ожидаем пока форматирование завершиться;
  • готово, карта памяти должна восстановить свою функциональность.

Смартфон может не видеть SD по разным причинам, и это не всегда является серьезной проблемой. Тем не менее если никакие способы вам не помогают, возможно, лучшим решением будет обратиться к квалифицированным специалистам по ремонту. Не стоит самостоятельно разбирать гаджет и пытаться отремонтировать его.

В некоторых случаях телефон не видит microSD, но не все пользователи знают, почему это происходит и как устранить проблему

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

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

Суть проблемы

Как же проявляется данная проблема? Как понять, что телефон действительно не видит устройство? Это достаточно просто и становится понятно сразу после установки карты памяти.

Устройство не отражает того, что оно было установлено. При этом, ни на панели на рабочем экране нет значка карты памяти, ни в разделе Память в Настройках не отображается съемный носитель.

Соответственно, во всех директориях телефона (например, Музыка, Галерея) отсутствуют соответствующие файлы, раньше .

Иногда после установки внешнего носителя в телефон, устройство сразу не выдает сообщения об его установке, как делает это обычно.

Иногда в процессе работы с microSD она может внезапно отключиться, и на экране появится сообщение вроде «Карта памяти отключена» .

В наиболее редких случаях устройство сообщает о повреждении карты памяти.

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

Возможные причины

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

  1. Непосредственное повреждение слота карты памяти;
  2. Другие аппаратные проблемы в устройстве;
  3. Проблемы с функционированием программного обеспечения, из-за которых устройство не видит .

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

  1. Выход устройства из строя (особенно, когда работающая ранее карта вдруг перестает распознаваться или устройство сообщает о ее неисправности, что характерно для старых карт памяти с большим износом);
  2. Физическое повреждение контактов на карте или другие неполадки;
  3. Несоответствие файловой системы (некоторые новые файловые системы «не видят» старые телефоны, тогда показывается, что накопитель отсутствует).

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

<Рис. 2 Слот>

Устранение

Существует несколько способов борьбы с такими неполадками. Они выбираются в зависимости от причины, которая вызвала неисправность.

Если же эта причина не ясна, то придется пробовать несколько способов.

Работа с «железом»

<Рис. 3 Контакты карты памяти>

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

Если же не будет, то неполадка вероятнее всего в телефоне.

Что же может сделать пользователь в таком случае? Рекомендуется почистить слот карты от пыли, а также протереть контакты на самом носителе. Сделать это можно ватной палочкой.

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

Recovery

<Рис. 4 Восстановление>

В каждом предусмотрен режим восстановления Рековери. Его запуск позволит «откатить» все сомнительные настройки до заводских показателей.

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

  1. Для начала проведите обычную перезагрузку устройства (не выключение и включение, а именно перезагрузку);
  2. Если это не помогло, переходите к восстановлению;
  3. Зажмите кнопку питания и уменьшения громкости одновременно и удерживайте до 10 секунд (чаще всего, доступ к функции восстановления открывается именно так);
  4. Как только устройство перезапустится, откроется особое стартовое меню, в Виндовс;
  5. Перейдите в нем на пункт Wipe cache partition (сделать это нужно кнопками или нажатием на экране в зависимости от устройства);
  6. Перезагрузите аппарат (перезагрузка может занять гораздо больше времени, чем обычно).

Теперь карта должна определяться. Если этого не происходит, то работать с ней придется на компьютере.

Форматирование

<Рис. 5 Форматирование>

Установите карту памяти в компьютер с помощью адаптера. Откройте ее через раздел «Мой компьютер» для того, чтобы убедиться в работоспособности устройства.

Если же компьютер не видит накопителя, то такая карта памяти неисправна.

  1. Зажмите Win + R и подождите, пока откроется окно Выполнить ;
  2. В нем пропишите команду diskmgmt.msc ;
  3. Теперь должно открыться окно, в котором отобразятся все устройства памяти – внешние, внутренние, отформатированные, не отформатированные;
  4. Если буква, обозначающая карту, совпадает с буквой, например, оптического привода или т. п., то необходимо переименовать карту;
  5. В редких случаях переименование может решить проблему;
  6. Если проблема таким образом не решилась, то нужно полностью отформатировать карту и создать по новой файловую систему (конечно, стоит помнить, что данные с носителя перед этим необходимо скопировать);
  7. Отформатировать устройство можно из Проводника ;
  8. Кликните по карте памяти правой кнопкой мыши;
  9. Откроется меню, в котором нужно выбрать строку Форматировать ;
  10. Откроется окно, в котором нужно убрать маркер из окошка рядом с надписью «Быстрое форматирование» ;
  11. Ниже укажите, что нужно создать файловую систему формата (чаще всего этот параметр выставлен по умолчанию);
  12. Нажмите ОК ;
  13. Дождитесь окончания процесса.

После этого установите карту памяти в телефон. Она должна успешно распознаваться. Если этого все равно не происходит, то возможно, что в ней все же есть специфическая аппаратная неисправность.

Восстановление работы

<Рис. 6 Восстановление через ПК>

Восстановление работы карты формата MicroSD – специфический случай, когда носитель, который успешно распознавался раньше, вдруг перестает определяться тем же устройством.

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

Также этот метод может помочь, когда телефон сообщает, что «Не получен доступ к карте памяти» , «Карта памяти повреждена и т. п.» .

Этот метод достаточно эффективен, но только для старых карт. И только при условии, что они исправно работали ранее. Для новых карт такой метод применять бессмысленно.

  1. Подключите карту памяти к ПК или ноутбуку для того чтобы убедиться в ее исправности;
  2. Откройте Проводник и кликните на карте правой кнопкой мыши;
  3. Выберите Свойства в выпавшем меню;
  4. Перейдите во вкладку Сервис ;
  5. Запустите Проверку диска , предварительно указав необходимость автоматического исправления обнаруженных ошибок и неисправностей;
  6. В этом же разделе можно провести Тест поверхности с автоматическим восстановлением поврежденных секторов (хотя это делать необязательно).

Более сложный вариант – это устранение неисправностей путем работы в ветке HKLM. Делается это следующим образом:

  1. Найдите в дереве папок каталог SYSTEM;
  2. В нем откройте раздел StorageDevicePolicies;
  3. В правой части окна появятся параметры, которые следует изменить;
  4. Присвойте нулевое значение определяющему параметру (пропишите в скобках цифру ноль в комбинации 0x00000000(1)).

Теперь карта должна нормально взаимодействовать с телефоном.

Файловая система

<Рис. 7 Файловая система>

Существуют карты памяти формата microSD HC и microSD XC. Второй вариант характерен для карт емкостью более 32 Гб.

У них иная файловая система, которая имеет свои преимущества (например, скорость записи и длительность отрезков записи), но распознается не всеми телефонами, планшетами и другими устройствами.

Таким образом, некоторые телефоны просто не предназначены для поддержки карт емкостью более 32 Гб. Изменить файловую систему в таком случае почти невозможно, не имея специальных навыков.

Однако стоит помнить, что тип (HC или XC) карты прописан прямо на ней самой, потому важно выбирать подходящий.

ЧТО ДЕЛАТЬ ЕСЛИ АНДРОИД (ТЕЛЕФОН) НЕ ВИДИТ КАРТУ ПАМЯТИ?

Телефон не видит флешку MicroSD: что делать, как исправить?


Мы выводили картинку на дисплей с sd карточки, но в ней были упущены некоторые моменты, первый - подключение самой карточки, второй - была рассмотрена лишь часть функций библиотеки Petit FatFs , давайте остановимся на этих моментах подробнее.

Общение с карточкой возможно по одному из двух интерфейсов, SPI или SD .



Надо сказать, что SD интерфейс может работать в однобитном и четырёхбитном режимах.

Схема подключения карточки по SPI стандартная и выглядит следующим образом, не используемые выводы карточки нужно с помощью резистора 10К подтянуть к питанию.


Но в любительских конструкциях зачастую пренебрегают подтягивающими резисторами, упрощая схему подключения.

Надо отметить, что при подключении по SPI карточка очень требовательна к напряжению питания и небольшая просадка питающего напряжения приводит к неработоспособности карточки, это проверено на личном опыте, по поводу SD интерфейса сказать нечего, ещё не пробовал. Это всё писал к тому, что по питанию обязательно ставить конденсаторы . Что касается дросселя, он должен быть рассчитан на ток до 100мА, но ставить его необязательно.

На схемах, изображённых выше видно, что для работы карточке необходимо 3.3 вольта, соответственно, в линиях передачи данных напряжение не должно выходить за диапазон 0 – 3.3 вольт и тут возникает вопрос, что делать если МК питается от 5 вольт?
Ответ прост, надо согласовать линии передачи данных, а сделать это можно с помощью обычного резистивного делителя.


На схеме видно, что линию MISO согласовывать не надо так, как по этой линии данные передаются от карточки к МК .
На самом деле, мало кто подключает карточку напрямую к МК, гораздо удобнее подключить к МК разъём для карточки или купить шилд с разъемом и всей необходимой обвязкой.

С подключением разобрались, давайте теперь рассмотрим как пользоваться библиотекой Petit FatFs , которая предназначена для 8-битных микроконтроллеров с малым размером памяти.

Библиотека состоит из 5 файлов:
integer.h - заголовочный файл в котором описаны основные типы данных.

diskio.h - заголовочный файл в котором объявлены прототипы низкоуровневых функций для работы с диском и статусные коды, которые они возвращают.

diskio.c - в этом файле должны быть реализованы низкоуровневые функции, изначально там "заглушки".

pffсonf.h - конфигурационный файл.

pff.h - заголовочный файл в котором объявлены прототипы функций взаимодействия с файловой системой диска.

pff.c - файл содержит реализации функций для взаимодействия с файловой системой диска.

Видно, что для того чтобы библиотека заработала необходимо реализовать низкоуровневые функции. Но если речь идет о AVR или PIC, для них сайте можно скачать пример работы с библиотекой, в котором есть файл mmc , в нем уже реализованы низкоуровневые функции. Также необходимо задать конфигурацию библиотеки в файле pff.h и написать функции необходимые для работы SPI.

Функции Petit FatFs.

FRESULT pf_mount (FATFS*) - функция монтирует/демонтирует диск. Эту функцию необходимо вызывать до начала работы с диском, если вызвать функцию с нулевым указателем диск демонтируется. Функция может быть вызвана в любой момент времени.

Параметры
FATFS* fs - указатель на объект типа FATFS, описание этой структуры можно посмотреть в файле pff.h. Нам надо всего лишь объявить переменную такого типа.

Возвращаемые значения:
FR_OK (0)
FR_NOT_READY - устройство не может быть инициализировано
FR_DISK_ERR - возникла ошибка во время чтения с диска
FR_NO_FILESYSTEM - на диске нет правильного раздела FAT

FATFS fs;//объявляем объект типа FATFS //монтируем диск if (pf_mount(&fs) == FR_OK) { //диск смонтирован, работаем с ним //демонтируем диск pf_mount(NULL); } else { //не удалось смонтировать диск }

FRESULT pf_open (const char* path) - функция открывает существующий файл. После того как файл открыт с ним можно работать, то есть читать из него и записывать в него. С открытым файлом можно работать до тех пор, пока не будет открыт другой файл. Функция может быть вызвана в любой момент времени.

Параметры
const char* path - указатель на строку, указывающую путь к файлу. Путь надо указывать полностью относительно корневой директории, разделяя директории слэшем.

Возвращаемые значения:
FR_OK (0) - возвращается в случае успешного выполнения функции
FR_NO_FILE - файл не найден
FR_DISK_ERR - ошибка диска
FR_NOT_ENABLED - диск не был смонтирован

FATFS fs;//объявляем объект типа FATFS //монтируем диск if (pf_mount(&fs) == FR_OK) { //открываем файл лежащий в корневой директории if(pf_open("hello.txt") == FR_OK) { //делаем что-то } //открываем файл лежащий в папке new if(pf_open("new/hello.txt") == FR_OK) { //делаем что-то } //демонтируем диск pf_mount(NULL); } else { //не удалось смонтировать диск }

FRESULT pf_read(void* buff, WORD btr, WORD* br) - функция читает указанное количество байт из файла и сохраняет их в буфер. Если количество прочитанных байт меньше чем указано, значит был достигнут конец файла.
#define _USE_READ 1

Параметры:
void* buff - указатель на буфер, в котором сохраняются прочитанные данные
WORD btr - количество байт, которые нужно прочитать
WORD* br - указатель на переменную, в которой хранится количество прочитанных байт.

Возвращаемые значения:
FR_OK (0) - возвращается в случае успешного выполнения функции
FR_DISK_ERR - ошибка диска
FR_NOT_OPENED - файл не был открыт
FR_NOT_ENABLED - диск не был смонтирован

FATFS fs;//объявляем объект типа FATFS BYTE buff;//буфер для чтения файла WORD br; //счетчик прочитанных байт //монтируем диск if (pf_mount(&fs) == FR_OK) { //открываем файл лежащий в корневой директории if(pf_open("hello.txt") == FR_OK) { //читаем из него 10 байт pf_read(buff, 10, &br); if(br != 10) { //если br не равно 10 //значит мы достигли конца файла } } }

FRESULT pf_write(const void* buff, WORD btw, WORD* bw) - функция позволяет записывать данные в открытый файл. Для того чтобы функция работала в файле pffconf.h надо записать
#define _USE_WRITE 1

Параметры:
void* buff - указатель на буфер, который хотим записать, нулевое значение финализирует запись
WORD btw - количество байт, которые хотим записать
WORD* bw - указатель на переменную, хранящий количество байт, которые удалось записать. Анализируя, эту переменную можно узнать был ли достигнут конец файла.

Возвращаемые значения:
FR_OK (0) - возвращается в случае успешного выполнения функции
FR_DISK_ERR - ошибка диска
FR_NOT_OPENED - файл не был открыт
FR_NOT_ENABLED - диск не был смонтирован

Из-за того, что библиотека рассчитана на микроконтроллеры с малым объемом памяти, эта функция имеет ряд ограничений:

  • нельзя создавать новые файлы, а записывать можно только в существующие
  • нельзя увеличивать размер файла
  • нельзя обновить временную метку
  • операцию записи можно начать/остановить только на границе сектора
  • файловый атрибут "только для чтения" не может запретить запись

Для того чтобы понять предпоследний пункт, надо знать, что память карточки разбита на блоки(сектора) по 512 байт и запись можно начать только с начала сектора . Таким образом если мы хотим записать 1000 байт, то первый сектор запишется полностью, а во второй запишется только 488 байт, а оставшиеся 24 байта заполнятся нулями.

Для записи в открытый файл надо выполнить следующие действия:

  • установить указатель на границу сектора, если установить не на границу, то указатель будет округлен до нижней границы сектора
  • вызвать функцию записи нужное количество раз
  • финализировать запись, вызвав функцию с нулевым указателем

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

FRESULT pf_lseek(DWORD offset) - устанавливает указатель чтения/записи в открытом файле. Устанавливать указатель можно абсолютным или относительным смещением, для абсолютного смещения необходимо передать в функцию число
pf_lseek(5000);
для относительного, передать значение указателя на текущую позицию fs.fptr и величину смещения
pf_lseek(fs.fptr + 3000);
Для того чтобы функция работала в файле pffconf.h надо записать
#define _USE_LSEEK 1

Параметры:
DWORD offset - количество байт, на которые нужно сместить указатель.

Возвращаемые значения:
FR_OK (0) - возвращается в случае успешного выполнения функции
FR_DISK_ERR - ошибка диска
FR_NOT_OPENED - файл не был открыт

Записать данные в файл можно следующим образом.
FATFS fs;//объявляем объект типа FATFS BYTE buff;//буфер для чтения файла WORD br; //счетчик прочитанных байт //монтируем диск if (pf_mount(&fs) == FR_OK) { //открываем файл лежащий в корневой директории if(pf_open("hello.txt") == FR_OK) { //устанавливаем указатель на первый сектор pf_lseek(0); //записываем pf_write(buff, 10, &br); //финализируем запись pf_write(0, 0, &br); } }

Также оставляю тут кусок реально работающего кода, в котором используются все выше описанные функции.
#define F_CPU 8000000UL #define buff_size 10 #include #include #include "diskio.h" #include "pff.h" #include "spi.h" FATFS fs;//объявляем объект типа FATFS BYTE read_buff;//буфер для чтения файла BYTE write_buff = "hello word";////буфер для записи в файл UINT br; //счетчик прочитанных байт int main(void) { //монтируем диск if (pf_mount(&fs) == FR_OK) { //открываем файл лежащий в папке new if(pf_open("new/hello.txt") == FR_OK) { //устанавливаем указатель записи pf_lseek(0); //записываем pf_write(write_buff, buff_size, &br); //финализируем запись pf_write(0, 0, &br); //устанавливаем указатель чтения pf_lseek(0); //читаем то, что записали pf_read(read_buff, buff_size, &br); if(br != buff_size) { //если br не равно buff_size //значит мы достигли конца файла } } //демонтируем диск pf_mount(NULL); } while(1) { } }

FRESULT pf_opendir(DIR* dp, const char * path) - функция открывает существующую директорию и создает указатель на объект типа DIR, который будет использоваться для получения списка файлов открытой директории.
Для того чтобы функция работала в файле pffconf.h надо записать
#define _USE_DIR 1

Параметры:
DIR *dp - указатель на переменную типа DIR.

const char * path - указатель на строку, которая содержит путь к директории, директории разделяются слэшем

Возвращаемые значения:
FR_OK (0) - возвращается в случае успешного выполнения функции
FR_NO_PATH - не удалось найти путь
FR_NOT_READY - не удалось инициализировать диск
FR_DISK_ERR - ошибка диска
FR_NOT_ENABLED - диск не был смонтирован

//объявляем переменные FATFS fs; DIR dir; //монтируем диск pf_mount(&fs); //открываем директорию pf_opendir(&dir, "MY_FOLDER");

FRESULT pf_readdir(DIR* dp, FILINFO* fno) - функцию позволяет прочитать содержимое директории. Для этого нужно открыть директорию с помощью функции pf_opendir() и вызывать pf_readdir(). Каждый раз при вызове функция будет возвращать название объекта(папки/файла) лежащего в указанной директории. Когда она пройдется по всем объектам, вернет нулевую строку в элементе массива fno.fname.
Для того чтобы функция работала в файле pffconf.h надо записать
#define _USE_DIR 1

Параметры:
DIR *dp - указатель на переменную типа DIR, которая должна быть предварительно объявлена

FILINFO *fno - указатель на переменную типа FILINFO, которая должна быть предварительно объявлена.

Возвращаемые значения:
FR_OK - успешное завершение функции
FR_DISK_ERR - ошибка диска
FR_NOT_OPENED - не открыта директория

FATFS fs; FRESULT res; FILINFO fno; DIR dir; //монтируем диск pf_mount(&fs); //открываем директорию res = pf_opendir(&dir, MY_FOLDER); //читаем содержимое директории for(;;){ res = pf_readdir(&dir, &fno); //проверяем не возникло ли ошибок при чтении // и есть ли еще файлы в указанной директории if ((res != FR_OK) || (fno.fname == 0)){ break; } //выводим удобным способом fno.fname usart_sendStr(fno.name); usart_sendStr(/r); }

Ну и напоследок оставлю тут рабочий проект