MP3-плеер своими руками

Добавлено: 25.11.2007, Изменено: 30.07.2010

Лысенко А.А., Малыгин И.В.
MP3-плеер своими руками.
 
Любимая музыка может поднять настроение, сделать пасмурный день не таким мрачным, развеять тяжелые мысли. Наверное, поэтому мы так часто видим на улице, в метро или автобусе, в очереди в магазине людей в наушниках. Можно с уверенностью сказать, глядя на них, что они редко расстаются со своим увлечением, где бы они ни были. Предостережения врачей о возможной глухоте, тоже мало кого пугают. Больше беспокоит: насколько хватит батареек, какое максимальное количество песен можно взять с собой «в дорогу» и размер плеера или приемника тоже важен. С появлением портативных цифровых устройств воспроизведения звука многие беспокойства сошли на нет. Габариты и масса современных плееров практически незаметны и не стесняют движений, без лентопротяжного механизма энергии батарей хватает надолго, а совершенствование технологий аудио сжатия сделало возможным хранение музыки без потери качества в меньшем объеме памяти. Разработке собственного MP3-плеера и посвящена эта статья.
Проектирование такого устройства как плеер, объединившим в себе дюжину «ноу-хау», на первый взгляд, может показаться просто невозможным. Но если воспользоваться опытом и репутацией специалистов в этом вопросе, то все окажется намного проще и яснее в достижении поставленной цели.
Разработчики компании VLSI (www.vlsi.fi) предлагают однокристальное решение для создания МР3 плеера – микросхему VS1001k.
VS1001k понимает все известные и наиболее популярные алгоритмы аудиосжатия MPEG. 1, 2 Layers I, II, III, а также так называемые MPEG 2.5 Layers III файлы с любой типовой скоростью и частотой  дискретизации, поддерживается также и переменная скорость VBR (Variable Bite rate).
Микросхема состоит из быстродействующего сигнального процессора VS_DSP с низким потреблением мощности (см. рис. 1), 4 Кбайт памяти для служебных программ и 0.5 Кбайт – для пользовательских, двух последовательных интерфейсов типа SPI (разработана и впервые применена фирмой Motorola).  Управление схемой декодирования реализовано через SCI интерфейс, прием цифровых данных через SDI, быстродействующего сигма-дельта стерео ЦАПа и стереоусилителя для подключения наушников.
Для корректной работы микросхемы необходим управляющий микроконтроллер. VLSI рекомендует AT90S4414 фирмы Atmel, хотя можно использовать и любой другой. В функции микроконтроллера входит выдача последовательных цифровых данных по запросу VS1001K, их синхронизация, выдача управляющих сигналов, также синхронизированных.
Рис. 1. Структурная схема VS1001k.
 
VS1001k производится SOIC-28 и BGA-49 корпусах рис 2. Первый тип корпуса удобен для макетирования и ручной сборки, второй – для серийного производства.
Рис. 2. Корпуса SOIC-28 и BGA-49 микросхемы VS1001k.
 
Для того, чтобы разобраться как в действительности работает это устройство рассмотрим схему 3. На ней наглядно представлены этапы прохождения исходных данных через структурные блоки микросхемы. Направление движение звуковых данных может изменяться в зависимости от более точных настроек, которые доступны для управления через систему регистров. Механизм настройки мы рассмотрим немного позже.
Рис.3 Основные этапы обработки звука.
 
Данные могут поступать в микросхему через шину данных SDI (предназначенную для этого) и шину управления. Второй способ исключает прохождение потока данных через декодер MP1/2/3, при этом поток данных представляет собой 16 битный линейный (оцифрованный) код, SM_DAC = 1. Если мы подаем на вход SDI полноценный mp3-файл, то SM_DAC необходимо выставить в 0. Затем звук проходит через простенький эквалайзер. На этом этапе можно либо усилить уровень низких частот, SM_BASS = 1 , либо уменьшить SM_BASS = 0. SM_DAC и SM_BASS – это 5 и 7 биты регистра MODE (см. Интерфейс SCI).
Специалистами VLSI была предусмотрена возможность вносить изменения в звуковой поток при помощи пользовательской программы, для которой выделено 0,5Кбайта в памяти микросхемы. Такое дополнение к функциональности позволяет реализовывать собственные фильтры, накладывать различные эффекты (например, эхо или реверберацию). При A1ADDR установленным в ноль – данные не попадают в блок User Application, а попадают сразу на вход блока контроля громкости. В том случае, когда разработчик использует собственную программу, то этот регистр должен быть равен адресу начала программы.
Буфер FIFO предназначен для того, чтобы своевременно выдавать данные на ЦАП с частотой равной частоте дискретизации.
 
