Музыкальный звонок с картой ММС

Карта памяти ММС может обмени­ваться информацией с устройст­вом, к которому она подключена, в двух режимах. Первый носит название MulttMediaCard protocol, он более ско­ростной, а в пользу второго (SPI proto­col) свидетельствует то, что встроенный интерфейс SPI имеют многие микро­контроллеры, соединить карту с одним из них не представляет никаких трудно­стей. В табл. 1 приведено назначение контактов карты ММС именно при рабо­те в режиме SPI.

Назначение контактов карты ММС

А их расположение по­казано на рис. 1, там же изображена карта памяти SD (Secure Digital), в режи­ме SPI совместимая с ММС. Контакты 8 и 9 карты SD в этом режиме не исполь­зуются, их необходимо соединить с цепью питания (VDD) через резисторы номиналом около 4,7 кОм.

Карта памяти SD

Сигнал CS имеет активный низкий уровень. Интерфейс SPI управляющего картой микроконтроллера должен быть настроен таким образом, чтобы актив­ным был нарастающий перепад сигнала SCLK. В микроконтроллерах AVR для этого нужно занести в регистр SPCR код 0x50 (здесь и далее имена регистров и значения кодов относятся к микроконт­роллерам семейства AVR).

Прием байта из карты происходит одновременно с загрузкой в нее другого байта, как показано на рис- 2.

Прием байта из картыКоманда из шести байтов

Чтобы произвести такой обмен через контрол­лер интерфейса SPI микроконтроллера, работающий в режиме ведущего (mas­ter mode), в буферный регистр приемо­передатчика SPDR нужно записать байт, предназначенный для пересылки в кар­ту, а по завершении операции прочитать в том же регистре принятый из карты байт. Импульсы синхронизации SCLK ведущий формирует автоматически.

В простейшем случае обмен инфор­мацией происходит в формате «коман­да микроконтроллера — ответ карты». Команда (табл. 2) всегда состоит из шести байтов — 48 двоичных разрядов, передаваемых в порядке от старшего (D47) к младшему (DO).

Обмен начинается с установки низ­кого уровня сигнала CS. Затем отправ­ляют шесть байтов команды: их пооче­редно записывают в регистр SPDR, не забывая каждый раз дожидаться окон­чания передачи предыдущего байта (контролируя его по состоянию разряда SPIF в регистре SPSR). Далее следует получить ответ карты. Для этого, много­кратно передавая коды OxFF, анализи­руют принятые байты. Первый из них, отличный от OxFF, и будет ответом на поданную команду. На все рассматри­ваемые далее команды карта отвечает одним байтом. Блок информации за­данной длины, если он требуется, она передает вслед за байтом ответа.

Карта ММС, работая в режиме SPI, воспринимает около 20 команд, позво­ляющих, во-первых, получить полную ин­формацию о типе и текущем состоянии карты, во-вторых, производить запись и чтение информации. Мы рассмотрим только четыре команды (табл. 3), кото­рых достаточно, чтобы прочитать храня­щуюся в ММС информацию.

Команды для чтения информации

Старший разряд (D7) ответа карты на любую из этих команд всегда равен нулю, едини­цы в других разрядах означают, что при приеме и исполнении команды допуще­ны следующие ошибки:

D0=1 — карта находится в спящем режиме, процесс инициализации не завершен;

D1-1 — операция стирания прервана до ее завершения;

D2=1               принята недопустимая команда;

D3=1 — принятый контрольный код CRC7 не совпал с вычисленным;

D4=1 — ошибка в команде стирания; D5=1 — ошибка адреса, блок пере

секает физичес­кую границу сек­тора;

D6=1 — аргу­мент команды вне допустимых пре­делов.

Передаваемый картой по команде CMD17 информа­ционный блок может быть длиной от 4 до N+3 байт, где N — значение аргумен­та последней принятой картой команды CMD16 или 512, если таких команд не было. Первый байт этого блока — все­гда OxFE, далее следуют N байтов ин­формации, а за ними — два байта конт­рольного кода CRC16. Его правильность можно не проверять, но прочитать — обязательно. Если в карте произошел сбой, вместо информационного блока она передает один байт с признаками ошибки:

D0=1 — сбой по неизвестной причине; D1=1 — сбой внутреннего контрол­лера;

D2=1 — процедура коррекции оши­бок не смогла восстановить поврежден­ную информацию;

D3-1 — аргумент команды вне допус­тимых пределов;

D4—1 — карта заблокирована (напри­мер, защищена паролем).

Значения разрядов D5—D7 всегда нулевые.

Чтобы подготовить карту к работе, необходимо через несколько миллисе­кунд после включения питания 74 раза послать ей по интерфейсу SPI код OxFF, затем выдержать паузу 1 мс. Все это время на выводе CS должен быть уста­новлен высокий уровень. Теперь карта готова к работе в режиме Multimedia-Card protocol. Для перевода ее в режим SPI необходима команда CMD0. Хотя в этом режиме проверка контрольного кода по умолчанию отключена, в коман­де CMD0 значение CRC7 должно быть указано правильно. Поскольку эта ко­манда не имеет меняющегося в процес­се работы аргумента, каждый раз вы­числять ее CRC7 заново не обязатель­но: команда всегда представляет собой последовательность байтов 0x40 0x0. 0x0,0x0, 0x0, 0x95.

