17 апр. 2010 г.

Принципиальная схема стенда SDK1.1

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


Наше изучение схемы стенда, я начну с ее деления на структурные составляющие:


Рассмотрим эти составляющие более подробно. Одна из самых сложных частей - интерфейс процессора с памятью.



В силу того, что в SDK1.1 используется общая шина адреса-данных, мы вынуждены использовать защелки для передаваемого адреса ячейки - пара маленьких прямоугольных элементов посередине схемы. Вначале, мы используем шину, как шину адреса - передаем по ней адрес ячейки. Этот адрес мы запоминаем в защелках - специальных запоминающих элементах, по сигналу ALE с микроконтроллера. На следующем такте работы микроконтроллера мы используем шину, уже как шину данных - посылаем или передаем по ней информацию. При этом адрес, выставленный на адресных входах микросхемы остается неизменным - ведь на этом такте мы считываем его с защелок, а не с шины адреса/данных.
Стоит заметить, что в силу использования в стенде Гарвардской архитектуры, процессы чтения/записи из памяти команд и данных различаются. В случае чтения команд мы используем сигнал PSEN для сигнализации процесса начала чтения. Для адресации используется лишь два байта - мы используем просто 2 защелки.
Для сигнализации начала чтения данных используется сигнал RD. Для адресации используются уже три байта. Младший байт адреса передается через порт P0 - запоминается в верхней по схеме защелке. Старший байт запоминается в нижней по схеме защелке (через порт P2). Средний же байт передается через порт P2 уже после того, как два остальных байта "запомнились" в защелках.
Для записи информации в память данных используется сигнал WR; в память же команд писать нельзя.
Теперь рассмотрим ПЛИС и соответствующие ей выводы.

ПЛИС выбирается при выставлении сигнала #CS RAM/EPM (на второй защелке в схеме интерфейса памяти) - то есть при выборе восьмой страницы памяти. Регистры ПЛИС можно читать или писать через подсоединенную шину адреса/данных - видна на левой средней половине микросхемы на рисунке.Через эту же шину выставляется адрес используемого  регистра ПЛИС. Выводы ПЛИС в принципе соответствуют регистрам, которые расположены в ней - то что мы подаем на соответствующие вывода ПЛИС, отображается в соответствующих регистрах и наоборот.
Определенные выводы микросхемы подключены к внешнему разъему и к DIP-переключателям. Когда эти переключатели отключены, высокий уровень напряжения с +5V поступает на соответствующие выводы ПЛИС и в регистрах устанавливаются соответствующие значения. Когда же переключатели включены, высокий уровень напряжения с +5V идет на землю и на выводах ПЛИС мы получаем низкий уровень напряжения  - логический ноль.
Помимо всего прочего, на схеме виден разъем JTAG - через него производится прошивка ПЛИС: выпаивать каждый раз эту микросхему из платы для перепрошивки слишком накладно.
Логическую схему, которая прошита в ПЛИС, можно скачать здесь. В принципе, там все совсем тривиально - набор регистров и дешифратор адреса. Внимательно рассматривая схему можно обнаружить, что мы можем читать не из всех регистров ПЛИС - мы не можем читать из регистров ENA, C_IND и SV.
Следующая рассматриваемая схема - RS232 интерфейс:


Эта схема, в принципе, типична - присутствует оптическая развязка (KPC357), DC/DC-преобразователь (VA-0505S1) и основной элемент - драйвер RS-232 (ST202CD). Эта микросхема обеспечивает обмен последовательными данными с другим устройством через протокол RS-232 (в случае ПК используется COM порт). Данные преобразуются из параллельной формы в последовательную при помощи встроенного в ADuC812 UART-контроллера, драйвер же лишь преобразует сигнал выдаваемый UART'ом так, чтобы он соответствовал требования стандарта.
На схеме стенда можно заметить элементы (рядом с микроконтроллером) внешней EEPROM и часов реального времени - AT24C02A и PCF8583P соответственно. С микроконтроллером они общаются при помощи I2C..

В заключение, я выложу схему SDK1.1 и логическую схему внутри ПЛИС со своими комментариями и пометками - надеюсь они кому-нибудь помогут :-).
http://docs.google.com/leaf?id=0BwO0D4bM8z6vOWNlNDNlMDItOTViMS00YmRhLTg1YzMtNDdhNjQ4MTczZDUz&hl=ru