Интерфейс SCI
 
SCI – последовательный двусторонний интерфейс, обмен информации осуществляется 16 битными словами. Каждый сеанс чтения-записи позволяет обратиться только к одному из регистров микросхемы.
 
Код чтения/записи
Адрес регистра
Чтение/запись значения
 
На рисунке 4(а) изображены диаграммы уровней сигналов на выводах SCI интерфейса при чтении и записи соответственно. Операции чтения и записи определяются 8 битным кодом, за которым следует адрес регистра и, если мы говорим о чтении, то на выводе SO снимаем с побитовой синхронизацией SCK значение данного регистра. При записи в регистр, после его адреса следует его новое значение, рисунок 4(б) Для чтения код равен – 0000 0011 (0x3h), 0000 0010 (0x2h) – запись данных. После каждого приема-передачи должна следовать пауза в 500 микросекунд.
 
(а)
(б)
Рис.4 Временные диаграммы чтения а) и записи б)
 
Как уже было сказано ранее, что настройка микросхемы осуществляется через регистры. Все они перечислены в таблице.
 
Название
Чт/Зп
Адрес
Назначение
MODE
RW
0
Управление VS1001k
STATUS
RW
1
Состояние VS1001k
INT_FCTLH
-
2
Не используется
CLOCKF
RW
3
Корректировка частоты
DECODE_TIME
R
4
Время декодирования в секундах
AUDATA
R
5
Дополнительная информация звукового потока
WRAM
W
6
Начальный адрес для записи приложений в RAM
WRAMADDR
W
7
Адрес для запуска приложения.
HDAT0
R
8
Данные заголовка mp3-файла
HDAT1
R
9
Данные заголовка mp3-файла
A1ADDR
RW
10
Начальный адрес программы
VOL
RW
11
Задает аппаратное ослабление сигнала
RESERVED
-
12
Зарезервировано для VS1002
A1CTRL[x]
RW
13+x
x=0..1
 
Регистры располагаются в X-памяти (см. структурную схему) начиная с адреса 0x4000..0x40FF. При сбросе все регистры устанавливаются в ноли.
 

Установка частоты дискретизации

 
VS1001k позволяет проигрывать звуковые файлы с максимально возможной частотой дискретизации 48000 Гц. При этом задающий генератор (речь идет о кварцевом или диэлектрическом резонаторе) должен работать на частоте не менее 24,576 МГц, именно эта частота рекомендована для микросхемы. Если частота генератора меньше, уменьшается и частота дискретизации. Для ее расчета можно воспользоваться формулой:
 
ЧАСТОТА ДИСКРЕТИЗАЦИИ = 48000*ЧАСТОТА ГЕНЕРАТОРА/24,576
 
Как видно из выражения, при рекомендуемой частоте результат равен 48000. От частоты генератора напрямую зависит производительность DSP процессора. В таблице представлена зависимость качества звука (скорость звукового потока и частоты дискретизации) и задающей частоты:
 
МГц
Kbps/kHz
12,288
96/24
22,580
160/44,1
24,576
192/48
26,000
256/48
28,000
320/48
 
Эти значения соответствуют алгоритму декомпрессии, при котором частота дискретизации остается постоянной. В случае декомпрессии с переменной частотой скорость потока может увеличиваться.
При использовании нестандартной частоты генератора, до начала проигрывания необходимо записать в параметр CLOCKF значение, рассчитанное по формуле:
ЗНАЧЕНИЕ РЕГИСРА = ЧАСТОТА ГЕНЕРАТОРА (Гц)/2000
При низких задающих частотах (ниже 15МГц) микросхема позволяет удвоить ее. Для этого необходимо установить самый старший бит регистра в единицу, те для 14 МГц справедливы следующие вычисления:
0x8000 + 14000000/2000 = 39768

