Обмен данными с помощью COM XT порта
От: grizlyk1  
Дата: 31.12.22 08:12
Оценка: -3 :))
Сложно о простом: обмен данными с помощью COM XT порта.
Мы всегда придем на помощь если вам нечего почитать!

1.
Вступление.

И все таки, отвлекаясь от технических подробностей мелких конкретных вещей для мелких конкретных людей, посмотрите на всю большую картину в целом.

Посмотрите на картину мира в общем, смотря даже шире чем на карту СССР в 2022 (где восторжествовал режим рыночных нациоаналистов и с борящихся за свои свободы нациоанальностей были сброшены рабские оковы интернационализма), смотря даже шире чем чем на планету Земля (где во всех странах мира тоже восторжествовал режим рыночных нациоаналистов).

Вдумайтесь как это все грандиозно в масштабах Вселенной (где пока еще режим рыночных нациоаналистов всюду не восторжествовал):
— за 40 лет в мире число компьютеров типа IBM PC примерно равно числу людей на планете;
— на 90% из этих машин был установлен COM XT порт;
— но за 40 лет не было сделано протокола, по которому через такой COM XT порт можно было бы без проблем передавать данные.

И вот все люди планеты Земля 40 лет смотрят на этот COM XT порт, как поросята на закрытую задвижку в своей клетке в свинарнике, и никак не могут этот COM XT порт использовать. Такое явление безусловно имеет масштабы Вселенной.

1.1
Так и простоял COM XT порт в IBM PC 40 лет словно некий памятник; словно созданная мудрой деятельностью рыночных нациоаналистов огромная всемирная автомобильная пробка; словно созданные мудрой деятельностью рыночных нациоаналистов огромная толпа из 15 миллионов грязных и ленивых "чернокожих" нищих, бездомных и безработных в РФ и категорически не желающих при рыночных нациоаналистах выходить на работу и саботирующих экономику страны.

Пока наконец то консорциум Интел и Майкрософт административно не вмешался в этот хаос и не нормализовал обстановку, объявив этот COM XT порт устаревшим, предав COM XT порт анафеме и заменив его на современный коммуникационный порт универсальной шины USB, где для обмена данными вам надо только:
— разработать свое коммуникационное устройство;
— написать для вашего устройства свой драйвер для нужной вам версии ОС Windows, linux и т.п.;
— сертифицировать подлинность вашего драйвера Windows.

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

1.2
Перед такими эпохальными свершениями рыночного нациоанализма всегда просто захватывает дух! Большое видится на расстоянии. И мы видим что рыночный нациоанализм это реально, реально общество больших, просто огромных возможностей.

Это возможности ради которых рыночные нациоаналисты идут на большие жертвы:
— добровольно отказываясь от признания в обществе ценностей десяти христианских заповедей как образцов правильного поведения (запрет: убийств, краж, лжи, прелюбодейств и т.п.);

— добровольно отказываясь от равенства прав людей всех народов (равенство предоставляемое интернационализмом);

— добровольно отказываясь от гарантий работы, жилья, здравоохранения, образования и т.п. для каждого человека (гарантий предоставляемых плановой интернациональной экономикой);

— добровольно отказываясь от выплат пособий для нищих (ведь даже мощности плановой интернациональной экономики, способной пережить мировую войну, не хватает чтобы позволить себе платить пособия для всех нищих, заместо выплат пособий плановая интернациональная экономика предлагает полноценные рабочие места для каждого человека);

— добровольно отказываясь от выплат пенсий для инвалидов (это вообще паразиты на теле здоровой нациоанальности, они портят генофонд нациоанальности; хорошего солдата на войне не ранят, а только того кто не умеет окапываться; и хороший рабочий не получит увечий, а только тот кто не внимателен; а болеют только слабые);

— добровольно отказываясь от внутрипартийной демократии (ради эффективности даже рискуя одним махом потерять сразу всю страну из-за возможного захвата тоталитарной власти шпионами противника);

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


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

1.3
Пусть COM XT порт и не передает данные (да кому они нужны эти ваши данные! вы что "бакены телеметрии" будете устанавливать? страницу текста на старый принтер через COM XT порт вы можете легко распечатать, а что вам еще надо?), зато COM XT порт показывает нам большие возможности рыночного нациоанализма.

Понимаете, и для нас благодаря COM XT порту реальный пример больших возможностей 40 лет легко доступен для наблюдений.

1.4
Ну хорошо, посмеялись. А теперь от высоких тем вернемся к нашим низменным частным задачам.

2.
Интерфейс RS232.

