пояснительная записка (1231539), страница 6
Текст из файла (страница 6)
Управлять платой можно с помощью специально написанного в среде программирования Delphi 7софта.
2.6.1 Программа для работы с макетной платы LPT-КР580ВВ55А
Организация ввода\вывода через LPT-порт через стандартный драйвер операционной системы затруднителен, и требует поддержки стандарта IEEE 1284 внешним устройством, который не реализован на полученной макетной плате. Поэтому была использована библиотека inpout32.dll, которая позволяет организовать ввод/вывод через системную шину в обход системного драйвера. Эта библиотека содержит две основные функции:
-
Inp32(PortAdr: word): byte;
-
Out32(PortAdr: word; Data: byte): byte.
Подключение библиотеки к Delphi 7 осуществляется размещением прототипов функций в секции uses следующих строк:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
function Inp32(PortAdr: word): byte; stdcall; external 'inpout32.dll';
function Out32(PortAdr: word; Data: byte): byte; stdcall; external 'inpout32.dll';
Ввода/вывод информации в регистры порта можно выполнять с помощью этих функций. Окно программы имеет вид, показанный на рисунке 2.1.
Можно увидеть, что в центре окна расположена схема формата настройки управляющего слова для программирования микросхемы. Процедура, вызываемая нажатием левой кнопкой мыши кнопки RoCW реализует алгоритм записи настроенного управляющего слова в РУС.
procedure TForm1.btn1Click(Sender: TObject);
begin
…
out32($378,Byte(RUS)) ;
Contr:=Contr-[0]-[1]+[2]-[3]; sleep(10);
out32($37A,Byte(Contr-[2])) ; sleep(10);
out32($37A,Byte(Contr+[2])) ;
...
end;
Рисунок 2.1 - Окно программы управления макетной платы
LPT-КР580ВВ55А
Слева внизу находится панель ручного управления сигналами A0, A1, WR, RD, и по нажатию кнопки OUT 37A выбранная комбинация выводится в регистр контроля LPT-порта.
Панель D0..D7 выводит данные в линию данных в реальном времени.
Справа внизу расположены три кнопки port_A, port_B, port_C, которые реализуют алгоритм ввода/вывода данных в зависимости от состояния Checkbox IN_A, IN_B, IN_C. Если он отмечен галочкой, то реализуется процедура ввода с соответствующего порта, если нет – вывода на него. Информация о последней операции с портом находится над этими кнопками.
procedure TForm1.port_AClick(Sender: TObject);
var
Data_: Byte;
begin
if IN_A.Checked then
begin
Contr:=Contr+[0]+[1]+[2]-[3]+[5]; //пятый бит CR установит в 1
out32($37A,Byte(Contr+[3])); //установка RD в 0
Data_:= Inp32($378); //чтение данных с порта
lbl2.Caption:='IN Port_A - '+IntToHex(byte(Data_),2)+'h';
out32($37A,Byte(Contr-[3])); //установка RD в 1
end
else
begin
Contr:=Contr+[0]+[1]+[2]-[3]-[5]; //пятый бит CR установит в 0
DATA:=[0,1,2,3,4,5,6,7];
IF che0.Checked then DATA:=DATA+[0] else DATA:=DATA-[0] ;
IF che1.Checked then DATA:=DATA+[1] else DATA:=DATA-[1] ;
IF che2.Checked then DATA:=DATA+[2] else DATA:=DATA-[2] ;
IF che3.Checked then DATA:=DATA+[3] else DATA:=DATA-[3] ;
IF che4.Checked then DATA:=DATA+[4] else DATA:=DATA-[4] ;
IF che5.Checked then DATA:=DATA+[5] else DATA:=DATA-[5] ;
IF che6.Checked then DATA:=DATA+[6] else DATA:=DATA-[6] ;
IF che7.Checked then DATA:=DATA+[7] else DATA:=DATA-[7] ;
out32($378,Byte(DATA)); //вывод данных в шину данных
out32($37A,Byte(Contr-[2])); //установка WR в 0
out32($37A,Byte(Contr+[2])); //установка WR в 1
lbl2.Caption:='OUT Port_A - '+IntToHex(byte(Data),2)+'h';
end;
end;
2.7 USB протокол
Топология сети USB – древовидная, причём в каждом узле так называемого дерева находиться хаб, а в основании – корневой хаб. Схемотехника и программное обеспечение сети USB поддерживает горячее подключение и отлучение периферийных устройств без её повреждения, причём мастер способен автоматически в реальном времени определить факт подключения или отключения устройств. С учетом того, что мастер питает всю сеть, он контролирует энергопотребление всех её компонентов, и на основании информации, получаемой при опросе устройств об их потребностях, мастер может запретить работу некоторых, во избежание перегрузки.
2.7.1 Физический уровень
Линия связи в USB кабеле представлена в виде витой пары с импедансом 90 Ом.
Упрощенная электрическая схема USB соединения показана на листе 4 графического материала. Когда к хосту никто не подключен, обе сигнальные линии D+ и D- подтянуты резисторами 15 кОм к минусу питания. При подключении устройства одна из линий подтягивается к +3,3 В через резистор 1,5 кОм. Устройства Low Speed подтягивают линию D-, а устройства Full Speed - D+. Таким образом хост определяет факт подключения и тип подключенного устройства. Устройства High Speed в момент подключения работают как Full Speed, переключаясь в высокоскоростной режим после обмена «визитками».
Состояние дифпары, определенное резисторами подтяжки, в спецификации именуется Idle. При включенном драйвере обозначается буквой J (Jamp), а противоположное ему состояние - буквой K (Kill). Замыкание обеих линий на минус именуется Single Ended 0 (SE0), замыкание на плюс - SE1.
Данные кодируются по методу Non-return-to-zero inverted (NRZI). Этот метод предполагает изменение состояния дифпары (J→K или K→J) при нулевом бите, и отсутствие такого изменения - при единичном, с применением битстаффинга. Битстаффинг – принудительное добавление в поток данных нуля, на каждые шесть единиц подряд, применяется для исключения потери синхронизации на длительных единичных последовательностях.
Состояние шины SE0 дольше 10 мс трактуется устройством как сброс (Reset) и требует от устройства реинициализации USB стека. Состояние Idle дольше 3 мс подряд трактуется устройством как останов шины (Suspend) и формально требует от устройства самоограничения в потреблении электроэнергии от шины USB. Выход из Suspend происходит либо по возобновлению активности хоста, либо устройство может, при необходимости, подать специальный сигнал Resume. Сигнал Resume состоит из состояния K на несколько миллисекунд, завершаемое последовательностью SE0,SE0,J, где каждое состояние длится один битовый интервал согласно скоростному режиму устройства.
2.7.2 Общая структура физического уровня.
Физический уровень USB 1.1. состоит из двух драйверов и физической среды (кабеля) между ними, организуя полудуплексную передачу информации. Драйверы физического уровня не симметричны и разделяются на два типа [6]:
- downstream (внизпередающий) – ведущий драйвер, определяет кто, когда и сколько будет передавать данных в линию связи. Всегда генерирует информацию от хоста, так как установлены в нём или внизпередающем порту хаба;
- upstream (вверхпередающий) – ведомый драйвер, генерирует информационный сигнал в направлении хоста в порядке, установленном ведущим драйвером. Устанавливаются в устройствах и верхпередающих портах хаба. Между Full Speed и Low Speed драйверами есть некие физические различия.
В сети USB невозможно связать драйвера одного типа, так как они не симметричны, то есть нельзя соединить два хоста между собой, так как топология сети USB предполагает наличие лишь одного. В связи с этим и кабель имеет разъём серии А со стороны downstream, и серии B – со стороны upstream.
2.7.3 Устройство драйверов
На листе 4 графического материала представлена структура физического уровня downstream драйвера USB 1.1. Аппаратно downstream драйвер состоит из: контроллера, кодера, декодера, генератора, дифференциального и линейных приёмников, подтягивающих резисторов и источника питания [7].
2.7.3.1 Контроллер драйвера
Генерирующая и приёмная часть драйвера через системную шину с программным уровнем хоста соединена контроллером.
Так как весь передаваемый пакет может быть сформирован программным уровнем, то аппаратная реализации контроллера не сложна.
2.7.3.2 Кодер NRZI
Кодирование методом NRZI реализовано с помощью JK-триггера. Алгоритм NRZI кодирования заключается в изменении полярности сигнальной линии при передаче нуля, и сохранении полярности предыдущего символа при передаче единицы. Full Speed и Low Speed кодирование осуществляется разнополярными выходами кодера. Использование NRZI кодирования позволяет сократить число синхробитов, вставляемых в пакет данных.
2.7.3.3 Декодер
Преобразует закодированные методом NRZI к начальному виду и выделяет синхросигнал из принимаемых данных.
2.7.3.4 Генератор
Генератор передает в линию связи дифференциальные нули и единицы.
Сигналом OE генератор отключается от линии связи и не влияет на её работу.
Для сброса шины сигналом SEO генератор может замыкать линию связи на общий провод.
Параметры генератора:
-
ЭДС генератора составляет +3,6 В;
-
внутреннее сопротивление – 56…88 Ом;
-
линейное напряжение низкого уровня при нагрузке 1,5 кОм, подключенной к +3,6 В – не более +0,3 В;
-
высокого уровня, при нагрузке 15 кОм, подключенной к GND – не менее +2,8 В.
2.7.3.5 Дифференциальный приёмник
Определяет два состояния: дифференциальный «0» и дифференциальную «1» путём измерения напряжения дифференциальной пары.
Параметры дифференциального приемника:
-
Чувствительность приёмника должна быть не ниже VDI= 200 мВ;
-
Дифференциальная «1»: Vdi > +200 мВ (Vd+ > Vd- более чем на 200 мВ в диапазоне линейного напряжения 0,8..2,5 В);
-
Дифференциальный «0»: Vdi < -200 мВ (Vd- > Vd+ более чем на 200 мВ в диапазоне линейного напряжения 0,8..2,5 В).
2.7.3.6 Линейные приемники
Состояние линии связи определяется комбинацией линейных напряжений и временем их удержания, в результате чего USB порт может определять несколько состояний линии связи без дополнительных сигналов.
Параметры:
-
напряжение Vd+ или Vd- низкого уровня «0» - не более +0.8 В;
-
напряжение Vd+ или Vd- высокого уровня «1» - не менее +2.0 В.
Напряжения Vd+ или Vd- могут опускаться ниже, без фиксирования состояния SE0, на время не более 14 нс для Full Speed, и 210 нс – для Low Speed.
2.7.3.7 Подтягивающие резисторы
При подключении/отключении к порту Downstream Upstream устройств они идентифицируются подтягивающими резисторами. Для Downstream Vd+ и Vd- подтягиваются к низкому уровню (GND) резисторами 15 кОм.
Для Upstream Full Speed Vd+ подтягивают к высокому уровню (3.0...3.6 В) резистором 1,5 кОм.
Для Upstream Low Speed Vd- подтягивают к высокому уровню (3.0...3.6 В) резистором 1,5 кОм.
2.7.3.8 Источник питания
Напряжение источника питания USB должно находиться в пределах +5 В +/-5%.
Поп питанию USB порты бывают High-Power port (сильный питающий порт) и Low-Power port (слабый питающий порт), первый может обеспечить ток более 5 модульных нагрузок (одна модульная нагрузка равна 100 мА), то есть более 500 мА, мощность такого порта ограничивается мощностью блока питания, второй же должен обеспечивать минимум одну модульную нагрузку, и максимум – пять.
2.7.4 Структура пакетов
Обмен происходит короткими пакетами. Каждый пакет начинается с последовательности Start of Packet, для Low и Full Speed это KJKJKJKK. Далее всегда идет специальный идентификатор пакета PID (англ. Packet IDentifier), указывающий на тип пакета. Всего имеется 16 разных типов пакетов, поэтому PID имеет размерность 4 бита. Однако для надежности значение этого поля дублируется в инверсном виде, поэтому длина поля PID в пакете 8 бит. Заканчивается пакет последовательностью End of Packet (EoP): SE0,SE0,J. Минимальный межпакетный интервал ~0,1 мкс (для Full Speed).
В зависимости от типа пакета между PID и EoP может содержаться ряд других полей с параметрами пакета и/или данными. Все эти поля (включая PID) передаются младшим битом вперед (LSB first) [7].
2.7.5 Типы пакетов USB
Token Packets(TP) - маркерный пакет.
Этот пакет всегда посылается хостом и является заголовком транзакции, т.е. определяет кому и как будет передаваться информация в следующем пакете.
Структура пакетов транзакций USB представлена на листе 4 графического материала.
ADDR - число 1..127 -адрес устройства с которым будет работать хост в текущей транзакции;