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

В подобных принципиальных схемах в принципе нет ничего сложного — достаточно знать схемотехнику на уровне регистров, триггеров и иметь базовую информацию о том, что такое ПЛИС. Ничего страшного…​

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

SDK11 circuit diagram structure

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

CPU2RAM interface

В силу того, что в SDK1.1 используется общая шина адреса-данных, мы вынуждены использовать защелки для передаваемого адреса ячейки — пара маленьких прямоугольных элементов посередине схемы. Вначале, мы используем шину, как шину адреса — передаем по ней адрес ячейки. Этот адрес мы запоминаем в защелках — специальных запоминающих элементах, по сигналу ALE с микроконтроллера. На следующем такте работы микроконтроллера мы используем шину, уже как шину данных — посылаем или передаем по ней информацию. При этом адрес, выставленный на адресных входах микросхемы остается неизменным — ведь на этом такте мы считываем его с защелок, а не с шины адреса/данных.

Стоит заметить, что в силу использования в стенде Гарвардской архитектуры, процессы чтения/записи из памяти команд и данных различаются. В случае чтения команд мы используем сигнал PSEN для сигнализации процесса начала чтения. Для адресации используется лишь два байта — мы используем просто 2 защелки.

Для сигнализации начала чтения данных используется сигнал RD. Для адресации используются уже три байта. Младший байт адреса передается через порт P0 — запоминается в верхней по схеме защелке. Старший байт запоминается в нижней по схеме защелке (через порт P2). Средний же байт передается через порт P2 уже после того, как два остальных байта "запомнились" в защелках.

Для записи информации в память данных используется сигнал WR; в память же команд писать нельзя.

Теперь рассмотрим ПЛИС и соответствующие ей выводы.

ПЛИС

ПЛИС выбирается при выставлении сигнала #CS RAM/EPM (на второй защелке в схеме интерфейса памяти) — то есть при выборе восьмой страницы памяти. Регистры ПЛИС можно читать или писать через подсоединенную шину адреса/данных — видна на левой средней половине микросхемы на рисунке. Через эту же шину выставляется адрес используемого регистра ПЛИС. Выводы ПЛИС в принципе соответствуют регистрам, которые расположены в ней — то что мы подаем на соответствующие вывода ПЛИС, отображается в соответствующих регистрах и наоборот.

Определенные выводы микросхемы подключены к внешнему разъему и к DIP-переключателям. Когда эти переключатели отключены, высокий уровень напряжения с +5V поступает на соответствующие выводы ПЛИС и в регистрах устанавливаются соответствующие значения. Когда же переключатели включены, высокий уровень напряжения с +5V идет на землю и на выводах ПЛИС мы получаем низкий уровень напряжения — логический ноль.

Помимо всего прочего, на схеме виден разъем JTAG — через него производится прошивка ПЛИС: выпаивать каждый раз эту микросхему из платы для перепрошивки слишком накладно.

Логическую схему, которая прошита в ПЛИС, можно скачать здесь. В принципе, там все совсем тривиально — набор регистров и дешифратор адреса. Внимательно рассматривая схему можно обнаружить, что мы можем читать не из всех регистров ПЛИС — мы не можем читать из регистров ENA, C_IND и SV.

Следующая рассматриваемая схема - RS232 интерфейс:

RS232 Interface

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

На схеме стенда можно заметить элементы (рядом с микроконтроллером) внешней EEPROM и часов реального времени — AT24C02A и PCF8583P соответственно. С микроконтроллером они общаются при помощи I2C.

В заключение, я выложу схему SDK1.1 и логическую схему внутри ПЛИС со своими комментариями и пометками - надеюсь они кому-нибудь помогут :-).

sdk