8-900-374-94-44
[email protected]
Slide Image
Меню

Sd mmc карта – Работа с SD/MMC картой.

Работа с SD/MMC картой.

   В данной статье рассмотрим один из способов  применение в своих устройствах SD (Secure Digital Memory Card) далее SDC и MMC карт (Multi Media Card),  которые на сегодняшний день являются самыми популярными картами памяти для различных устройств как в промышленности, так и в быту.

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

 С SD/MMC картой можно работать обращаясь к данным непосредственно по адресу сектора без применения файловой системы, что в некоторых случаях упрощает разработку устройства. Именно этот способ мы и рассмотрим далее...

                                                Подключение к микроконтроллеру.

    В качестве примера возьмем карту SD/MMC максимальной емкостью до 2 ГБ,  у меня под рукой оказалась  microSD ( отличается от старшего брата  в основном только меньшими размерами ) на нее и будем ориентироваться.   Карты    могут работать в двух режимах обмена данными - это MMC протокол и SPI. Нас интересует   SPI,  он  наиболее предпочтительный для нашей задачи.  Протокол SPI  позволяет вести обмен данными на высокой скорости и задействовав при этом минимальное количество  выводов микроконтроллера. Кроме этого практически все микроконтроллеры имеют на своем борту аппаратный модуль SPI и задача сопряжения устройства с картой  легко реализуется.

Подключение к МК SD, microSD карт.

Подключение к МK MMC карты.

   .

  Работоспособность карты сохраняется при питании  от 2 до 3,6 вольт, соответственно удобно применить микроконтроллер (далее МК)  с таким же питанием или  по крайней мере в этом диапазоне, к примеру 3,3 вольта (PIC18F25k20). Если МК применен с 5 вольтовым питанием необходимо согласовать уровни  сигналов.

  Все MMC/SDC имеет в своем составе встроенный микроконтроллер управляющий   flash-памятью (чтения, записи и др.)  при помощи специальных команд. Ниже в таблице показан набор основных команд при работе с картой. Желтым цветом выделены команды при работе с SDC картами.

Набор основных команд.

  Кадр команды имеет фиксированную длину 6 байт. Байты передаются последовательно, начиная с  номера индекса команды CMD(0-64), потом  4 байт аргумента  и 1 байта контрольной суммы (CRC).

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

 Более подробно по командам можно прочитать в спецификации от MMCA и SDCA.

Рис.№1 

   Как видно из рисунка после передачи кадра команды необходимо продолжать чтение байтов (Ncr) от microSD  до получения ответа (R1), при этом уровень CS должен быть активным "0".

   В зависимости от индекса команды ответ может быть не только R1 (см. набор основных команд ) на CMD58 ответ R3 (R1 и завершающее 32-битное значение OCR), а некоторым командам нужно больше времени NCR и они ответ будет R1b. Это ответ R1, за которым идет флаг занятости (сигнал на линии "DO" удерживается картой в низком уровне, пока продолжается внутренний процесс). Контроллер хоста должен ждать окончания процесса, пока "DO" не перейдет в состояние высокого уровня (т.е. дождаться  0xFF). А так же R2 при запросе состояния регистра STATUS.

Ответ R1 содержит 1 байт, его структуру можно посмотреть в таблице ниже.  Ответ R2 состоит из двух байт, первый байт R1 и второй R2 (см. таблицу  структуры R2). А ответ R3 соответственно из 5 байт.

    Ответ R1 при значении  0х00  означает успешное завершение команды, иначе будет установлен соответствующий флаг.

Структура ответа R1.

Структура  ответа R2.

Инициализации  в  режиме SPI.

   После сброса и подачи питания карта по умалчиванию устанавливается в режим работы по протоколу MMC (Serial Peripheral Interface), для перевода в режим SPI необходимо сделать следующее:

  1. После достижения питания  2.2 В, подождать не менее миллисекунды,  установить на линиях DI и CS высокий уровень и выдать около  80 импульсов на вывод  CLK. После такой процедуры   карта будет готова  принять родную команду.
  2. Послать команду CMD0 (программный сброс). Карта должна ответить (R1) с установленным битом ожидания (0x01).
  3. Послать команду CMD1 (для начала инициализации карты). Ждать ответа 0х00 для подтверждения завершения процесса инициализации.

   Напомню, что команда CMD0 должна содержать корректное  поле CRC.  Рассчитывать нет смысла, так как  аргументов в этой команде нет, по этому оно постоянно и имеет значение 0х95. Когда карта войдет в режим SPI, функция CRC будет отключена  и  не будет проверяться. Опция CRC может быть снова включена командой CMD59.

  В результате команда CMD0 будет выглядеть так: 0х40,0х00,0х00,0х00,0х00,0х95.

  • индекс команды - 0х40.
  • аргумент- 0х00,0х00,0х00,0х00.
  • CRC-0х95.

  Что касается 80 импульсов, то их можно сформировать передавая  по SPI  значение 0хFF 10 раз подряд  при установленных высоких уровнях на линиях DI и CS.

  После простоя  более 5 мс карта памяти  переходит в энергосберегающий режим, и способна принимать только команды CMD0, CMD1 и CMD58.   По этому процесс инициализации  (CMD1) необходимо практически каждый раз повторять при чтении/записи блока данных или делать проверку состояния карты.

   Для SDC-карт  в случае отклонения команды CMD1  рекомендуется использовать команду ACMD41.

  Сам процесс инициализации может занять относительно длительное время (в зависимости от объема карты) и может достигать  сотен миллисекунд.

Чтение и запись блока данных.

   По умолчанию в режиме SPI   обмен между микроконтроллером и картой ведется блоками по 512 байт, по этому для записи даже одного байта придется сначала прочитать весь блок и изменив байт перезаписать обратно. Размер блока может быть изменен в регистре CSD карты памяти.

   Воизбежания   ошибки адресации  при выполнении команд чтения/записи необходимо что бы адрес указывался  четко  начала сектора. Для этого можно сбрасывать бит "0"  3 байта адреса сектора, т.е. делать его четным, а младший всегда должен иметь значение 0х00.

Чтение  блока данных.

   Алгоритм чтения блока данных следующий:

  • Если простой карты был   более 5 мс передаем команду CMD1 (ответ R1).
  • После подтверждения инициализации  передаем команду CMD17 (ответ R1), с адресом необходимого сектора.
  • Передаем 0xFF до получения стартового байта 0xFE .
  • Принимаем блок данных (по умалчиванию 512 байт)  и 2 байта CRC.

  Блок  данных может быть меньше 512 байт при изменении длины блока командой CMD16.

  Значение CRC не обязательно, но  процедура принятия (передача 0хFF от МК) необходима.

Чтение блока.

  Запись  блока данных.

Алгоритм записи блока данных следующий:

  • Если простой карты был   более 5 мс передаем команду CMD1 (ответ R1).
  • После подтверждения инициализации  передаем команду CMD24 (ответ R1), с адресом необходимого сектора.
  • Передаем  стартовый байт 0xFE .
  • Передаем блок данных (по умалчиванию 512 байт)  и 2 байта CRC.
  • Получаем байт подтверждения записи.
  • Ждем окончания записи (изменения байта 0х00).

  Блок  данных может быть меньше 512 байт при изменении длины блока командой CMD16.

  Значение CRC не обязательно, но  процедура передачи любыми значениями  необходима.

  Оценку  простоя можно программно и не делать, а сразу  давать команду инициализации. При программной  реализации столкнулся с некорректной записью, почему то все байты были записаны в сектор со сдвигом влево.  Проблему удалось решить, только передавая стартовый бит  (0xFЕ) два раза.

Запись блока.

Байт подтверждения при записи блока данных.

Запись/чтение нескольких блоков подряд.

При помощи команд  CMD18, CMD25  можно прочитать/записать несколько блоков подряд или так называемое многоблочное чтение/запись. Если не было задано количество блоков, то процесс чтения/записи можно остановить командами CMD12 при чтении , а так же  передачей маркера "Stop Tran"  при записи соответственно.