Тестирование

            Микросхема позволяет проводить ряд внутренних тестов: памяти, шины управления, подача определенной частоты на выход. Каждому тесту соответствует управляющая последовательность, которую необходимо передать через шину управления. После каждой такой посылки не обходимо дослать еще четыре нуля!
 

Тест памяти

            После записи пользовательской программы или других изменений (например, перезапись некоторых переменных) может возникнуть необходимость протестировать на наличие ошибок память. Тест памяти запускается 0x4D 0xEA 0x6D 0x54 последовательностью. После 500 микросекундной паузы можно считать результат теста из регистра HDAT0.
 
Бит
Значение
0
Good X ROM
1
Good Y ROM (high)
2
Good Y ROM (low)
3
Good Y RAM
4
Good X RAM
5
Good Instruction RAM (high)
6
Good Instruction RAM (low)
7
Unused
 
В таблице приведены значения битов, установленных в «1».
 
Тест SCI
Тест запускается последовательностью 0x53 0x70 0xEE n, где n – 48 равен порядковому номеру регистра из таблицы. Тестирование заключается при копировании значения выбранного регистра в HDAT0. Если выбран регистр HDAT0, то его значение переносится в HDAT1.
 
Подача тона на выход
            Последовательность 0x53 0xEF 0x6E n генерирует синусоиду, поступающую на выход устройства. Параметр n может принимать значения от 48 до 119. Параметры тестового сигнала определяются по формулам:
FsIdx = (n – 48)mod9                       FSin = (n – 48)=9
И таблицам:
FsIdx
Freq
 
FSin
Lengh
0
44100
 
0
32,000
1
48000
 
1
16,000
2
32000
 
2
10,667
3
22050
 
3
8,000
4
24000
 
4
6,400
5
16000
 
5
5,333
6
11025
 
6
4,571
7
12000
 
7
4,000
8
8000
 
 
 
 
Авторы надеются, что в этой статье достаточно внимания было уделено знакомству особенностям проектирования MP3
            Несколько слов о непосредственном включении VS1001k. Как показано на рисунке 5 для управления VS1001k требуется 8 входов/выходов микроконтроллера.
 
 
При некоторых ограничениях это количество можно снизить до 6, как показано на рисунке 6.
Рис. 6. Упрощенная схема включения VS1001k с сокращенным числом линий управления.
 
Чтобы такая схема работала необходимо выполнение трех условий:
-         /MISO и GIO2 должны быть запрограммированы как входы, остальные – как выходы;
-         /SPI синхронизация должна быть такой, как показано на осциллограмме (рис. 7), когда SPI находится в неактивном состоянии;
-         Если шина SPI недоступна, но микроконтроллер достаточно быстр, для организации сигналов MISO, MOSI и SCK могут быть использованы общие входы/выходы микроконтроллера.
В этой схеме GIO1 осуществляет выбор шины. Если он установлен в 1, XCS – не активен, и тактовый сигнал SCK поступает через логический элемент «И» на вход DCLK. Таким образом, данные посланы шине SDI. Когда GIO1 установлен в 0, XCS активизируется, и синхронизация DCLK прекращается. Теперь данные поступают на шину SCI.
Например, требуется установить уровень громкости - 2 dB для левого канала и - 3.5 dB для правого канала. Для этого мы должны записать 0x0407 в регистр VOL [1, стр. 50]:
-         Активизируем интерфейс SCI, устанавливая GIO1 в 0;
-         Записываем четыре байта (0x2, 0xb, 0x4, 0x7) в SCI;
-         Заканчиваем передачу данных по SCI шине, устанавливая GIO1 в 1.
Для приема данных по SCI шине, в частности, для чтения содержимого регистра VOL, необходимо:
-         Активизировать интерфейс SCI, GIO1 – в 0;
-         Записать два байта (0x3, 0xb) в SCI;
-         Записать один байт с любым содержимым в SCI. Прочитать содержимое регистра MISO микроконтроллера, который содержит теперь восемь старших битов результата;
-         Записать один байт с любым содержимым в SCI. Прочитать содержимое регистра MISO микроконтроллера, который содержит теперь восемь младших битов результата;
-         Объединить старшие и младшие биты для получения 16-разрядного слова;
-         Закончить обмен данных по SCI шине, GIO1 - в 1.
 