Интерфейс RS232 вынуждает чтобы все принимающие RS232 устройства были "буферированы", а передача из нескольких символов шла пакетом любого формата для которого задан "максимальный размер MTU".

Существующий в IBM PC стандартный RS232 COM XT порт сделан так, что этот порт не имеет аппаратного буфера приемника размером MTU (локального буфера на плате порта или аппаратного ПДП), а все буферирование асинхронного ввода для COM XT порта достигается программно силами центрального процессора.

Для помощи этому программному буферированию, создатели COM XT порта ограничили максимально разрешенную скорость порта до 9600 бит/с и предположили что при этом при типовой работе IBM PC будет достаточно времени (примерно 1 мс), чтобы центральный процессор успел отреагировать на прерывание ввода от COM XT порта и записать в системную память данные ввода (программно выполнить ПДП) без переполнения аппаратного буфера ввода в UART.

При выводе данных с компьютера проблем с буферированием не возникает и поэтому многие полагают что COM XT порт реально был создан только для подключения принтера (т.е. предназначен только для вывода данных, как и стандартный порт LPT).

2.1
При работе ОС защищенного режима, можно пытаться гарантировать что при скорости 9600 бит/с, время отклика PL0 обработчика прервания для канала ввода UART (обработчика находящегося в коде ядра и выполняющего программный ПДП в ответ на сигнал INT, делая что то вроде эмуляции команды ESC сопроцессора), будет достаточно малым чтобы не возникло переполнение аппаратного буфера ввода в UART.

При работе ОС реального режима работоспособность ввода через COM XT порт уже зависит от ошибок в приложениях которые работают в данный момент.

При работе под эмулятором не помогает уже и ОС защищенного режима, поскольку гостевая ОС работает не в реальном времени (вся гостевая ОС вытесняется из кванта выполнения на процессоре хоста) и буферирование ввода через COM XT порт зависит от ошибок в реализации гостевого COM XT порта в самом эмуляторе.

2.2
Существующий эмулятор Virtual Box примерно 10 лет имеет ошибочную реализацию буферирования ввода через COM XT порт, не компенсирует тот факт что данные на гостевой COM XT порт эмулятора приходят в реальном времени, но сама гостевая ОС работает не в реальном времени.

Существующие популярные ОС защищенного режима примерно 30 лет не имеют драйверов ядра выполняющих программный ПДП на прерывание ввода от COM XT порта.

Существующие приложения реального режима сейчас не так актуальны, но они тоже часто препятствуют нормальной работе асинхронного ввода через COM XT порт, а особенно с расширителями памяти типа EMM386 или в защищенном режиме DPMI.

Гладко было на бумаге, но программное буферирование асинхронного ввода COM XT порта силами центрального процессора, в реальных условиях эксплуатации не работает.

Нам в конечном итоге надо обмениваться данными через COM XT порт, а не находить виновных в том что этого делать нельзя.

Вы наверняка сталкивались с тем как некоторые люди создают свои приложения, а потом составляют отчеты о том, что не работают библиотеки, компонеты и методы которые они сами использовали в этих приложениях (за исключением случаев когда для работы такого приложения действительно нужны ресурсы которых на данном компьютере нет). Ваши компоненты это только помощь вам, а не вид наказания для пользователя вашего приложения, использовав компонент вы берете на себя полную ответственность за приведение этих компонентов в работоспособное состояние наравне с кодом написанным лично вами. И если это компоненты такие что их лучше не использовать, то их и не надо использовать.

Другая наша задача, это увеличение скорости обмена данными через COM XT порт с 9600 до 115200 бит/с.

Ну и еще нам надо уметь вести обмен данными через COM XT порт под эмулятором (тут на скорость обмена влияет эмулятор).

2.3
Эти три задачи можно решить, если использовать для обмена через COM XT порт специальный протокол, в котором приемник "квитирует" каждый принятый символ (т.е. отправляет обратный сигнал ACK подтверждая что символ принят).

Этот способ гарантирует что передатчик не отправит новый символ, пока удаленный приемник не освободит свой буфер ввода в UART.

Квитированием достигается синхронизация работы передатчика и удаленного приемника, и такая синхронизация это типовой прием обмена данными для микропроцессорных шин (сигналы: READY, IO_CH_RDY и т.п.).

Таким новым протоколом мы заменяем стандартный RS232 "пакетный обмен с MTU" на "посимвольный обмен с квитированием передачи".

Концептуально работает такой протокол очень просто:
— послать символ
— дождаться квитка от удаленного приемника
— повторить цикл

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