Практическое применение.

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

  • Год берется последние две цифры - это соответствует первому (главному) байту адреса сектора карты памяти.
  • Месяц,  две цифры - это соответствует второму, старшему байту адреса сектора карты памяти.
  • День, две цифры умножаются на 2 (во избежание наезда вне границы сектора) - это третий, средний байт адреса сектора карты памяти.
  • Младший, четвертый  байт соответственно всегда "0".

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

Кому надо   скину  фрагмент кода на ассемблере для 18 пиков.

Вопросы можно задать на форуме…..

chipmk.ru

Как выбрать карту памяти SD / MS / MMC / XD / CF? :

 

Развитие secure digital MultiMedia card привело к созданию Reduced Size — Multi Media Card (RS-MMC). Карта памяти RS-MMC вдвое меньше стандартной карты MMC, а вес ее составляет всего 1г. Для обеспечения совместимости с существующим стандартом MMC при использовании карт RS-MMC нужен адаптер. По скорости они аналогичны MMC картам, максимальный объём, которых сегодня, составляет 2 Гб. RS-MMC встречается в некоторых моделях Nokia и Siemens.

 

Существует также модификация этих карт, называемая

DV-RS-MMC, эта карта потребляет меньше энергии, как следствие телефон придётся реже заряжать. Стоит также заметить, что некоторые модели смартфонов Nokia поддерживают только карты DV-RS-MMC Совместимость: RS-MMC \ DV-RS-MMC -> MMC -> SD (с адаптером).

 

Карты памяти MMCPlus появились в 2005 году, их главное отличие от карт SD и MMC — высокая скорость передачи данных (до 52 Мб/с). Карта MMCPlus HC (High Capacity) является расширением MMCPlus. Емкость данной модели равна 4Гб. Отличительной особенностью MMCPlus HC является то, что она может использоваться только с совместимыми устройствами. А в устройствах без поддержки работает как стандартная MMC.

 

microMMC — предназначена для мобильных устройств с поддержкой ECC. (Error Checking and Correction — обнаружение и исправление ошибок при записи/чтении). Преимущество — низкое энергопотребление, благодаря чему сотовый телефон будет садиться не так быстро.

 

MiCard (Multiple Interface card) — многоинтерфейсная карта, разработанная тайваньским Industrial Technology Research Institute, совместимая с существующими портами USB, а также разъёмами для карт MMC. Это новый тип карты, преимущество которой состоит в высокой скорости передачи данных (480 Мбит/с). MiCard используется для прямого переноса данных между портативным устройством и настольным компьютером без подключения карт-ридера.

it-cont.ru

Работа с SD/MMC картой.

   В данной статье рассмотрим один из способов  применение в своих устройствах SD (Secure Digital Memory Card) далее SDC и MMC карт (Multi Media Card),  которые на сегодняшний день являются самыми популярными картами памяти для различных устройств как в промышленности, так и в быту.

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

 С SD/MMC картой можно работать обращаясь к данным непосредственно по адресу сектора без применения файловой системы, что в некоторых случаях упрощает разработку устройства. Именно этот способ мы и рассмотрим далее...

                                                Подключение к микроконтроллеру.

    В качестве примера возьмем карту SD/MMC максимальной емкостью до 2 ГБ,  у меня под рукой оказалась  microSD ( отличается от старшего брата  в основном только меньшими размерами ) на нее и будем ориентироваться.   Карты    могут работать в двух режимах обмена данными - это MMC протокол и SPI. Нас интересует   SPI,  он  наиболее предпочтительный для нашей задачи.  Протокол SPI  позволяет вести обмен данными на высокой скорости и задействовав при этом минимальное количество  выводов микроконтроллера. Кроме этого практически все микроконтроллеры имеют на своем борту аппаратный модуль SPI и задача сопряжения устройства с картой  легко реализуется.

Подключение к МК SD, microSD карт.

Подключение к МK MMC карты.

   .

  Работоспособность карты сохраняется при питании  от 2 до 3,6 вольт, соответственно удобно применить микроконтроллер (далее МК)  с таким же питанием или  по крайней мере в этом диапазоне, к примеру 3,3 вольта (PIC18F25k20). Если МК применен с 5 вольтовым питанием необходимо согласовать уровни  сигналов.

  Все MMC/SDC имеет в своем составе встроенный микроконтроллер управляющий   flash-памятью (чтения, записи и др.)  при помощи специальных команд. Ниже в таблице показан набор основных команд при работе с картой. Желтым цветом выделены команды при работе с SDC картами.

Набор основных команд.

  Кадр команды имеет фиксированную длину 6 байт. Байты передаются последовательно, начиная с  номера индекса команды CMD(0-64), потом  4 байт аргумента  и 1 байта контрольной суммы (CRC).

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

 Более подробно по командам можно прочитать в спецификации от MMCA и SDCA.

Рис.№1 

   Как видно из рисунка после передачи кадра команды необходимо продолжать чтение байтов (Ncr) от microSD  до получения ответа (R1), при этом уровень CS должен быть активным "0".

   В зависимости от индекса команды ответ может быть не только R1 (см. набор основных команд ) на CMD58 ответ R3 (R1 и завершающее 32-битное значение OCR), а некоторым командам нужно больше времени NCR и они ответ будет R1b. Это ответ R1, за которым идет флаг занятости (сигнал на линии "DO" удерживается картой в низком уровне, пока продолжается внутренний процесс). Контроллер хоста должен ждать окончания процесса, пока "DO" не перейдет в состояние высокого уровня (т.е. дождаться  0xFF). А так же R2 при запросе состояния регистра STATUS.

Ответ R1 содержит 1 байт, его структуру можно посмотреть в таблице ниже.  Ответ R2 состоит из двух байт, первый байт R1 и второй R2 (см. таблицу  структуры R2). А ответ R3 соответственно из 5 байт.

    Ответ R1 при значении  0х00  означает успешное завершение команды, иначе будет установлен соответствующий флаг.

Структура ответа R1.

Структура  ответа R2.

Инициализации  в  режиме SPI.

   После сброса и подачи питания карта по умалчиванию устанавливается в режим работы по протоколу MMC (Serial Peripheral Interface), для перевода в режим SPI необходимо сделать следующее:

  1. После достижения питания  2.2 В, подождать не менее миллисекунды,  установить на линиях DI и CS высокий уровень и выдать около  80 импульсов на вывод  CLK. После такой процедуры   карта будет готова  принять родную команду.
  2. Послать команду CMD0 (программный сброс). Карта должна ответить (R1) с установленным битом ожидания (0x01).
  3. Послать команду CMD1 (для начала инициализации карты). Ждать ответа 0х00 для подтверждения завершения процесса инициализации.

   Напомню, что команда CMD0 должна содержать корректное  поле CRC.  Рассчитывать нет смысла, так как  аргументов в этой команде нет, по этому оно постоянно и имеет значение 0х95. Когда карта войдет в режим SPI, функция CRC будет отключена  и  не будет проверяться. Опция CRC может быть снова включена командой CMD59.

  В результате команда CMD0 будет выглядеть так: 0х40,0х00,0х00,0х00,0х00,0х95.

  • индекс команды - 0х40.
  • аргумент- 0х00,0х00,0х00,0х00.
  • CRC-0х95.

  Что касается 80 импульсов, то их можно сформировать передавая  по SPI  значение 0хFF 10 раз подряд  при установленных высоких уровнях на линиях DI и CS.

  После простоя  более 5 мс карта памяти  переходит в энергосберегающий режим, и способна принимать только команды CMD0, CMD1 и CMD58.   По этому процесс инициализации  (CMD1) необходимо практически каждый раз повторять при чтении/записи блока данных или делать проверку состояния карты.

   Для SDC-карт  в случае отклонения команды CMD1  рекомендуется использовать команду ACMD41.

  Сам процесс инициализации может занять относительно длительное время (в зависимости от объема карты) и может достигать  сотен миллисекунд.

Чтение и запись блока данных.

   По умолчанию в режиме SPI   обмен между микроконтроллером и картой ведется блоками по 512 байт, по этому для записи даже одного байта придется сначала прочитать весь блок и изменив байт перезаписать обратно. Размер блока может быть изменен в регистре CSD карты памяти.

   Воизбежания   ошибки адресации  при выполнении команд чтения/записи необходимо что бы адрес указывался  четко  начала сектора. Для этого можно сбрасывать бит "0"  3 байта адреса сектора, т.е. делать его четным, а младший всегда должен иметь значение 0х00.

