В устройствах на микроконтроллерах для хранения больших объемов данных используется внешняя память. Если требуется хранить единицы мегабайт, то подойдут микросхемы последовательной флэш памяти. Однако для больших объемов (десятки -сотни мегабайт) обычно применяются какие-нибудь карты памяти. В настоящий момент наибольшее распространение получили SD и microSD карты, о них я и хотел бы поговорить в серии материалов. В этой статье речь пойдет о подключении SD карт к микроконтроллеру, а в следующих мы будет разбираться как читать или записывать на них данные.

Распиновка SD и microSD карт

SD карты могут работать в двух режимах - SD и SPI . Назначение выводов карт и схема подключения зависит от используемого режима. У 8-и разрядных микроконтроллеров AVR нет аппаратной поддержки SD режима, поэтому карты с ними обычно используются в режиме SPI. В 32-х разрядных микроконтроллерах на ядре ARM, например AT91SAM3, интерфейс для работы с картами в SD режиме есть, поэтому там можно использовать любой режим работы.

Назначение контактов SD карты в SD режиме


Назначение контактов SD карты в SPI режиме

Назначение контактов microSD карты в SD режиме



Назначение контактов microSD карты в SPI режиме



Подключение SD и microSD карт к микроконтроллеру в SPI режиме

Напряжение питания SD карт составляет 2.7 - 3.3 В. Если используемый микроконтроллер запитывается таким же напряжением, то SD можно подключить к микроконтроллеру напрямую. Расово верная схема, составленная путем изучения спецификаций на SD карты и схем различных отладочных плат, показана на рисунке ниже. По такой схеме подключены карты на отладочных платах фирм Olimex и Atmel .

На схеме обозначены именно выводы SD карты, а не разъема.


L1 - феррит или дроссель, рассчитанный на ток >100 мА. Некоторые его ставят, некоторые обходятся без него. А вот чем действительно не стоит пренебрегать, так это полярным конденсатором C2. Потому что при подключении карты происходит бросок тока, напряжение питания "просаживается" и может происходить сброс микроконтроллера.

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

Упрощенный вариант схемы (без подтягивающих резисторов) показан на рисунке ниже. Эта схема проверена на практике и используется в платах фирмы Microelectronika. Также она используется во многих любительских проектах, которые можно найти в сети.



Здесь сигнальные линии SD карты удерживаются в высоком состоянии микроконтроллером, а неиспользуемые линии (8, 9) никуда не подключены. По идее они должны быть подтянуты внутри SD карты. Далее я буду отталкиваться от этой схемы.

Если микроконтроллер запитывается напряжением отличным от напряжения питания SD карты, например 5 В, то нужно согласовать логические уровни . На схеме ниже показан пример согласования уровней карты и микроконтроллера с помощью делителей напряжения. Принцип согласования уровней простой - нужно из 5-и вольт получить 3.0 - 3.2 В.



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

Если использовать для согласования уровней буферную микросхему, например CD4050 или 74AHC125, этих недостатков можно избежать. Ниже приведена схема, в которой согласование уровней выполняется с помощью микросхемы 4050. Это микросхема представляет собой 6 неинвертирующих буферов. Неиспользуемые буферы микросхемы "заглушены".

Подключение microSD карт аналогичное, только у них немного отличается нумерация контактов. Приведу только одну схему.



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

Подключение SD и microSD карт к микроконтроллеру в SD режиме