2.4
COM XT порт сделан так неудачно, что обычные программисты не могут его использовать в своих обычных приложениях, т.к. не справляются с реализацией собственного протокола для обмена данными по COM XT порту, в том числе для обмена данными между двумя COM XT портами.

Поэтому создатели COM XT порта должны были еще в 1980 году сами:
— разработать протокол "обмена с квитированием передачи" через свой COM XT порт;
— создать сервис BIOS для реализации этого протокола;
— предоставить документацию к этому протоколу в "руководстве по программированию COM XT порта".

Сегодня мы займемся "исторической реконструкцией", сами разработаем вариант такого протокола обмена и создадим к нему документацию, которой надо было сопровождать COM XT порт еще в 1980 году.

2.4.1
А еще мы напишем примеры для проверки работы такого протокола под Virtual Box для ДОС, для minix и для win7. Подключим через такой протокол терминал minix, и будем передавать через такой протокол IPv4 пакеты для ftp и telnet.

И даже снимем пару видеокадров о том как это все работает.

2.5
Протокол А.

Содержание.
— Краткое описание протокола А.
— Приложение 1: История появления протокола А.
— Приложение 2: Особенности программирования UART 8250.
— Приложение 3: Использование в RS232 дополнительной линии связи RTS->СTS.
— Приложение 4: Примеры программ реализации протокола А.
— Приложение 5: Видеоклипы с работой программ протокола А.

Все части продолжения скачать одним файлом (текст + исходники): protocol_A_v1_r221231.zip

Два видео скачать:
Протокол А, тестирование, часть 1
Протокол А, тестирование, часть 2

==
serialport uart minix dos virtualbox pipe slip ttyp
Re: Обмен данными с помощью COM XT порта
От: vsb Казахстан  
Дата: 31.12.22 08:32
Оценка:
Здравствуйте, grizlyk1, Вы писали:

G>- но за 40 лет не было сделано протокола, по которому через такой COM XT порт можно было бы без проблем передавать данные.