Чтение  блока данных.

   Алгоритм чтения блока данных следующий:

  • Если простой карты был   более 5 мс передаем команду CMD1 (ответ R1).
  • После подтверждения инициализации  передаем команду CMD17 (ответ R1), с адресом необходимого сектора.
  • Передаем 0xFF до получения стартового байта 0xFE .
  • Принимаем блок данных (по умалчиванию 512 байт)  и 2 байта CRC.

  Блок  данных может быть меньше 512 байт при изменении длины блока командой CMD16.

  Значение CRC не обязательно, но  процедура принятия (передача 0хFF от МК) необходима.

Чтение блока.

  Запись  блока данных.

Алгоритм записи блока данных следующий:

  • Если простой карты был   более 5 мс передаем команду CMD1 (ответ R1).
  • После подтверждения инициализации  передаем команду CMD24 (ответ R1), с адресом необходимого сектора.
  • Передаем  стартовый байт 0xFE .
  • Передаем блок данных (по умалчиванию 512 байт)  и 2 байта CRC.
  • Получаем байт подтверждения записи.
  • Ждем окончания записи (изменения байта 0х00).

  Блок  данных может быть меньше 512 байт при изменении длины блока командой CMD16.

  Значение CRC не обязательно, но  процедура передачи любыми значениями  необходима.

  Оценку  простоя можно программно и не делать, а сразу  давать команду инициализации. При программной  реализации столкнулся с некорректной записью, почему то все байты были записаны в сектор со сдвигом влево.  Проблему удалось решить, только передавая стартовый бит  (0xFЕ) два раза.

Запись блока.

Байт подтверждения при записи блока данных.

Запись/чтение нескольких блоков подряд.

При помощи команд  CMD18, CMD25  можно прочитать/записать несколько блоков подряд или так называемое многоблочное чтение/запись. Если не было задано количество блоков, то процесс чтения/записи можно остановить командами CMD12 при чтении , а так же  передачей маркера "Stop Tran"  при записи соответственно.

Практическое применение.

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

  • Год берется последние две цифры - это соответствует первому (главному) байту адреса сектора карты памяти.
  • Месяц,  две цифры - это соответствует второму, старшему байту адреса сектора карты памяти.
  • День, две цифры умножаются на 2 (во избежание наезда вне границы сектора) - это третий, средний байт адреса сектора карты памяти.
  • Младший, четвертый  байт соответственно всегда "0".

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

Кому надо   скину  фрагмент кода на ассемблере для 18 пиков.

Вопросы можно задать на форуме…..

chipmk.ru

Работа с SD/MMC картой.

   В данной статье рассмотрим один из способов  применение в своих устройствах SD (Secure Digital Memory Card) далее SDC и MMC карт (Multi Media Card),  которые на сегодняшний день являются самыми популярными картами памяти для различных устройств как в промышленности, так и в быту.

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

 С SD/MMC картой можно работать обращаясь к данным непосредственно по адресу сектора без применения файловой системы, что в некоторых случаях упрощает разработку устройства. Именно этот способ мы и рассмотрим далее...

                                                Подключение к микроконтроллеру.

    В качестве примера возьмем карту SD/MMC максимальной емкостью до 2 ГБ,  у меня под рукой оказалась  microSD ( отличается от старшего брата  в основном только меньшими размерами ) на нее и будем ориентироваться.   Карты    могут работать в двух режимах обмена данными - это MMC протокол и SPI. Нас интересует   SPI,  он  наиболее предпочтительный для нашей задачи.  Протокол SPI  позволяет вести обмен данными на высокой скорости и задействовав при этом минимальное количество  выводов микроконтроллера. Кроме этого практически все микроконтроллеры имеют на своем борту аппаратный модуль SPI и задача сопряжения устройства с картой  легко реализуется.

Подключение к МК SD, microSD карт.

Подключение к МK MMC карты.

   .

  Работоспособность карты сохраняется при питании  от 2 до 3,6 вольт, соответственно удобно применить микроконтроллер (далее МК)  с таким же питанием или  по крайней мере в этом диапазоне, к примеру 3,3 вольта (PIC18F25k20). Если МК применен с 5 вольтовым питанием необходимо согласовать уровни  сигналов.

  Все MMC/SDC имеет в своем составе встроенный микроконтроллер управляющий   flash-памятью (чтения, записи и др.)  при помощи специальных команд. Ниже в таблице показан набор основных команд при работе с картой. Желтым цветом выделены команды при работе с SDC картами.

Набор основных команд.

  Кадр команды имеет фиксированную длину 6 байт. Байты передаются последовательно, начиная с  номера индекса команды CMD(0-64), потом  4 байт аргумента  и 1 байта контрольной суммы (CRC).

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

 Более подробно по командам можно прочитать в спецификации от MMCA и SDCA.

Рис.№1 

   Как видно из рисунка после передачи кадра команды необходимо продолжать чтение байтов (Ncr) от microSD  до получения ответа (R1), при этом уровень CS должен быть активным "0".

   В зависимости от индекса команды ответ может быть не только R1 (см. набор основных команд ) на CMD58 ответ R3 (R1 и завершающее 32-битное значение OCR), а некоторым командам нужно больше времени NCR и они ответ будет R1b. Это ответ R1, за которым идет флаг занятости (сигнал на линии "DO" удерживается картой в низком уровне, пока продолжается внутренний процесс). Контроллер хоста должен ждать окончания процесса, пока "DO" не перейдет в состояние высокого уровня (т.е. дождаться  0xFF). А так же R2 при запросе состояния регистра STATUS.

Ответ R1 содержит 1 байт, его структуру можно посмотреть в таблице ниже.  Ответ R2 состоит из двух байт, первый байт R1 и второй R2 (см. таблицу  структуры R2). А ответ R3 соответственно из 5 байт.

    Ответ R1 при значении  0х00  означает успешное завершение команды, иначе будет установлен соответствующий флаг.

Структура ответа R1.

Структура  ответа R2.

Инициализации  в  режиме SPI.

   После сброса и подачи питания карта по умалчиванию устанавливается в режим работы по протоколу MMC (Serial Peripheral Interface), для перевода в режим SPI необходимо сделать следующее:

  1. После достижения питания  2.2 В, подождать не менее миллисекунды,  установить на линиях DI и CS высокий уровень и выдать около  80 импульсов на вывод  CLK. После такой процедуры   карта будет готова  принять родную команду.
  2. Послать команду CMD0 (программный сброс). Карта должна ответить (R1) с установленным битом ожидания (0x01).
  3. Послать команду CMD1 (для начала инициализации карты). Ждать ответа 0х00 для подтверждения завершения процесса инициализации.

   Напомню, что команда CMD0 должна содержать корректное  поле CRC.  Рассчитывать нет смысла, так как  аргументов в этой команде нет, по этому оно постоянно и имеет значение 0х95. Когда карта войдет в режим SPI, функция CRC будет отключена  и  не будет проверяться. Опция CRC может быть снова включена командой CMD59.

  В результате команда CMD0 будет выглядеть так: 0х40,0х00,0х00,0х00,0х00,0х95.

  • индекс команды - 0х40.
  • аргумент- 0х00,0х00,0х00,0х00.
  • CRC-0х95.

  Что касается 80 импульсов, то их можно сформировать передавая  по SPI  значение 0хFF 10 раз подряд  при установленных высоких уровнях на линиях DI и CS.

  После простоя  более 5 мс карта памяти  переходит в энергосберегающий режим, и способна принимать только команды CMD0, CMD1 и CMD58.   По этому процесс инициализации  (CMD1) необходимо практически каждый раз повторять при чтении/записи блока данных или делать проверку состояния карты.

   Для SDC-карт  в случае отклонения команды CMD1  рекомендуется использовать команду ACMD41.

  Сам процесс инициализации может занять относительно длительное время (в зависимости от объема карты) и может достигать  сотен миллисекунд.

