• Компьютер не видит карту памяти: SD, miniSD, microSD. Что делать? SD карта как внутренняя память Андроид

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

    Вариант 1: указание адреса установки

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

    Вариант 2: задание пути установки заранее

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

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

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

    Вариант 3: Использование сторонних программ

    Скорей всего именно этот способ вам поможет. Но он требует . Узнать есть или нет рут права на планшете можно по . Качаем специальные приложения, вроде FolderMount или GL to SD, которые помогут перенести данные игр и программ на SD карту памяти. Видео инструкции смотрите ниже:

    Вариант 3

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

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

    Если приложение установлено не на карту SD

    Откройте пункт «Приложения» в «Настройках». В списке приложений выберите то, которое хотели бы перенести на съемную карту. Нажмите на значок приложения, и откроется меню. Посмотрите, есть ли в нем опция «Перенести». Если есть, нажмите на кнопку опции и выберите карту памяти. Эта процедура не требует установки дополнительного программного обеспечения, вы можете сделать это сами.

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

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

    Если на вашем устройстве недостаточный объем внутренней памяти, можно использовать SD-карту как внутреннее хранилище для вашего телефона Android. Данная функция, называемая Adoptable Storage, позволяет ОС Андроид форматировать внешний носитель данных как постоянное внутреннее хранилище. Информация на установленной SD-card зашифрована и не может быть в дальнейшем использована на другом устройстве.

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

    Важно знать

    Есть один недостаток, СД-чип может отставать при записи видео высокого разрешения.

    Андроид по умолчанию во внутренней памяти и лишь изредка выгружает данные на SD-карту. Таким образом, вы лишены установки каких-либо дополнительных приложений, если на вашем телефоне ощутима нехватка объема внутреннего хранилища, например, в случае бюджетных устройств на Android One.

    Что такое накопительное хранилище?

    Накопительное хранилище – это основной объем памяти вашего смартфона, но при необходимости его можно расширить, использовав для этого СД-карточку. Данная на Андроид называется Adoptable Storage. Это позволит использовать съемную карту microSD, установленную на телефоне Android, в качестве основного хранилища. Таким образом, вы сможете легко решить проблему, как сделать SD-карту основной памятью на Андроиде и преодолеть нехватку в пространстве, если телефон имеет небольшой внутренний объем.

    Особенности использования карты как основного хранилища

    Есть ряд некоторых важных особенностей, которые следует учитывать при данной процедуре.

    Будет полезным

    При использовании накопителя, будь то SD-флешка или USB-накопитель, важно помнить, в каком формате находится данный девайс и поддерживает ли его операционная система Android, а основных файловых форматов существует четыре типа: FAT32 или exFAT, ext4 или f2fs.

    Как поменять память телефона на карту памяти андроида? Вопрос не совсем корректный, полностью выполнить замену невозможно, можно лишь как бы «нарастить» дополнительный объем.

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

    Как использовать SD-карту в качестве внутренней памяти на Android?

    Достаточно ли Вам внутреннего накопителя для хранения всех своих данных?

    Как заменить внутреннюю память телефона на внешнюю sd карту на android? Конфигурирование вашей SD-карты для работы в качестве внутреннего хранилища на Android – это, по сути, довольно простой процесс. Ничего сложного в этом нет и вы далее сами в этом убедитесь.

    Возможно, что функция Adoptable Storage не поддерживается вашим устройством, даже если смартфон работает под управлением Android 6.0 и выше (бывает и такое, все зависит от модели и марки смартфона). Возможно, производитель устройств отключил данную функцию. Однако существуют методы использования командной строки, которые позволяют принудительно использовать флеш-накопитель для хранения данных.

    Ниже перечислены основные шаги по форматированию.


    На следующем экране у вас есть последний шанс решить для себя, не хотите ли вы передумать

    Важно знать

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


    После завершения процесса форматирования вы можете использовать съемную СД-шку как «временное» или «съемное» постоянное место. Но имейте в виду, что теперь будут недоступны горячая замена и извлечение, как, возможно, вы делали ранее. Поэтому не извлекайте флешку, не используя параметр Eject. Кроме того, вы можете практически удалить принятое операционкой место, что, соответственно, не рекомендуется, так как это может вызвать определенные ошибки в работе устройства. Теперь вы знаете, как сделать карту памяти основной памятью на Андроиде.

    SD и microSD карты могут существенно расширить возможности проектов ардуино, работающих с большими объемами данных: регистраторов данных, метеостанций, систем умного дома. Платы arduino оснащены сравнительно небольшой внутренней памятью, всего до 4 килобайт, включая и флэш-память, и EEPROM. Этой памяти не хватит для записи больших объемов данных, тем более, если плата будет постоянно выключаться или выключаться. Подключение SD карты ардуино в качестве внешнего накопителя позволяет многократно увеличить место для хранения любой информации. Съемные накопители SD стоят дешево, легко подключаются и удобны в использовании. О правильном подключении SD карты к Arduino и пойдет речь в статье.

    Работа с памятью SD в ардуино не представляет особых трудностей. Самым простым способом является подключение готового модуля и использование стандартной библиотеки. С этого варианта мы и начнем.

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

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

    • Диапазон рабочих напряжений 4,5-5 В;
    • Поддержка SD карты до 2 Гб;
    • Ток 80 мА;
    • Файловая система FAT 16.

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


    Естественно, у недорогих модулей карт памяти есть и недостатки. Например, самые дешевые и распространенные модели поддерживают только карты до 4Гб и почти все модули позволяют хранить на SD карте файлы объемом до двух гигабайт – это ограничение используемой в большинстве моделей файловой системы FAT.

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

    Платы Arduino для работы с SD

    Для работы с SD card существует несколько различных плат:

    • Arduino Ethernet – эта плата оснащена специальным модулем для вывода данных. Для выхода CS используется контакт 4. Для правильной работы нужно применять команду SD.begin(4).
    • Adafruit Micro-SD – это отладочная плата, которая используется при работе с Micro-SD картами.
    • Sparkfun SD – закрепляется сверху Ардуино, для выхода CS использует 8 контакт. В новой версии платы есть соединение с 3.3 В и встроен шестиразрядный инвертор.

    Подключение SD и microSD к ардуино

    Существует два вида карт – microSD и SD. Они одинаковы по подключению, структуре и программе, различаются же только размером. Перед работой советуется отформатировать карту SD. Обычно новые карты уже отформатированы и готовы к работе, но если используется старая карта, то лучше провести форматирование в файловой системе Arduino. Для проведения процедуры на компьютере должна быть установлена библиотека SD, желательно FAT16. Для форматирования на Windows нужно щелкнуть на иконке карты и нажать “Format”.

    Для подключения карты используется 6 контактов, взаимодействие производится по интерфейсу SPI. Она выглядит на плате как разъем на лицевой поверхности с шестью штырями. Чтобы подключить карту, нужны сам контроллер, модуль карты и 6 проводов. Помимо SPI существует режим SDIO, но он сложен в реализации и слабо совместим с Ардуино. SPI легко налаживается для работы со всеми микроконтроллерами, поэтому советуется использовать именно его.

    Подключение цифровых выводов производится так: для платы Arduino Nano или Uno контакт MOSI подключается к D11, MISO к D12,SCK к D13, CS к 4, VCC на +5 В,.GND к GND. На плате имеются разъемы для подключения к 3,3 и 5 вольтам. Питание самой карты составляет 3,3 вольт, поэтому проще применять микроконтроллер с таким же питанием, в ином случае нужен преобразователей уровней напряжения. На самых распространенных платах ардуино такой выход есть.

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

    Библиотека ардуино для работы с SD и microSD

    Для удобства работы с внешними накопителями данных в среде Arduino IDE доступны уже готовые библиотеки. Ничего дополнительно скачивать или устанавливать в большинстве случаев не понадобится.

    Для подключения библиотеки в скетче нужно использовать инструкцию include:

    #include #include

    Библиотека SPI нужна для правильной работы устройств, подключаемых по SPI.

    Библиотечные функции нужно для считывания и записи данных на карту. Библиотека может поддерживать SD и SDHC карты.

    Имена записываются в формате 8.3, то есть 8 знаков для названия, 3 для расширения. Путь к файлу записывается с помощью слэшей «/».

    Встроенные примеры библиотеки SD

    В Arduino IDE встроены готовые примеры для быстрого изучение функций бибилотеки:

    • Card Info – это извлечение информации, хранящейся в SD карте. С ее помощью можно узнать, в какую файловую систему отформатирована карта, наличие свободного места, какие данные записаны.
    • Yun Datalogger – позволяет записывать лог-данные с трех сенсоров на карту.
    • Datalogger – регистрирует и созраняет данные, полученные с датчика на карту.
    • Dump File – считывание данные с карты, передает их в серийный порт.
    • Files – создает и удаляет данные. Существует функция file.write(), которая помещает записанные данные в буфер. Перемещение информации на карту происходит при вызове функций flush() или close(), поэтому важно закрывать его после каждого открытия файла, иначе данные будут потеряны.
    • Read Write – записывает и считывает файлы с карты.

    Функции библиотеки SD

    Ардуино-библиотека SD содержит различные функции, с помощью которыми можно управлять данными. Функции класса SD:

    • begin() – функция инициализирует библиотеку, присваивает контакт для сигнала.
    • exists() – призвана проверить, имеется ли на карте необходимая информация.
    • mkdir() – позволяет создать нужную папку на карте памяти.
    • rmdir() – с помощью этой функции можно удалить папку. Важно, чтобы удаляемая папка была пустой.
    • open() – позволяет открыть файл, который нужен для записи или чтения. Если нужный файл отсутствует на карте, то он будет создан.
    • remove() – удаляет любой файл.

    В ответ на все эти функции должно прийти одно из значений – true, в случае удачного завершения операции и false при неудаче.

    Создание, редактирование и удаление файлов.

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

    • available() – проверяет наличие в файле байт, которые доступны для чтения. В ответ приходит количество места, которое доступно для чтения.
    • close() – закрывает файл, перед эти проверяет, сохранены ли данные на карту.
    • flush() – функция позволяет убедиться, что данные записаны на карту.
    • name() – возвращает указатель на имя.
    • peek() – считывает байты данных, при этом не перемещает указатель на следующий символ.
    • position() – находит текущее положение указателя в файле.
    • print() – выводит данные в отдельный файл.
    • println() – печатает данные в файл до места, где появляется символ перевода каретки и пустая строка.
    • seek() – меняет положение текущей позиции в файле.
    • size() – выводит информацию о размере данных.
    • read() – считывает информацию.
    • write() – производит запись в файл.
    • isDirectory() – с помощью этого метода происходит проверка, является ли файл директорией, то есть каталогом или папкой.
    • openNextFile() – выводит имя последующего файла.
    • rewindDirectory() – возвращает к первому файлу в директории.

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

    Скетч примера работы с SD библиотекой ардуино

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

    /* Регистратор данных с использованием SD карт Пример сохранения данных с аналоговых портов на SD карте. Данные будут сохраняться в файле в виде набора строк с разделителем полей в виде символа "," Схема подключения: * Аналоговые сенсоры подключаются к аналоговым пинам * Модуль SD карты подключен в SPI по стандартной схеме: ** MOSI - пин 11 ** MISO - пин12 ** CLK - пин 13 ** CS - pin 4 */ #include #include const int PIN_CHIP_SELECT = 4; void setup() { Serial.begin(9600); Serial.print("Initializing SD card..."); // Этот пин обязательно должен быть определен как OUTPUT pinMode(10, OUTPUT); // Пытаемся проинициализировать модуль if (!SD.begin(PIN_CHIP_SELECT)) { Serial.println("Card failed, or not present"); // Если что-то пошло не так, завершаем работу: return; } Serial.println("card initialized."); } void loop() { // Строка с данными, которые мы поместим в файл: String logStringData = ""; // Считываем данные с портов и записываем в строку for (int i = 0; i < 5; i++) { int sensor = analogRead(i); logStringData += String(sensor); if (i < 4) { logStringData += ","; } } // Открываем файл, но помним, что одновременно можно работать только с одним файлом. // Если файла с таким именем не будет, ардуино создаст его. File dataFile = SD.open("datalog.csv", FILE_WRITE); // Если все хорошо, то записываем строку: if (dataFile) { dataFile.println(logStringData); dataFile.close(); // Публикуем в мониторе порта для отладки Serial.println(logStringData); } else { // Сообщаем об ошибке, если все плохо Serial.println("error opening datalog.csv"); } }

    Создание файла и выбор названия для arduino SD card

    Создание файла – одна из самых распространенных задач, возникающих при работе с SD картами в ардуино. Как мы убедились в предыдущем скетче, для создания файла достаточно просто открыт его. Если мы захотим проверить, есть ли такой файл, можно использовать функцию exists():

    • SD.exists(“datalog.csv”);

    Функция возвращает TRUE, если файл существует.

    Популярной практикой при создании проектов – регистраторов данных является разбивка больших файлов на более мелкие, которые удобнее обновлять и открывать на компьютере. Например, вместо одного очень большого файла datalog.csv на SD карте можно иметь несколько маленьких, добавляя к концу номер по порядку: datalog01.csv, datalog02.csv и т.д.
    Вот пример скетча, который поможет вам выполнить эту работу:

    Char filename = "datalog00.CSV"; // Первоначальное название for (uint8_t i = 0; i < 100; i++) { filename = i / 10 + "0"; filename = i % 10 + "0"; if (! SD.exists(filename)) { // Проверяем наличие logfile = SD.open(filename, FILE_WRITE); break; // Дальше продолжать смысла нет } }

    Заключение

    Как мы с вами убедились, подключить SD карту памяти к Ардуино и использовать ее в проекте не очень сложно. Для этого есть готовые библиотеки в Arduino IDE и самые разнообразные варианты модулей. Приобрести карту памяти можно в любом магазине электроники, они стоят недорого, при этом позволяют существенно расширить потенциал платы Ардуино. С использованием карт памяти можно собирать и сохранять для последующего анализа большие объемы данных. С помощью нашей статьи мы сможете наделить памятью свои исследовательские проекты, создать системы голосового оповещения для умного дома, создать простой wav-проигрыватель и многое другое.

    Мы выводили картинку на дисплей с 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); }

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