Чтобы отправить MP3 данные к VS1001k нужно воспользоваться следующим алгоритмом:
-         Ждем, когда активизируется DREQ (1);
-         Активизируем DCLK, GIO – в 1.
-         Для каждого байта делаем следующее:
--- Устанавливаем BSYNC в 1;
--- Активизируем SPI передачу;
--- Ждем, пока, по крайней мере, первый бит данных будет отправлен, а последний бит данных - не будет;
--- Устанавливаем BSYNC в 0;
--- Ждем окончания SPI цикла микроконтроллера для завершения процедуры.
 
Рис. 7. Осциллограммы посылки одного SDI байта.
 
Три сигнала (сверху – вниз) изображены на рис. 7: DCLK (желтый), SDATA (голубой) и BSYNC (розовый). BSYNC сначала активен. Данные посланы и прочитаны VS1001k по фронту тактового сигнала DCLK. Переданное число, показанное на осциллограмме, - 0b01000101 или 0x45. Используемая тактовая частота - 1 МГЦ, потому что это максимально возможное значение, которое может предложить используемый микроконтроллер.
 
Рис. 8. Осциллограммы посылки восьми SDI байтов.
 
На осциллограмме рис. 8. продемонстрирована посылка тестовой команды SDI. Здесь переданы восемь байтов: 0x45 0x78, 0x69, 0x74, 0x0, 0x0, 0x0, 0x0. Эта последовательность тестирует синусоидальный выход VS1001k [1, стр. 35]. Обратите внимание, что задержка между последовательными байтами обусловлена низкой производительностью управляющего микроконтроллера и для самого VS1001k не нужна.
В заключение хочется отметить, что использование VS1001k не ограничивается созданием МР3-плейера. VS1001k может быть также полезен для создания любых бытовых устройств и высокотехнологичных игрушек с функциями воспроизведения речи.
 
Комплект отладки
 
В комплекте отладки VS1001 KIT, изображенном на рис. 9, для решения этой задачи использован контроллер USB PDIUSB12 фирмы Philips, хотя в отечественных условиях для этого проще использовать микросхемы FT245BM фирмы FTDI или USBN9603 от National Semiconductor. На печатной плате комплекта отладки размещена также ПЛИС XCR3064XL фирмы Xilinx, основная задача которой состоит в генерации сигнала BSYNC – синхронизация байтов для VS1001K. Но эту задачу, как указано в технической документации может успешно выполнять и управляющий микроконтроллер.  
 
Рис. 9. Внешний вид комплекта отладки VS1001 KIT.
 
Дополнительно к уже описанным компонентам комплект отладки содержит разъем USB–B для подключения к ПК, разъем для подключения ММС карты на 8 или 16 Мб (куда записываются MP3-файлы), 5 кнопок управления (увеличение/уменьшение громкости, перемотка, пауза.), разъем для подключения наушников. Плата может работать как MP3 плеер через USB, либо автономно (при этом требуется обеспечение внешнего питания +5…+7 В). К VS1001 KIT прилагается также дискета с программным обеспечением, которое включает в себя полную техническую документацию на микросхему, драйвера под Windows 98/2000 и инструкции по программированию USB драйвера.
 
Список использованной литературы.
 
1.      VS1001k – MPEG AUDIO CODEC. Data Sheet. Version 4.03. Apr 2002., www.vlsi.fi
2.      А. Ряхин. MPEG-2 и нелинейный монтаж - просто о сложном. http://www.pinnacle.ru/documentation/
 

« Назад

Нужны ли роботы во время кризиса?
Какого такого кризиса?
А гастарбайтеры на что?
Нужны роботы-попрошайки
Нужны роботы, улучшающие производительность труда

Смотрите также


   
        Rambler's Top100         Поиск электронных компонентов