Далее карту необходимо инициали­зировать. Для этого повторяют команду CMD1 (0x41, 0x0, 0x0, 0x0, 0x0, OxFF) до тех пор, пока единичное значение раз­ряда D0 в ответе карты не сменится нулевым. Теперь карта готова к работе в режиме SPI и ей можно подавать другие команды. В нашем случае — CMD16 (0x50, ОхХХ, ОхХХ, ОхХХ, ОхХХ, OxFF) и CMD17 (0x51, ОхХХ, ОхХХ, ОхХХ, ОхХХ, OxFF). Здесь XX — значения аргументов этих команд, а их последние байты (OxFF) подменяют ненужные в режиме SPI контрольные коды.

MBR Vaster Boot Record

Описание MBR

Завершающий фрагмент MBR

Назначение полей PBR

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

Как правило, это файловая система FAT16 — такая же, как на гибких и жестких магнитных дисках, ее варианты известны и приме­няются со времен операционных систем DOS до настоящего времени.

Физические единицы хранения ин­формации на диске или на карте — сек­торы обьемом по 512 байт. Они объеди­няются в более крупные кластеры, каж­дый из которых содержит целое число секторов. В самом первом секторе обычно содержится так называемая главная загрузочная запись (Master Boot Record, MBR), структура которой показана в табл. 4. Ее первые 446 бай­тов отведены информации, требующей­ся для «холодного» старта компьютера с данного носителя информации (диска или карты). Если такой старт невозмо­жен, они остаются нулевыми. В конце MBR находятся описания (табл. 5) от одного до четырех логических разде­лов, которые могут быть организованы на данном носителе, причем каждый — со своей файловой системой.

В табл. 6 приведен пример содержи­мого завершающего фрагмента MBR с описанием только одного раздела. Цифры, выделенные красным цветом, означают, что раздел имеет формат FAT16, начинается с адреса 0х00000065х х512 = ОхСАОО и может содержать до 0x00079F9B = 499614 секторов (при­близительно 244 Мбайт информации).

Обратите внимание, что все мно­гобайтные значения параметров здесь и далее записаны в памяти карты в принятом для со­вместимых с IBM PC компьютеров порядке: младший байт числа (кода) всегда находится по меньшему ад­ресу,   чем старший. Например, четырехбайтное число 0x00079F9B выглядит как 9В 9F 07 00. По начальному адресу раздела нахо­дится его загрузочная запись (Partition Boot Record, PBR). Если на карте всего один раздел, его PBR может начинаться с нулевого адреса, занимая место отсутствующей MBR. Назначение полей PBR, представляющих для нас интерес, приведено в табл. 7. FAT — это таблица расположения файлов (File Allocation Table). Две ее копии абсолютно одина­ковы, но обычно работают только с пер­вой, обращаясь ко второй лишь при подозрении, что первая повреждена.

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

Первый из них — FAT base, адрес начала первой копии FAT. Он равен числу секторов от начала PBR до начала FAT, умноженному на число байтов в секторе, плюс начальный адрес раздела:

FAT.base = 2*512+OxCAOO=OxDAOO.

Второй — Root_base, адрес начала корневого каталога файлов. Он следует за двумя копиями FAT, каждой из кото­рых отведено по два сектора. Этот адрес на 2x2x512 больше FATbase и равен 0х4АА00.

Третий — Clusterbase, начало пер­вого информационного кластера разде­ла. Он следует непосредственно за кор­невым каталогом, длину которого можно определить, зная максимальное число записей в нем и длину записи (32 байта для FAT 16). После несложных вычисле­ний получаем

Cluster_base = 0х4СА00.

Корневой каталог состоит из запи­сей длиной по 32 байта, каждая описы­вает один хранящийся файл и имеет структуру, показанную в табл. 9. При удалении файла все его содержимое фактически остается неизменным, лишь первый символ имени файла в каталоге заменяется кодом 0хЕ8, кото­рый просто разрешает операционной системе повторно использовать данную каталожную запись и всю отведенную «удаленному» файлу память. Пока новая запись не производилась, файл можно восстановить, вернув на свое место первую букву его имени. Кроме имени файла, его атрибутов (только чтение, скрытый и т. п.), здесь находится номер первого кластера, занятого файлом, который не может быть меньше двух, поскольку нулевой и первый кластеры носителя заняты слу­жебной информацией. Второй кластер начинается сразу после корневого ката­лога максимального обьема.

В табл. 10 приведен пример описа­ния файла ММС.ТХТ. Файл начинается со второго кластера (расположенного по адресу Clusterbase). Длина этого файла ОхООООбАЗЗ = 27187 байт. За но­мерами следующих кластеров файла следует обращаться в FAT, состоящую из ячеек, число которых равно числу кластеров на носителе. Ячейки — шест­надцатиразрядные, именно по этой причине система названа FAT 16 {есть ее варианты — FAT 12 и FAT32).