А гипертерминалом разве нельзя?
Re: Обмен данными с помощью COM XT порта
От: m2user  
Дата: 31.12.22 10:45
Оценка:
Это продолжение темы http://rsdn.org/forum/cpp.applied/8399262.1
Автор: grizlyk1
Дата: 01.11.22
(Обмен данными между "Virtualbox guest OS COM port" and "Wind) ?

В кратце проблема в том, что есть VirtualBox отображающий гостевые UART 8250 порты на Windows хосте как "//./pipe" и VirtualBox работает как сервер для "//./pipe". На клиентской стороне такие порты могут быть открыты через такой простой интерфейс как <stdio> (что очень привлекательно).

Re: Обмен данными с помощью COM XT порта
От: Baiker  
Дата: 31.12.22 11:11
Оценка: +1
Здравствуйте, grizlyk1, Вы писали:

G>Сложно о простом:


Давайте уже импортозаместим буржуйское TL;DR на скрепное "Словесный Понос; Дальше не Читал".
Re: Обмен данными с помощью COM XT порта
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 01.01.23 06:16
Оценка: +3
Здравствуйте, grizlyk1, Вы писали:

G>- на 90% из этих машин был установлен COM XT порт;


На 99% выживших машин с компортом установлен клон 16550A, умеющий, в частности, FIFO буфер на 16 байт.
Для тех, где нет сейчас порта, есть USB-COM переходники с таким же буфером.
Где и зачем вы взяли оригинальную XT и вспоминаете её — непонятно.

G>Существующий в IBM PC стандартный RS232 COM XT порт сделан так, что этот порт не имеет аппаратного буфера приемника размером MTU (локального буфера на плате порта или аппаратного ПДП), а все буферирование асинхронного ввода для COM XT порта достигается программно силами центрального процессора.


То есть про FIFO вы не в курсе.

G>Существующие популярные ОС защищенного режима примерно 30 лет не имеют драйверов ядра выполняющих программный ПДП на прерывание ввода от COM XT порта.


Значит, платы "мультипортовки" от Moxa, Digiboard, Cyclades, нескольких других — мне приснились. Запомним.

G>Другая наша задача, это увеличение скорости обмена данными через COM XT порт с 9600 до 115200 бит/с.


Уже в 2000 реализация была вылизана до блеска.

G>Эти три задачи можно решить, если использовать для обмена через COM XT порт специальный протокол, в котором приемник "квитирует" каждый принятый символ (т.е. отправляет обратный сигнал ACK подтверждая что символ принят).


Это реализовано ещё с 1970-х для параллельного порта. В IBM PC зовётся "режим SPP".
Но даже на нём, подобрав безопасную скорость, стали делать EPP и ECP, у которых не требуется квитирование каждого байта.

G>COM XT порт сделан так неудачно, что обычные программисты не могут его использовать в своих обычных приложениях, т.к. не справляются с реализацией собственного протокола для обмена данными по COM XT порту, в том числе для обмена данными между двумя COM XT портами.


Давно справились.

G>А еще мы напишем примеры для проверки работы такого протокола под Virtual Box для ДОС, для minix и для win7. Подключим через такой протокол терминал minix, и будем передавать через такой протокол IPv4 пакеты для ftp и telnet.


"Мне триста лет, я выполз из тьмы" (c)
The God is real, unless declared integer.
Re: Обмен данными с помощью COM XT порта
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.01.23 00:27
Оценка:
Здравствуйте, grizlyk1, Вы писали:

G>Сложно о простом: обмен данными с помощью COM XT порта.

G>Мы всегда придем на помощь если вам нечего почитать!

Давным давно он используется для подключения терминалов, мышей, модемом, объединения двух компьютеров в сеть с помощью SLIP или PPP, подключения всякого разного оборудования.

В PC он всегда умел скорости до 115200. Встроенный буфер, по какому-то разумению, появился не сразу, но довольно давно появился.

Раньше стандартная мышка втыкалась в COM-порт, и, тем самым, он всегда был задействован. С тех пор, как COM-портовые мыши были вытеснены USB-ными, жадные производители материнских плат сочли его устаревшим и постепенно перестали делать, к расстройству программистов embedded систем, для которых COM-порт в рабочем компутере — это простой и надежный способ организовать консольку отлаживаемой системе.

Не говори больше с видом знатока о том, чего не знаешь.
Re[2]: Обмен данными с помощью COM XT порта
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.01.23 08:09
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, grizlyk1, Вы писали:


G>>Сложно о простом: обмен данными с помощью COM XT порта.

G>>Мы всегда придем на помощь если вам нечего почитать!


Pzz>Давным давно он используется для подключения терминалов, мышей, модемом, объединения двух компьютеров в сеть с помощью SLIP или PPP, подключения всякого разного оборудования.

[...]

Pzz>Не говори больше с видом знатока о том, чего не знаешь.


Так ты о нормальном RS232 говоришь, а ТС и комментатор о загадочной химере, которую ТС сам изобрёл и назвал "COM XT порт"
The God is real, unless declared integer.
Re[3]: Обмен данными с помощью COM XT порта
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.01.23 08:10
Оценка:
Здравствуйте, netch80, Вы писали:

N>Так ты о нормальном RS232 говоришь, а ТС и комментатор о загадочной химере, которую ТС сам изобрёл и назвал "COM XT порт"


Ну он, наверное, тоже про RS232 говорит. Только почему-то называет его каким-то непонятным именем.
Re[2]: Обмен данными с помощью COM XT порта
От: Anton Batenev Россия https://github.com/abbat
Дата: 05.01.23 08:58
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz> к расстройству программистов embedded систем, для которых COM-порт в рабочем компутере — это простой и надежный способ организовать консольку отлаживаемой системе.


А всякие переходники USB-TTL (UART) не спасают?
Re[3]: Обмен данными с помощью COM XT порта
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.01.23 09:06
Оценка: 1 (1)
Здравствуйте, Anton Batenev, Вы писали:

Pzz>> к расстройству программистов embedded систем, для которых COM-порт в рабочем компутере — это простой и надежный способ организовать консольку отлаживаемой системе.


AB>А всякие переходники USB-TTL (UART) не спасают?


У них возможности похуже. Например, есть подход строить I2C/JTAG/etc. на сигнальных линиях (DTR, RTS...) На локально подключенном порту можно выходить на хорошие скорости, а с 1 мс реакцией USB получается зверски медленно. Передавать же историю изменения на линии вместо голого уровня ни один не делает.
Получать event по изменению входной линии тоже не каждый драйвер умеет.
Я понимаю, что это за пределами обычного стиля использования, но ведь законно...
The God is real, unless declared integer.
Re[3]: Обмен данными с помощью COM XT порта
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.01.23 13:28
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

Pzz>> к расстройству программистов embedded систем, для которых COM-порт в рабочем компутере — это простой и надежный способ организовать консольку отлаживаемой системе.


AB>А всякие переходники USB-TTL (UART) не спасают?


Ну, когда я всем этим активно занимался, качество их вызывало сомнение, и я на всяк случай подсуетился, и обзавелся материнкой, одной из последних, с настоящими COM-портами.

Сейчас, наверное, все это более-менее наладилось, но я давно уж эмбедщиной не занимаюсь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.