Чтение и запись блока данных.

   По умолчанию в режиме SPI   обмен между микроконтроллером и картой ведется блоками по 512 байт, по этому для записи даже одного байта придется сначала прочитать весь блок и изменив байт перезаписать обратно. Размер блока может быть изменен в регистре CSD карты памяти.

   Воизбежания   ошибки адресации  при выполнении команд чтения/записи необходимо что бы адрес указывался  четко  начала сектора. Для этого можно сбрасывать бит "0"  3 байта адреса сектора, т.е. делать его четным, а младший всегда должен иметь значение 0х00.

Чтение  блока данных.

   Алгоритм чтения блока данных следующий:

  • Если простой карты был   более 5 мс передаем команду CMD1 (ответ R1).
  • После подтверждения инициализации  передаем команду CMD17 (ответ R1), с адресом необходимого сектора.
  • Передаем 0xFF до получения стартового байта 0xFE .
  • Принимаем блок данных (по умалчиванию 512 байт)  и 2 байта CRC.

  Блок  данных может быть меньше 512 байт при изменении длины блока командой CMD16.

  Значение CRC не обязательно, но  процедура принятия (передача 0хFF от МК) необходима.

Чтение блока.

  Запись  блока данных.

Алгоритм записи блока данных следующий:

  • Если простой карты был   более 5 мс передаем команду CMD1 (ответ R1).
  • После подтверждения инициализации  передаем команду CMD24 (ответ R1), с адресом необходимого сектора.
  • Передаем  стартовый байт 0xFE .
  • Передаем блок данных (по умалчиванию 512 байт)  и 2 байта CRC.
  • Получаем байт подтверждения записи.
  • Ждем окончания записи (изменения байта 0х00).

  Блок  данных может быть меньше 512 байт при изменении длины блока командой CMD16.

  Значение CRC не обязательно, но  процедура передачи любыми значениями  необходима.

  Оценку  простоя можно программно и не делать, а сразу  давать команду инициализации. При программной  реализации столкнулся с некорректной записью, почему то все байты были записаны в сектор со сдвигом влево.  Проблему удалось решить, только передавая стартовый бит  (0xFЕ) два раза.

Запись блока.

Байт подтверждения при записи блока данных.

Запись/чтение нескольких блоков подряд.

При помощи команд  CMD18, CMD25  можно прочитать/записать несколько блоков подряд или так называемое многоблочное чтение/запись. Если не было задано количество блоков, то процесс чтения/записи можно остановить командами CMD12 при чтении , а так же  передачей маркера "Stop Tran"  при записи соответственно.

Практическое применение.

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

  • Год берется последние две цифры - это соответствует первому (главному) байту адреса сектора карты памяти.
  • Месяц,  две цифры - это соответствует второму, старшему байту адреса сектора карты памяти.
  • День, две цифры умножаются на 2 (во избежание наезда вне границы сектора) - это третий, средний байт адреса сектора карты памяти.
  • Младший, четвертый  байт соответственно всегда "0".

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

Кому надо   скину  фрагмент кода на ассемблере для 18 пиков.

Вопросы можно задать на форуме…..

chipmk.ru

Подключение SD/MMC карт памяти | Catcatcat electronics


MMC (MultiMedia Card) и SD (Secure Digital Memory Card) карты на настоящий момент являются самым недорогим устройством большой емкости. Эти устройства  идеально подходят для встраиваемых систем где необходимо сбор большого количества данных, а также для простой возможности непосредственного переноса данных на ПК.

Карты памяти позволяют выполнять обмен информации по SPI интерфейсу,  который в основном присутствует в любом контроллере. И позволяет создать недорогой интерфейс обмена информацией.

Хороший сайт по информации о работе картами памяти (и не только) http://elm-chan.org/ рекомендую для ознакомления и получения дополнительной информации.

 


Габаритные размеры


Назначение выводом Микро SD для подключения по интерфейсу SPI.

Номер Обозначение Описание
1 Подключить к подтягивающему резистору
2 CS Выбор карты
3 DI Данные для записи в карту
4 Vdd Напряжение питания 2,7-3,3v
5 SCLK Синхроимпульсы шины SPI
6 Vss Общий
7 DO Данные чтения из карты
8 Подключить к подтягивающему резистору

Назначение выводом мини и SD карт для подключения по интерфейсу SPI.

Номер Обозначение Описание
1 CS Выбор карты
2 DI Данные для записи в карту
3 Vss Общий
4 Vdd Напряжение питания 2,7-3,3v
5 SCLK Синхроимпульсы шины SPI
6 Vss Общий
7 DO Данные чтения из карты
8 Подключить к подтягивающему резистору
9 Подключить к подтягивающему резистору
10
11

 

 


Вариант подключения для микро SD.

 


Схема для тестового проекта.

Проект предназначен как обучающий, для понимания работы с файловой системой, основан на FatFs – Generic FAT File System Module от ©ChaN. В программе присутствуют некоторые изменения для использования с PIC-контроллерами. Используется подключение через USB (эмуляция COM-порта) и HeperTerminal как управляющую панель, можно протестировать работу самой библиотеки, в связке с PIC-контроллером, по работе с SD/MMC картами памяти. Проект настроен на кодировку 866.


Управляющие последовательности.

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

di  – инициализация логического устройства

Пример, выполнения инициализации
> di
The disc initialization. 0-ok,1-no.
rc=0


dd [ <sector>] – чтение выбранного сектора с диска, просмотр на терминале (с загрузкой в буфер)

Пример, чтение сектора 0

>dd 0
Read sector:0
00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 …………….
000001C0: 0C 00 06 38 F8 B8 89 00 00 00 77 9F 3A 00 00 00 …8……w.:…
000001D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA …………..U.


ds – Просмотр состояния диска, устройства

Пример, выполнения команды

