RSS
people

Mazda MP3 Player — Продолжение

Продолжаем разговор...

После того, как мы разузнали всю основную информацию, можно приступать к проектированию железа.

Как я уже говорил в  анонсе , это у меня уже третья версия, так что с железом я долго не возился. Только из второй версии выкинул ненужные детали, и развел платку под размер 2.5 дюймового диска от ноутбука. Схему самого плеера можно глянуть тут.  А тут схемка блока с дисплеем.

Пройдемся по основным узлам.

На первой странице представлена «блок схема» всего плеера:

Блок-схема

Как видно — плеер получился довольно простенький. На блок схеме представлены следующие модули:

  • Power — блок питания
  • M-Bus — интерфейс покдлючения к магнитоле
  • Button — колесо прокрутки / кнопка (Dreheimpulsgeber)
  • CPU — ну тут все понятно — мозг и координатор всей деятельности ATMega128
  • VLSI — аудио — MP3 декодер
  • Display — дисплей от Nokia 3310
  • USB — UART <-> USB <-> Serial — конвертер
  • FPGA — программируемая логика Xilinx XC95144XL
  • RAM — 512 кБ SRAM от Samsung — K6X4008C1F.    
  • CF, IDE — Compact Flash и жесткий диск 2.5 дюйма

Многие спрашивают — почему CF а не SD или MMC. Отвечу:

  • во первых — у меня много халявных коннекторов именно для CF, а для SD/MMC их еще покупать надо.
  • во вторых — в плане программы, что CF что IDE, ничем не отличаются. Только адресом доступа (об этом позже), а для SD/MMC пришлось бы отдельный драйвер сочинять.

Начнем с простеньких блоков:

* Power —  блок питания. Питается от M-Bus коннектора, с которого мы получаем 12 вольт, и выдает 3.3 вольта для CPLD и VLSI MP3 декодера, и 5 вольт для всего остального. Построен на базе микросхемы LM2575 T-5 и линейного регулятора MC33275.

* Button — Обычный переключатель с фазовой кодировкой направления вращения и кнопкой.

*USB — Старый, добрый FTDI FT232BM USB-Serial конвертер.

*M-Bus — Тут уже интереснее. Сама линия данных — TTL 5 вольтовый сигнал. О самом протоколе будет отдельная статейка, я думаю. Так же есть сигнал ACC — когда ключ зажигания вставлен и повернут на одно деление. Тогда включается дополнительное оборудование. Этот сигнал — 12-ти вольтовый, поэтому пришлось поставить делитель:

Схема M-Bus коннектора

При этих параметрах сигнал из 12-ти вольт будет преобразован в сигнал в примерно 4.5 вольт. Если напряжение на входе скакнет до 16 вольт, то на выходе будут уже 5.5 вольт, что для микроконтроллера еще терпимо. Диоды, по идее, должны ограничивать такие скачки.

Зачем нужно смотреть нам на этот ACC сигнал? А за тем, что бы знать, когда не играть, а идти спать. Поскольку при вытаскивании ключа с включенной магнитолой на шине не происходит ничего особенного, что бы дало нам понять, что спать пора. Этот сигнал — единственное средство, что у нас есть, что бы отловить этот момент.

*Display, VLSI — там все по даташитам.

RAM'ом тоже интересно, потому как это аж 512 кБ памяти. Но по даташиту, ATMega 128 может переварить только 64 кб внешней памяти, да и то с определенными танцами с бубном, а так — всего 60 кб. Для этого у нас есть  СPLD, в которой и происходит весь процесс селектирования памяти по банкам. Один банк — 16384 байт. Всего 32 банка. Классно!

Схема управления банками памяти взята из проекта EtherNut. Но как-то мне кажется, что они там намутили немного, и теперь банк с номером 0 и банк с номером 31 являются одним и тем же банком. Я пока особо не разбирался с этим, просто исключил 31-й банк из списка используемых.

Селектор банков памяти в CPLD

*СF/IDE — Само подключение не вызывает особых вопросов. Вся сложность будет потом — в софте. Весь процесс доступа к карточке и к диску контролируется в CPLD'е. Для программы диск и карточка — это ни что иное, как адрес в памяти. CF находится по базовому адресу 0xD000, а жесткий диск — 0xF000. Значит, нам надо в CPLD уметь различать адреса. Это делает один файлик на VHDL'е — FPGA_IoControl_VHDL.Vhd (все исходники будут в конце статьи). Так же в CPLD'е просиходит процесс разбиения 16-ти битных данных в 8-ми битные при чтении и, наоборот, при записи 8-ми битных в 16-ти битные.

Data In and Out

Остались самые интересные блоки — CPLD (на схеме он FPGA называется) и CPU.

* Часть CPLD мы уже рассмотрели выше. А остальное можно поглядеть в исходниках. Скажу лишь только, что это опять же переделка готового проекта, и я старался как можно меньше менять в работающем проекте, поэтому там можно встретить некоторые ошметки от старого проекта — например, в старом проекте была статус-машина для доступа к WLAN-Карточке и организации задержек — тут же, я статус-машину убрал и просто выставляю сигналы без каких либо задержек, ну и т.д.

Так же в CPLD входит сигнал Clock от осциллятора на 32 MHz. И в самой CPLD я поставил элемент AND2, чтобы отключить прохождение CLK по всей CPLD, когда все спят. Это дает... не очень много, как ожидалось, всего около 1мА.

Clk Enable

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

* Ну и CPU. На схеме ничего примечательного нету, куча проводов, да кондериков. Самое интересное в нутри, т.е. в софте. А об этом будет следующая статья.

А пока список файлов, использованных в этой статье:

Оставить комментарий или два

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