Чтобы найти номер следующего кла­стера файла, необходимо прочитать ячейку FAT, номер которой совпадает с уже известным номером предыдущего кластера. Если содержимое ячейки лежит в пределах 0x3—OxFFEF, это— номер следующего кластера, в соответ­ствующей ему ячейке таблицы будет записан номер еще одного кластера и так далее. Образуется их цепочка, хра­нящая всю информацию данного фай­ла. В ячейке последнего кластера це­почки вместо номера следующего запи­сан код из интервала 0xFFF8—OxFFFF.

Описание MMC.txt

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

Устройство для проигрывания звуков

Обратите внимание, что нулевая и первая ячейки FAT, соответствующие никогда не используемым кластерам, также содержат коды «последнего кла­стера». Кодами 0xFFF7 помечают де­фектные кластеры. Программа записи файлов должна уметь их обходить.

Схема простого устройства для воспроизведения записанных на карту ММС файлов формата WAV показана на рис. 3. В нем всего две микросхе­мы: микроконтроллер ATmega8 и уси­литель мощности LM386N. Такое уст­ройство можно использовать, напри­мер, в качестве квартирного звонка. В программную память микроконтрол­лера необходимо загрузить коды из файла mmcsd wav.hex, имеющегося в приложении. Разряды конфигурации должны быть запрограммированы сле­дующим образом: CKSEL0=0, CKSELl = 1, CKSEL2=1, CKSEL3=1, CKOPT=1, SUTf>1, SUT1=0.

После подачи напряжения питания микроконтроллер производит инициали­зацию своих внутренних узлов, после че­го переходит в «спящий» режим. При на­жатии на кнопку SB1 микроконтроллер «просыпается», о чем свидетельствует включение светодиода HL1, инициализа-цирует карту ММС, подключенную к разъ­ему XI, и ищет на ней файл по имени muzon01.wav. Найдя нужный файл, мик­роконтроллер воспроизводит его, после чего снова «засыпает», а светодиод HL1 гаснет. При следующем нажатии на кнопку SB1 все повторится, но будет воспроизведен файл muzon02.wav. И так до последнего, десятого файла, после которого вновь прозвучит первый и цикл повторится.

Необходимую скорость воспроизве­дения задает таймер ТО микроконтролле­ра, по формируемым им запросам пре­рывания байты информации, считанные из ММС, поочередно заносятся в регистр ОСВ1А1_таймераТ1 (значение в регистре OCR1 АН должно быть нулевым). Микро­контроллер формирует на выходе ОС1А (выводе 15) импульсы, длительность которых пропорциональна значениям заносимых в регистр OCR1AL байтов, а частота следования равна 32 кГц.

После удаления фильтром R5C7 высокочастотных составляющих эта импульсная последовательность пре­вращается в звуковой сигнал, мощность которого доводит до необходимого для работы акустической головки ВА1 уров­ня усилитель DA1. Подстроечный рези­стор R7 — регулятор громкости.

На транзисторе VT1 собран стабили­затор напряжения 3,3 В для питания микроконтроллера и карты ММС. Вмес то транзисторного можно (и даже нуж­но) применить интегральный стабили­затор, например, на микросхеме LD1086V33. Но к моменту изготовления устройства такого стабилизатора в наличии не оказалось. Следует отме­тить, что при напряжении питания 3,3 В тактовая частота 16 МГц для микроконт­роллера ATmega8 считается слишком высокой. Тем не менее собранное мной устройство нормально работает.

Готовя карту ММС для работы в описан­ном устройстве, нужно с помощью ком­пьютера записать на нее десять звуковых файлов формата WAV (PCM, 16 кГц, 8 раз­рядов, моно) с именами muzonOI .wav — muzon10.wav. Файлы, названные иначе, воспроизводиться не будут.

В простейшем случае для этого мож­но воспользоваться стандартной про­граммой Windows «Звукозапись». Чтобы найти ее, пройдите по пути «Пуск—>Про-граммы-»Стандартные->Развлечения^ Звукозапись». Большие возможности дают специализированные программы, например Sound Forge.

Перед записью файлов карту необ­ходимо отформатировать, создав на ней систему FAT16. Однако на картах не­большого объема, например 16 Мбайт, Windows автоматически создает систему FAT12, непригодную для рассматривае­мого устройства. В таких случаях можно запустить программу форматирования из командной строки, указав в ней раз­мер кластера 1024 байт. Если карта опре­делена компьютером как диск F, команд­ная строка должна быть следующей:

format F: /А:1024

В результате ее выполнения на карте будет создана система FAT 16.

Программа микроконтроллера находится на  FTP-сервере по адресу <ftp://ftp.radio.ru/pub/2009/ 09/mmc sd wav. zip>.

Метки: , .


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

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

Проверочный код *

Разработка сайта: cryptonic