Ну и для полноты картины приведу схему подключения SD карты в ее родном режиме. Он позволяет производить обмен данными на большей скорости, чем SPI режим. Однако аппаратный интерфейс для работы с картой в SD режиме есть не у всех микроконтроллеров. Например у Atmel`овских ARM микроконтроллеров SAM3/SAM4 он есть.



Шина данных DAT может использоваться в 1 битном или 4-х битном режимах.

Продолжение следует...

Здравствуйте.

Сегодня один из самых популярных типов носителей - это флешка. И кто бы что не говорил, а век дисков CD/DVD подходит к концу. Тем более, что цена одной флешки всего раза в 3-4 больше, чем цена DVD диска! Правда есть одно маленькое «но» - диск «сломать» намного сложнее, чем флешку…

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

Виды флеш карт. Поддерживается ли SD карта вашим кардридером?

Тут хотелось бы остановиться поподробнее. Многие пользователи часто путают одни виды карт памяти с другими. Дело в том, что SD флеш-карт существует три вида: microSD, miniSD, SD.

Зачем так сделали производители?

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

1. microSD

Размер: 11мм х 15мм.

Флеш-карты microSD очень популярны благодаря портативным устройствам: плеерам, телефонам, планшетам. Используя microSD, память перечисленных устройств можно очень быстро увеличить на порядок!

Обычно, при покупке, в комплекте к ним идет небольшой адаптер, для того, чтобы данную флешку можно было подключить вместо SD карты (о них ниже). Кстати, например, чтобы подключить данную флешку к ноутбуку, нужно: вставить micsroSD в адаптер, а затем адаптер вставить в разъем SD на передней/боковой панельки ноутбука.

2. miniSD

Размер: 21,5мм х 20мм.

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

3. SD

Размер: 32мм х 24мм.

Флеш-карты: sdhc и sdxc.

Данные карты используются в большей части в устройствах, где нужен большой объем памяти + высокая скорость. Например, видеокамера, видеорегистратор в машине, фотоаппарат и пр. устройства. SD карты подразделяются на несколько поколений:

  1. SD 1 – размером от 8 МБ до 2 ГБ;
  2. SD 1.1 – до 4 ГБ;
  3. SDHC – до 32 ГБ;
  4. SDXC – до 2 ТБ.

О чень важные моменты при работе с SD картами!

1) Помимо количества памяти, на SD картах указывают скорость (точнее класс). Например, на скриншотах выше класс карты «10» - это означает, что скорость обмена с такой картой составляет не менее 10 МБ/с (более подробно о классах: https://ru.wikipedia.org/wiki/Secure_Digital). Важно обращать внимание на то, какой класс скорости флеш карты требуется для вашего устройства!

2) microSD при помощи спец. переходников (на них пишут обычно adapter (см. скриншоты выше)) можно использовать вместо обычных SD карт. Правда, делать это всегда и везде - не рекомендуется (как раз из-за скорости обмена информацией).

3) Устройства для чтения SD карт имеют обратную совместимость: т.е. если вы берете устройство читающее SDHC, то оно прочтет SD карты 1 и 1.1 поколений, но не сможет прочесть SDXC. Именно поэтому важно обратить внимание на то, какие карты может прочесть ваше устройство.

Кстати, во многих «относительно старых» ноутбуках стоят встроенные кардридеры, которые не в состоянии прочесть новые виды флеш карт SDHC. Решение в этом случае довольно простое: купить кардридер подключаемый к обычному USB порту, он кстати больше напоминает обычную флешку. Цена вопроса: несколько сотен рублей.

Кардридер SDXC. Подключается к порту USB 3.0.

Одинаковая буква диска - причина невидимости флешек, жестких дисков, карт памяти!

Дело в том, что если у вашего жесткого диска буква диска F: (например) и у вашей вставленной флеш карты тоже F: - то флеш карта отображаться в проводнике не будет. Т.е. вы зайдете в «мой компьютер» - и флешку там не увидите!

Чтобы исправить это, нужно зайти в панель «управление дисками». Как это сделать?

В Windows 8: нажать сочетание Win+X, выбрать «управление дисками».

В Windows 7/8: нажать сочетание Win+R, ввести команду «diskmgmt.msc».

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

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

2. Отформатировать флеш карту (если она у вас новая, либо на ней нет нужных данных. Внимание , операция форматирования уничтожит все данные на флеш карте).

Изменение буквы диска. Windows 8.

Отсутствие драйверов - популярная причина из-за которой компьютер не видит SD карту!

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

Вообще, есть специальные программы, которые могут просканировать ваш компьютер (точнее все его устройства) и найти для каждого устройства самые новые драйвера. О таких утилитах я уже писал в предыдущих постах. Здесь дам только 2 ссылки:

  1. Программы для обновления драйверов: ;
  2. Поиск и обновление драйверов:

Подключение SD карты через USB с помощью какого-нибудь устройства

Если компьютер не видит SD карту сам, то почему нельзя попробовать вставить SD карту в какое-нибудь устройство (например, телефон, камеру, фотоаппарат и пр.) и уже его подключить к ПК? Признаться честно, я вообще редко вынимаю флеш карту из устройств, предпочитая копировать с них фото и видео, подключая их к ноутбуку через USB кабель.

Нужны ли специальные программы для подключения телефона к ПК?

Новые ОС, такие как Windows 7, 8 способны со многими устройствами работать без установки дополнительного софта. Установка драйверов и настройка устройства происходит в автоматическом режиме при первом подключении устройства к USB порту.

Для каждой марки телефона/фотоаппарата существуют рекомендуемые производителем утилиты (см. на сайте производителя)…

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

2. Проверить компьютер на вирусы (). Редко, но попадаются некоторые виды вирусов, которые блокируют доступ к дискам (в том числе и флешкам).

На этом сегодня все, всем удачи!

В некоторых случаях телефон не видит 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); }

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

SD-карты еще долгое время будут оставаться популярным форматом хранения данных. Стандарт очень тесно укрепился на рынке фото и видеотехники, а потому потребность в картридерах была, есть и далее будет. Время от времени пользователи сталкиваются с проблемой в работе SD-карт (или в картридерах) в компьютерах на Windows 10. Карточка вставляется в соответствующий порт, но компьютер не может ее распознать и SD-карта не отображается в Проводнике. Это весьма распространенная и довольно-таки неприятная проблема, которую, к счастью, весьма просто починить в подавляющем большинстве случаев. В этой статье вы найдете несколько советов, которые помогут вам, если компьютер не видит карту памяти.

Хотя в этой инструкции мы в основном говорим о SD-картах (те, что покрупнее), инструкция актуальна и для microSD-карт. Современные компьютеры (планшеты Surface, к примеру) в последнее время часто оснащаются слотами для microSD. Советы, описанные в статье, актуальны также для этих устройств.

Компьютер или ноутбук не видит карту памяти - что делать

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

Возьмите ватный диск, «ушную палочку» или кусочек ваты, легко смочите их в спирте или соответствующем средстве для чистки (теоретически подойдет обычная вода, но лучше всего с задачей справится либо специальное чистящее средство, либо простой спирт) затем легко пройдитесь по металлическим контактам на обратной стороне карты памяти. Важно: не стоит лить жидкость на карту (этим вы рискуете лишь убить ее) или вставлять ее мокрой в порт. Убедитесь, что контакты сухие и чистые, после чего снова попытайтесь подключить карту памяти к компьютеру.

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

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

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

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

Допустим, карта памяти работает, вы вставляете ее правильной стороной, слот в вашем компьютере чистый, но ПК все равно не видит SD-карту. В таком случае есть еще несколько советов, которые должны помочь.

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

Проверьте, включен ли слот для карты памяти в настройках BIOS вашего компьютера. Иногда бывает, что картридер на материнской плате ПК просто-напросто отключен по каким-то непонятным причинам. Проверить это можно простым погружением в настройки BIOS. Перезагрузите компьютер и во время запуска нажмите F2 / Delete (или другую кнопку, выбранную вашим производителем), чтобы попасть в BIOS. Каждый компьютер имеет свой собственный BIOS (UEFI), который отличается в зависимости от производителя или модели материнской платы, поэтому мы не можем здесь опубликовать все варианты. Вам надо найти раздел с портами и устройствами (Onboard Devices / Miscellaneous Devices и так далее), а затем искать что-то на подобии “Media Card Reader ”, “SD Reader ”, “Enable ExpressCard ” и так далее. Убедитесь, что он включен, после чего сохраните настройки, перезагрузите компьютер и заново попробуйте подключить карту памяти.

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

В случае с настольными компьютерами возможен также сценарий, когда слот для SD-карт на передней панели корпуса не подключен к материнской плате компьютера. Здесь вам уже придется вскрыть свой корпус (перед этим полностью отключите питание компьютера от розетки) и посмотреть, подключен ли провод от передней панели корпуса к материнской плате. Провод с коннектором на 9 пин должен быть подключен в соответствующую гребенку на материнской плате.

Иногда источником проблемы может быть переходник, который не работает как положено. Это в случае, если вы используете SD-адаптер для microSD-карточек или карты другого формата в паре с переходником. Конечно, лишний адаптер не всегда есть под рукой, но этот вариант также стоит учитывать, если вы никак не можете заставить ваш компьютер работать с картой памяти. Благо, адаптеры стоят сущие копейки и найти их не составит большого труда.

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


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


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


Стоит понимать, что ни один из этих методов не поможет, если слот вашего компьютера поврежден или сломан. Если карта памяти работает в других устройствах, но никак не определяется в вашем компьютере даже после всех этих танцев с бубном, значит вам надо обратиться к специалисту, который проверит, физическую исправность порта, отремонтирует или заменит его. Чтобы извлечь из карты информацию, вставьте ее в другое устройство (ту же камеру), а затем подключите ее по USB-кабелю к своему компьютеру, либо перенесите нужные вам данные с другого ПК.

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