>ds
Drive size: 3842048 sectors
Erase block: 8192 sectors
MMC/SDC type: 4
CSD:
00000000: 00 2E 00 32 5B 5A 83 A9 FF FF FF 80 16 80 00 91 …2[Z……….
CID:
00000000: 02 54 4D 53 42 30 32 47 00 08 30 17 D1 00 CA 45 .TMSB02G..0….E
OCR:
00000000: 80 FF 80 00 ….
SD Status:
00000000: 00 00 00 00 00 00 00 28 02 02 90 02 00 32 00 00 …….(…..2..
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….


bd <адрес> – Просмотр буфера с указанного байта

Пример, выполнения

>bd 0
Viewing Buffer R/W:
00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….


be <адрес> [<данные>] … – Редактирование буфера

Пример, выполнения

>be 5 0x33 0x45 0x67
Editor buffer data R/W:

>bd 0
Viewing Buffer R/W:
00000000: 00 00 00 00 00 33 45 67 00 00 00 00 00 00 00 00 …..3Eg……..
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000001F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….


br  <сектор> <количество секторов 1 – 255> – Чтение сектора или секторов

Пример, выполнения

>br 0 1
Reading data from the disk into the buffer: 0
rc=0


bw <сектор> <количество секторов 1 – 255> – Запись буфера в сектор на диске  или запись буфера в несколько секторов на диске

Пример, выполнения

>bw 0 1
Writing data into the buffer: 0
rc=0


bf <число> – заполнение буфера данными

Пример, выполнения

>bf 0x35
The buffer is filled with the number of: 0
>bd 0
Viewing Buffer R/W:
00000000: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000010: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000020: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000030: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000040: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000050: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000060: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000070: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000080: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000090: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000000A0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000000B0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000000C0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000000D0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000000E0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000000F0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000100: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000110: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000120: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000130: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000140: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000150: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000160: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000170: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000180: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00000190: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000001A0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000001B0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000001C0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000001D0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000001E0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
000001F0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555


Последовательности для работы с файловой системой

fi – быстрая инициализация устройства

Пример, выполнения

>fi
rc=0 FR_OK


fs [<путь>] – Показать состояния логического диска (каталога)

Пример, выполнения

>fs
FAT type = FAT16
Bytes/Cluster = 32768
Number of FATs = 2
Root DIR entries = 512
Sectors/FAT = 235
Number of clusters = 60021
Volume start (lba) = 137
FAT start (lba) = 139
DIR start (lba,clustor) = 609
Data start (lba) = 641

13 files, 24096 bytes.
3 folders.
1920672 KB total disk space.
1919488 KB available.


fl [<путь>] – Просмотр каталога. Без пути – просмотр текущего каталога

Пример, выполнения

>fl
D—- 2013/06/16 15:37 0 123
D—- 2013/06/16 15:37 0 234
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2013/06/01 10:03 3011 footer.txt
—-A 2013/06/16 18:34 220 789.txt
—-A 2013/06/16 18:55 2391 4523.txt
4 File(s), 6908 bytes total
3 Dir(s), 1965555712 bytes free>

>fl 123
D—- 2013/06/16 15:37 0 .
D—- 2013/06/16 15:37 0 ..
—-A 2013/06/01 10:03 3011 123.txt
—-A 2013/06/01 10:20 1286 333.txt
—-A 2013/06/01 10:03 3011 4523.txt
3 File(s), 7308 bytes total
2 Dir(s), 1965555712 bytes free


fo <режим> <имя файла> – открыть файл, режим: 0x01 – на чтение, 0x00 – , 0x80 – , 0x02 – на запись, 0x04 – создать новый файл, 0x08 – создать независимо от наличия такого же файла в каталоге, 0x10 – отрыть независимо от текущего состояния, 0x20 – , 0x40 – .

Пример, выполнения

>fo 4 nini.txt
rc=0 FR_OK

>fc
rc=0 FR_OK

>fl
—-A 2061/01/23 00:48 0 nini.txt
D—- 2013/06/16 15:37 0 123
D—- 2013/06/16 15:37 0 234
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2013/06/01 10:03 3011 footer.txt
—-A 2013/06/16 18:34 220 789.txt
—-A 2013/06/16 18:55 2391 4523.txt
5 File(s), 6908 bytes total
3 Dir(s), 1965555712 bytes free


fc – Закрыть открытый файл

Пример, выполнения

>fc
rc=0 FR_OK


fe <ofs> – Переместить указатель в указанный адрес (внутри открытого файла, если файл на запись или внутри буфера если файл отрыт на чтение)

Пример, выполнения

>fo 2 footer.txt  // открываем файл на запись
rc=0 FR_OK
>fe 0x12                 // перемещаем указатель
rc=0 FR_OK
fptr = 18(0x12)


fr <количество байт чтения> – читать файл (данные загружаются в буфер)

Пример, выполнения

>fr 200
200 bytes read with 0 kB/sec.


fd <количество байт чтения> – чтение буфера, вывод на экран информации

Пример, выполнения

>fd 200
00000000: EF BB BF 3C 3F 70 68 70 0D 0A 2F 2A 2A 0D 0A 20 …<?php../**..
00000010: 2A 20 46 4F 4F 54 45 52 0D 0A 20 2A 0D 0A 20 2A * FOOTER.. *.. *
00000020: 20 54 68 69 73 20 66 69 6C 65 20 63 6F 6E 74 72 This file contr
00000030: 6F 6C 73 20 74 68 65 20 65 6E 64 69 6E 67 20 48 ols the ending H
00000040: 54 4D 4C 20 3C 2F 62 6F 64 79 3E 3C 2F 68 74 6D TML </body></htm
00000050: 6C 3E 20 61 6E 64 20 63 6F 6D 6D 6F 6E 20 67 72 l> and common gr
00000060: 61 70 68 69 63 61 6C 0D 0A 20 2A 20 65 6C 65 6D aphical.. * elem
00000070: 65 6E 74 73 20 69 6E 20 79 6F 75 72 20 73 69 74 ents in your sit
00000080: 65 20 66 6F 6F 74 65 72 2E 20 59 6F 75 20 63 61 e footer. You ca
00000090: 6E 20 63 6F 6E 74 72 6F 6C 20 77 68 61 74 20 73 n control what s
000000A0: 68 6F 77 73 20 75 70 20 77 68 65 72 65 20 75 73 hows up where us
000000B0: 69 6E 67 0D 0A 20 2A 20 57 6F 72 64 50 72 65 73 ing.. * WordPres
000000C0: 73 20 61 6E 64 20 50 61 s and Pa


fw <Количество байт для записи> <Значение записываемого байта> – запись в файл

Пример, выполнения

>fw 100 0x36
100 bytes written with 100 kB/sec.


fn <old_name> <new_name> – Изменения имени файла/каталога

Пример, выполнения, изменение имени каталога 123

>fl
—-A 2061/01/23 00:48 0 nini.txt
D—A 2013/06/16 15:37 0 mounfer
D—- 2013/06/16 15:37 0 123
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 00:03 3011 footer.txt
—-A 2013/06/16 18:34 220 789.txt
—-A 2013/06/16 18:55 2391 4523.txt
5 File(s), 6908 bytes total
3 Dir(s), 1965555712 bytes free
>fn 123 catalogMOBI
rc=0 FR_OK
>fl
—-A 2061/01/23 00:48 0 nini.txt
D—A 2013/06/16 15:37 0 mounfer
D—A 2013/06/16 15:37 0 CATALO~1 catalogMOBI
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 00:03 3011 footer.txt
—-A 2013/06/16 18:34 220 789.txt
—-A 2013/06/16 18:55 2391 4523.txt
5 File(s), 6908 bytes total
3 Dir(s), 1965555712 bytes free


fu <path> – удаление файла или каталог (каталог должен быть пустым)

Пример, выполнения

>fl
—-A 2061/01/23 00:48 0 nini.txt
D—A 2013/06/16 15:37 0 CATALO~1 catalogMOBI
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 00:03 3011 footer.txt
—-A 2013/06/16 18:55 2391 4523.txt
4 File(s), 6688 bytes total
2 Dir(s), 1965686784 bytes free
>fu 4523.txt
rc=0 FR_OK
>fl
—-A 2061/01/23 00:48 0 nini.txt
D—A 2013/06/16 15:37 0 CATALO~1 catalogMOBI
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 00:03 3011 footer.txt
3 File(s), 4297 bytes total
2 Dir(s), 1965719552 bytes free


fv – урезать файл, файл урезается по установленному указателю

Пример, выполнения, урезание файла footer.txt до 1кБ

>fl //смотрим каталог
—-A 2061/01/23 00:48 0 nini.txt
D—- 2061/01/23 01:28 0 cat01
D—- 2061/01/23 01:28 0 cat2
D—A 2013/06/16 15:37 0 CATALO~1 catalogMOBI
D—- 2061/01/23 01:28 0 car03
D—- 2061/01/23 01:29 0 cat03
D—- 2061/01/23 01:31 0 test
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 00:03 3011 footer.txt
D—- 2061/01/23 01:30 0 CAT2CA~1 cat2 cat77
D—- 2061/01/23 01:32 0 test03
3 File(s), 4297 bytes total
9 Dir(s), 1965490176 bytes free
>fo 2 footer.txt // открываем файл на запись
rc=0 FR_OK
>fe 1000 // устанавливаем указатель на 1000
rc=0 FR_OK
fptr = 1000(0x3E8)
>fv // урезаем размер файла
rc=0 FR_OK
>fc // закрываем файл
rc=0 FR_OK
>fl // смотрим каталог, что получилось
—-A 2061/01/23 00:48 0 nini.txt
D—- 2061/01/23 01:28 0 cat01
D—- 2061/01/23 01:28 0 cat2
D—A 2013/06/16 15:37 0 CATALO~1 catalogMOBI
D—- 2061/01/23 01:28 0 car03
D—- 2061/01/23 01:29 0 cat03
D—- 2061/01/23 01:31 0 test
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 01:40 1000 footer.txt
D—- 2061/01/23 01:30 0 CAT2CA~1 cat2 cat77
D—- 2061/01/23 01:32 0 test03
3 File(s), 2286 bytes total
9 Dir(s), 1965490176 bytes free


fk <имя каталога> – Создайте каталог

Пример, выполнения создать каталог с именем test03

>fk test03
rc=0 FR_OK


fa <атрибут> <маска> <имя файла или каталога> – Изменение атрибута  файла/каталога. Аnритут показывает какие флаги сбросить или установить 0 – сбросить, 1 – установить, маска какие влаги активировать, если использовать бинарные числа, то 0b000 – старший байт S, средний H, младший R.

Пример, выполнения

>fa 0b000 0b111 nini.txt // сбросить все атрибуты файла
rc=0 FR_OK
>fl
—-A 2061/01/23 00:48 0 nini.txt
D—- 2061/01/23 01:28 0 cat01
D—- 2061/01/23 01:28 0 cat2
D—- 2061/01/23 01:28 0 car03
D—- 2061/01/23 01:29 0 cat03
D—- 2061/01/23 01:31 0 test
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 01:40 1000 footer.txt
D—- 2061/01/23 01:30 0 CAT2CA~1 cat2 cat77
D—- 2061/01/23 01:32 0 test03
3 File(s), 2286 bytes total
8 Dir(s), 1965654016 bytes free
>

>fa 0b101 0b111 nini.txt // установить флаги R-S и сбросить H
rc=0 FR_OK
>fl
-R-SA 2061/01/23 00:48 0 nini.txt
D—- 2061/01/23 01:28 0 cat01
D—- 2061/01/23 01:28 0 cat2
D—- 2061/01/23 01:28 0 car03
D—- 2061/01/23 01:29 0 cat03
D—- 2061/01/23 01:31 0 test
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 01:40 1000 footer.txt
D—- 2061/01/23 01:30 0 CAT2CA~1 cat2 cat77
D—- 2061/01/23 01:32 0 test03
3 File(s), 2286 bytes total
8 Dir(s), 1965654016 bytes free


ft <year> <month> <day> <hour> <min> <sec> <name> – Изменить временную метку

 


fx <src_name> <dst_name> – Скопировать файл

Пример, выполнения

>fx 11111.txt 456/11.txt // копируем файл 11111.txt с текущего каталога в каталог 456 с переименованием 11.txt
Opening “11111.txt”
Creating “456/11.txt”
Copying…
1286 bytes copied.
>fl 456
D—- 2013/06/16 15:37 0 .
D—- 2013/06/16 15:37 0 ..
—-A 2013/06/01 10:20 1286 11111.txt
—-A 2013/06/01 10:03 3011 222222.txt
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 01:40 1000 FOOTER~1.TXT
—-A 2013/06/01 10:20 1286 FUNCTI~2.TXT
—-A 2061/01/23 00:48 0 NINI-Š~1.TXT
—-A 2061/01/23 01:40 1000 footer.txt
—-A 2061/01/23 00:48 0 nini.txt
—-A 2061/01/23 00:15 1286 11.txt
9 File(s), 10155 bytes total
2 Dir(s), 1965260800 bytes free


fg <path> – Изменить текущий каталог

Пример, выполнения

>fl
—-A 2061/01/23 00:48 0 nini.txt
D—- 2061/01/23 01:28 0 cat01
D—- 2061/01/23 01:28 0 cat2
D—- 2061/01/23 01:28 0 car03
D—- 2061/01/23 01:29 0 cat03
D—- 2061/01/23 01:31 0 test
D—- 2013/06/16 15:37 0 456
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 01:40 1000 footer.txt
D—- 2061/01/23 01:32 0 test03
D—- 2061/01/23 01:30 0 test.dir
—-A 2061/01/23 01:40 1000 FOOTER~1.TXT
—-A 2013/06/01 10:20 1286 FUNCTI~2.TXT
—-A 2061/01/23 00:48 0 NINI-Š~1.TXT
—-A 2013/06/01 10:20 1286 11111.txt
—-A 2013/06/01 10:03 3011 222222.txt
8 File(s), 8869 bytes total
8 Dir(s), 1965260800 bytes free
>fg 456
rc=0 FR_OK
>fl
D—- 2013/06/16 15:37 0 .
D—- 2013/06/16 15:37 0 ..
—-A 2013/06/01 10:20 1286 11111.txt
—-A 2013/06/01 10:03 3011 222222.txt
—-A 2013/06/01 10:20 1286 FUNCTI~1.TXT functions.txt
—-A 2061/01/23 01:40 1000 FOOTER~1.TXT
—-A 2013/06/01 10:20 1286 FUNCTI~2.TXT
—-A 2061/01/23 00:48 0 NINI-Š~1.TXT
—-A 2061/01/23 01:40 1000 footer.txt
—-A 2061/01/23 00:48 0 nini.txt
—-A 2061/01/23 00:15 1286 11.txt
9 File(s), 10155 bytes total
2 Dir(s), 1965260800 bytes free


fj – <номер диска 0, 1…> – Сменить текущий диск (если устройство разбито на несколько дисков).


fq – Показать путь текущей директории

Пример, выполнения

>fq
0:/456


fb – переместить указатель в конец файла, для до записывания информации

Пример, выполнения

>fo 2 11.txt
rc=0 FR_OK
>fb
rc=0 FR_OK


fm – <partition rule> <sect/clust> – Создание файловой системы

Пример, выполнения

>fm 1 1
The memory card will be formatted. Are you sure? (Y/n)=Y
Formats, please wait…
rc=0 FR_OK
>fl
0 File(s), 0 bytes total
0 Dir(s), 1950350848 bytes free
>fs
FAT type = FAT32
Bytes/Cluster = 512
Number of FATs = 1
Root DIR entries = 0
Sectors/FAT = 30017
Number of clusters = 3809280
Volume start (lba) = 0
FAT start (lba) = 2751
DIR start (lba,clustor) = 2
Data start (lba) = 32768

0 files, 0 bytes.
0 folders.
0 KB total disk space.
0 KB available.
>

>fm 1 0
The memory card will be formatted. Are you sure? (Y/n)=Y
Formats, please wait…
rc=0 FR_OK
>fl
0 File(s), 0 bytes total
0 Dir(s), 1962934272 bytes free
>fs
FAT type = FAT16
Bytes/Cluster = 32768
Number of FATs = 1
Root DIR entries = 512
Sectors/FAT = 8159
Number of clusters = 59904
Volume start (lba) = 0
FAT start (lba) = 1
DIR start (lba,clustor) = 8160
Data start (lba) = 8192

0 files, 0 bytes.
0 folders.
1916928 KB total disk space.
1916928 KB available.


t  – [<year> <mon> <mday> <hour> <min> <sec>] установка и индикация системного времени

Пример, выполнения

>t 2013 006 18 16 38 00
Setting the date and time
2013/6/18 16:38:00


Проект и библиотека в формате MPLAB® X v1.80, Microchip MPLAB XC16 v1.11 

catcatcat.d-lan.dp.ua

Карты памяти Kingston с интерфейсами MMC и SD

Не успели мы освоиться с картами, соответствующими спецификации SD 1.1 (причем большинство устройств до сих пор поддерживает лишь более медленный SD 1.0), как на горизонте замаячил переход на SD 2.0. Можно предположить, что, в результате, 1.1 становится «проходной» версией, и обращать на нее внимания не стоит. На деле все иначе. Есть ощущения, что внедрение SD 2.0 будет еще более медленным и болезненным, нежели переход с 1.0 на 1.1 или, даже, с MMC 3.0 на 4.х. Скорее всего, данный процесс будет напоминать переход с MMC на SD, который, кстати, в результате так и не закончился — вместо многократно предсказанной (в том числе, и мной) смерти MMC, данный формат, наоборот, не так давно обрел второе дыхание. Причина та же — отсутствие обратной совместимости SD и SDHC (такое лого будут носить все карты, отвечающие спецификациям 2.0). Если карту SD 1.1 можно спокойно использовать совместно с устройствами, рассчитанными на SD 1.0 (пусть и на меньшей скорости — сколько было возможно в 1.0), то же самое касается и MMC 4.x/3.0, то SDHC-карта работать в «обычном» SD-устройстве не будет. Таким образом, карту SD 1.1 или MMCplus, можно было купить на будущее, а SDHC нельзя. В то же время SDHC-устройства будут совместимы (когда появятся) и с обычными SD-картами, поэтому последние можно спокойно приобретать. Не факт, что вы чего-то потеряете в последствии. Почему? Посмотрим, что нам принесет SD 2.0.

Всего лишь работа над ошибками

Переход с SD 1.0 на 1.1 вдвое увеличил максимальную скорость работы, переход с MMC 3.0 на 4.0 дал нам, по сути, новые карты, а что дает SD 2.0? Официально всего две вещи — увеличение максимального объема карт и Class Speed Rating. Вторая проще, поэтому начнем с нее.

Как известно, производители предпочитают маркировать карты памяти по максимальной скорости чтения, причем по теоретически возможной. Не все и не всегда, но в большинстве случаев мы наблюдаем именно это. Скорость записи если и указывается, то тоже максимальная, да и то не всегда, причем только в спецификациях и мелким шрифтом. А скорость чтения (пресловутые «иксы») чаще всего указывается прямо на карте аршинными (по сравнению с размерами самой карты) буквами. Однако она далеко не всегда хотя бы близка к скорости записи (яркий пример — MLC-чипы, где разница в разы по-определению), да и добиться высоких значений последней в случае флэша сложно. Производители ее и не указывают — невыгодно. В результате купленная «скоростная» карта легко может оказаться более медленной, нежели «обычная», с чем мы не раз встречались. При этом во многих сферах применения скорость чтения не сильно важна (подумаешь — фотографии после отпуска будут переписаны на компьютер за 10 минут, а не за 5: никто не умрет), в то время как скорость записи критична. Пример — те же фотоаппараты, где низкая скорость записи просто не позволит вести серийную съемку. Еще хуже дело обстоит с записью видео, где флэш постепенно становится одним из часто используемых носителей: низкая скорость записи сделает съемку просто невозможной из-за того, что большинство кадров будет «выпадать» с очевидным конечным результатом. Первая попытка упорядочить бардак с маркировками была предпринята MMC-альянсом: карта MMCplus не только обязана поддерживать спецификацию 4.х, но и иметь минимальную установившуюся скорость записи не менее 2 Мбайт/с. SD-ассоциация пошла еще дальше, введя три класса карт: Class 2, Class 4 и Class 6. Цифры здесь не абстрактные значения, а именно установившаяся минимальная скорость записи — 2, 4 и 6 Мбайт/с. Нововведение полезное, но не такое жизненно важное: наши тесты показывают, что на сегодняшний день подавляющее большинство даже недорогих карт вполне способны справится с потоком в 6 Мбайт/с. С другой стороны, при покупке станет проще: например, если известно, что для полной реализации возможностей фото- или видеокамеры требуется SDHC Class 6, значит, такую карту и следует искать, не роясь в результатах тестирований и описаниях на сайтах производителей. Конечно, возможность злоупотреблений со стороны производителя остается в теории, однако в данном случае он получит не только горестные причитания от обманутого пользователя на различных форумах, но и преследования со стороны Ассоциации, на что вряд ли кто-то пойдет (даже из мелких компаний).

Что касается объема, то тут ситуация простая и понятная. Официально емкость сегодняшних SD-карт не может превышать 2 Гбайт. Ограничение не физическое, а логическое: виной тому используемая файловая система — FAT16. Последняя поддерживает и тома более 2 Гбайт, но при нестандартном размере кластера, на что производители бытовой аппаратуры в большинстве своем не пойдут. А для SDHC официальной файловой системой является FAT32, так что ограничение почти снято. Впрочем, некоторые верхние рамки в стандарт пока внесены — 32 гигабайта, однако до такой емкости компактным картам еще расти и расти (а ценам падать и падать :)). В конце концов, некоторые из форматов поддерживают и большие объемы, но карт хотя бы на 16 Гбайт, не говоря уже о 32 или 64, пока не видно 😉 Таким образом, с этой точки зрения, SDHC являются очевидным шагом вперед по сравнению с SD. Впрочем, несколько смазанным тем фактом, что некоторые производители техники уже освоили поддержку FAT32 и в рамках SD 1.1. А производители карт памяти ответили на это выпуском SD-карт, емкостью 4 гигабайта. Подобные карты даже в наших краях уже стоят меньше 100 долларов. Работать они будут впоследствии и в технике с поддержкой SDHC (напомню, что в этом направлении совместимость присутствует), а устройства, которые не поддерживают такие карты, все равно никто не исправит, поскольку SDHC в них работать точно не будут 😉

Именно это и делает переход с SD 1.1 на 2.0 непохожим на переход с 1.0 на 1.1. Во втором случае мы могли просто закупать новые карты и ждать появления новых устройств, которые позволят раскрыть все их возможности. В первом же необходимо сначала дождаться насыщения рынка устройствами с поддержкой SDHC, а потом покупать карты, поскольку для старых устройств они бесполезны. И даже тогда все равно можно использовать обычные SD большой емкости, поскольку они-то работать будут и в будущем. Возможно, что и в настоящем, но это необходимо конкретное устройство проверять. Пока на сайте SanDisk я обнаружил всего семь SDHC-совместимых устройств со всеми вытекающими. Можно сказать, что активно анонсируемые в последнее время SDHC-карты емкостью 4 Гбайт просто бесполезны — можно купить и обычную такой емкости. Когда захочется обзавестись картой гигабайт на восемь — другое дело: тут SDHC альтернатив не будет. Но сначала нужно приобрести устройство, в котором можно будет использовать такую карту.

А как это может сказаться на «народных» объемах до 2 Гбайт? Никак — SDHC-карты такой емкости не планируются. Данный сегмент рынка так и останется вотчиной SD 1.1, а ведь многим пользователям при нынешнем уровне цен и двух гигабайт-то не нужно. Именно поэтому тестирование карт SD 1.1 продолжает иметь смысл, причем такая ситуация способна продлиться еще как минимум год, а то и больше. MMC-альянс после появления спецификаций версии 4.1 никаких резких движений не производит — для начала нужно освоить то, что уже позволяет стандарт (благо последняя версия спецификации разрабатывалась чуть позже, чем в случае конкурента, да и была куда более революционной, чем SD 1.1 — в результате вполне стандартные карты MMC 4.x, емкостью 8 Гбайт, уже анонсированы, причем ничего в стандарте переделывать не пришлось ;)). Основной интерес для нас пока продолжают представлять карты, совместимые с SD 1.1 и MMC 4.1. Такие в очередной раз мы и будем изучать. Темой сегодняшней статьи являются представители нескольких линеек флэш-карт от компании Kingston, относящиеся как раз к упомянутым двум семействам. Кроме производителя роднит их, кстати, еще и емкость — все по гигабайту. Для многих применений вполне достаточно, да и цена уже опустилась до такого уровня, что можно себе ни в чем не отказывать 😉

Знакомимся с испытуемыми

По хронологии создания и алфавиту логичнее всего начать с MMCplus — прямого потомка тех самых старых добрых MMC-карт, емкостью в десяток-другой мегабайт, с которых и начали свою «родословную» все ветви фамильного древа как ММС, так и SD-семейств. Но остальные, по сути, боковые побеги, а MMCplus, еще раз повторю, прямой, хоть и по своему содержанию (да и немного по форме — контактная группа совсем другая) существенно отличающийся от предка. Впрочем, карт этого стандарта мы немало видели, так что сообщу, что ее реальная емкость по данным Everest составляет 973 мегабайта, и двинемся дальше.

Карты MMC изначально разрабатывались с прицелом на максимальную компактность, однако время показало, что для некоторых применений они великоваты. От древа отпочковался новый побег — карты RS- MMC, которые выглядели как обрезанные по длине ММС. Позднее на их базе появились DV RS-MMC, отличающиеся поддержкой напряжения питания не только 3.3 В, но и 1.8 В, — поскольку потребление энергии напрямую связано с напряжением, необходимость его снижения в мобильных устройствах очевидна. А после появления спецификаций MMC 4.0 на свет вышли MMCmobile — DV RS-MMC с поддержкой новых режимов работы. Если взглянуть с другой стороны, то можно назвать эти карты и RS-MMCplus, благо и для полноразмерных моделей уже тоже рекомендуется (пусть и необязательна) поддержка напряжения 1.8 В. Первое время все RS-модификации заметно уступали по емкости базовым (по чисто техническим причинам), однако по мере развития технологий, снижения цен микросхем флэша высокой плотности и роста аппетита пользователей (мобильные телефоны, где такие карты в ходу, давно уже с немалым успехом конкурируют с цифровыми плеерами и все ближе подбираются к вотчине «цифромыльниц») разрыв в случае массовых модификаций все более сокращался. Впрочем, анонса MMCmobile на 8 Гбайт я пока не видел, а MMCplus — без проблем, но в розничной торговой сети (по крайней мере, в Москве) и те, и другие карты пока ограничены двумя гигабайтами. Мы, как я говорил, тестируем карту емкостью 1 Гбайт заявленных или (по данным Everest) 988 Мбайт реальных.

Стандарт Secure Digital произошел от MMC достаточно давно, причем не является его прямым потомком — карты похожи, но, строго говоря, не обязаны быть совместимы ни в одном направлении (впрочем, благодаря производителям бытовой аппаратуры мы нередко можем использовать и те, и другие, но достигается это использованием двухстандартных контроллеров). Номинально сменилось две версии спецификаций (причем существовали они разное время), но, как я писал в начале статьи, версия 1.1 никуда в ближайшее время не исчезнет, а из карт до 2 Гбайт не денется никуда и никогда. Тестируем мы как раз гигабайтную карту, причем не простую, а «экстремальную». Впрочем, предел скорости с точки зрения Kingston находится на уровне 133х, а некоторые производители освоили и 150х, но последнее на практике может означать все, что угодно, а обещанные 20 Мбайт/с хотя бы на операциях чтения ныне вполне реальны. Насколько они реальны в нашем случае — покажут тесты. Скажу лишь, что попытка достигнуть технического совершенства и создать универсальные для всех применений карты сыграла с Secure Digital дурную шутку: этой самой secure фактически никто не пользуется, а емкость карты она кушает. По данным Everest гигабайтная SD-карта от Kingston имеет объем всего 941 Мбайт.

Использование флэш-карт в малогабаритной технике, как я говорил, привело к расцвету их уменьшенных модификаций. Если MMC-альянс делал упор на RS-MMC/MMCmobile, то альтернативой от SD-ассоциации явились карты miniSD. Стоит отметить, что позиция Альянса чуть лучше — в случае ММС карты физически и электрически совместимы по разъему. Ассоциация SD не обрезала, а придумала новый форм-фактор, совместимый с «предком» лишь при помощи специальных переходников. А так особенности те же — уменьшенные размеры и пониженное напряжение питания. Емкость долгое время была пониженной, но сейчас и SD, и miniSD одинаково уперлись в ограничения стандарта, то есть 2 гигабайта (на практике, все же, разница есть — «нестандартные» карты вдвое большей емкости в случае SD существуют, а делать такие miniSD никто не рискнул). Кстати — реальная емкость, что самое смешное, в нашем случае больше у miniSD: 949 Мбайт по данным Everest 🙂

А теперь мы вашего мальчика измерять будем — говаривал герой одного культового мультфильма. Карты, конечно, не мальчики (да и не девочки :)), а я не почтальон Печкин, но без измерений в наше время тоже никуда.

Методика тестирования

Тестирование проводилось на компьютере следующей конфигурации:

  • EpoX 8NPA SLI
  • AMD Athlon 64 3200+ (512K L2)
  • 1 Гбайт РС3200 DDR SDRAM
  • системный винчестер Western Digital WD740GD
  • картовод Apacer MegaSteno AM230
  • Windows XP Pro + SP2

Для измерения параметров испытуемых применялась программа Lavalys Everest Ultimate Edition 2006 2.80, вернее, входящий в нее тест дисковых накопителей.

Конкуренты

Поскольку карты у нас разных стандартов, на диаграммах будет приведено все, что мы ранее успели протестировать на данном картоводе. Заодно, кроме всего прочего, в очередной раз сравним друг с другом возможности MMC 4. x и SD 1.1: все же пока не так много мы их протестировали, чтобы отказать себе в удовольствии 🙂

Тесты на чтение

Повторить рекорд ультраскоростной карты MMCplus от Apacer в данном случае никому не удалось. Kingston MMCplus, судя по результатам, поддерживает лишь четыре линии данных и обязательную (с точки зрения стандарта) частоту синхронизации 26 МГц. MMCmobile заметно быстрее (скорее всего, за счет утилизации всей возможной ширины шины), но до скоростных SD-карт не дотягивает. Зато и SD, и miniSD положенных картам со скоростью 133х результатов вполне достигают, несмотря на то, что для последней рекордное быстродействие никто не заявлял.

Время доступа при чтении для большинства карт давно укладывается в диапазон 0,5-1,5 мс. Не стали исключением и наши сегодняшние испытуемые. Как забавную гримасу судьбы можно расценить то, что их результаты расположились в алфавитном порядке, несмотря на чередование форматов в нем 🙂

Тесты на запись

miniSD заметно отстала от полноразмерной карты, хотя и работает весьма быстро. SD показала в точности такой же результат, что и 133х от Pretec — иногда, оказывается, на «иксы» можно обращать внимание. В паре MMCplus/ MMCmobile позиции поменялись: судя по скорости, во второй карте применены MLC-чипы со всеми вытекающими. А у первой скорости чтения и записи не различаются, что работает в пользу теории об узости именно шины данных — сами флэш-микросхемы «зъили» бы и больше, но им не дают.

За единственным исключением время доступа на операциях записи такое, как и ожидалось. Однако исключение достойно отдельного упоминания: время доступа при записи для SD Ultimate ниже, чем для самых скоростных винчестеров, хотя для большинства флэш-накопителей наблюдается обратная картина (что и на диаграмме видно). Результат этот не уникальный — быстро «откликается» и флэшдрайв Pretec i-Disk Diamond. Такими темпами скоро все флэш-накопители по всем параметрам быстродействия обгонят своих магнитных собратьев 😉 Еще бы проблему с ограниченным количеством циклов перезаписи решить, цену снизить и все — твердотелые накопители сыграют похоронный марш своим конкурентам 🙂

Реальная емкость

Выше (в описании карт) я ее указывал, но для удобства сравнения повторю в таблице:

ФорматMMCplusMMCmobileSecure Digital miniSD
Заявленная емкость 1 Гбайт 1 Гбайт 1 Гбайт 1 Гбайт
Реальная емкость 973 Мбайт 988 Мбайт 941 Мбайт 949 Мбайт

Какие можно сделать выводы? Во-первых, рассчитывать на заявленную емкость не стоит — реальная заметно меньше. Во-вторых, даже в рамках продукции одной фирмы одного стандарта может она заметно различаться. В-третьих, на что я внимание обращал, емкость MMC-карт при прочих равных выше, чем у SD: даром на этом свете ничего не дается. Разница между минимумом и максимумом в сегодняшнем тестировании достигает 47 Мбайт — совсем недавно карты с меньшей полной емкостью были весьма массовым товаром (в комплект фотоаппаратов до сих пор нередко более мелкие вкладывают) 😉

Цены

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

MMCplusMMCmobileSecure DigitalminiSD
Н/Д(0)Н/Д(0)Н/Д(0)Н/Д(0)

Итого

Не так давно мы убедились, что MMC-карты могут быть намного быстрее, чем SD. Сегодня мы увидели уже не первое подтверждение тому, что не всегда они быстрее, даже в идеальных условиях. В старом оборудовании все будет еще хуже для MMC — скоростные SD могут потерять в скорости раза два, в то время как скоростные MMC могут «просесть» более чем на порядок.

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

www.ixbt.com

Интерфейс MMC и SD 2019

Интерфейс MMC и SD

Когда мы смотрим на считыватели карт, мы часто видим слот, который говорит SD / MMC. Поэтому это заставляет задуматься о различиях между интерфейсами MMC и SD. На самом деле SD появилась из стандарта MMC. Таким образом, электрический интерфейс SD был получен и является подмножеством MMC. Эти два являются электрически совместимыми, за исключением того, что у них больше нет одинаковых наборов команд; в то время как SD сохранил некоторые из команд, он удалил некоторые, а другие добавил.

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

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

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

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

Резюме: 1. Интерфейс SD является подмножеством интерфейса MMC. 2.SD-хосты могут читать MMC-карты. Карты 3.SD не помещаются в слоты для карт MMC. Карты 4.SD не достигнут оптимальной скорости в слоте MMC и наоборот.

ru.esdifferent.com

Добавить комментарий

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