Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];

Вниз

Serial port & nine-bit @NT   Найти похожие ветки 

 
Gepard   (2003-08-08 11:56) [0]

Господа! Кто-то работал под NT с Com-портом в режиме "с 9 битом"?
Поделитесь опытом


 
Verg   (2003-08-09 12:06) [1]

На x86C18(6/8)xx - это бывает, а... NT тут при чем?


 
Verg   (2003-08-09 12:09) [2]

Я понфл, что речь идет о ...:

10.1.1.4. Mode 2

Asynchronous Mode 2 is referred to as the "address recognition mode." Mode 2 is used together with Mode 3 for multiprocessor communications over a common serial
link.

In Mode 2, the RX machine will not complete a reception unless the ninth data bit is a one. Any character received with the ninth bit equal to zero will be ignored. No flags
will be set, no interrupts will occur and no data will be transferred to RxBUF. In mode 3, characters will be received regardless of the state of the ninth data bit. The
following is brief example of using modes 2 and 3. See the example in Section 10.5 for more information.

Assume one master serial port connects to multiple slave serial ports over a serial link. The slaves are initially in Mode 2 and the master is always in Mode 3. The
master communicates with one slave at a time. The CPU overhead of the serial communications only burdens the master and the target slave device.



1. The master transmits the "address" of the target slave over the serial link with the ninth bit set.
2. All slaves receive that character and check to see if the address is theirs.
3. The target slave switches to Mode 3 and all other slaves remain in Mode 2.
4. The master and target slave continue the communication with all ninth data bits equal to 0. The other slave devices ignore the activity on the serial link.
5. At the end of the communication, the target slave switches back to mode 2 and waits for another address.



The parity feature cannot be used when implementing multiprocessor communications with Modes 2 and 3 as the ninth data bit a control bit and cannot be used as the
parity bit.



 
Gepard   (2003-08-11 10:45) [3]

Все это прекрасно и верно :)
Обрисую ситуацию: PC - это мастер в сети, к его COM-порту подключены по 485 интерфейсу несколько Slave-устройств(на базе микроконтроллеров).
Так вот вся трудность в программной реализации передачи первого(адресного) байта с выставленным девятым битом, а по окончании его передачи (физической передачи UARTом) остальные байты передавать без девятого.
Проблемы две - момент окончания передачи и, применительно к 485 интерфейсу, образмеривание передаваемых пакетов сигналами RTS(DTR) для переключения интерфейса на передачу. Хотелось бы обойтись API и без third-party драйверов


 
Verg   (2003-08-11 12:02) [4]

В чистом виде com порт PC не поддерживает режим "адресной девятки". Т.е. вообще не предусмотрен. Поиграть можно паритетным битом. Раздай такие адреса slave-ам, которые в паритете будут содержать 1-ку. Между адресным (с паритетом) байтом и остальными (информационными) переключай режим порта на беспаритетный (паритет = 0). (Например)


 
Verg   (2003-08-11 12:14) [5]


> образмеривание передаваемых пакетов сигналами RTS(DTR) для
> переключения интерфейса на передачу.


На счет этого у драйвер порта есть режим:

fRtsControl

Specifies the RTS (request-to-send) flow control. If this value is zero, the default is RTS_CONTROL_HANDSHAKE. This member can be one of the following values:

Value Meaning
....
RTS_CONTROL_TOGGLE Specifies that the RTS line will be high if bytes are available for transmission. After all buffered bytes have been sent, the RTS line will be low.

Кстати, если в порту соединить проводком RTS и CTS, то по событию пропажи CTS (см. WaitCommEvent) можно достаточно точно определить конец передачи.


 
Gepard   (2003-08-12 12:21) [6]

Самое печальное то, что есть два неприятных момента:
1) если использовать fRtsControl, то "образмеривание" RTSом происходит поганенько(довольно долго и гуляет длительность)
2) для моего железа не подходит(необходимо инверсный) уровень RTS

Посему решил попробовать вульгарный метод - с помощью драйверка разрешил писать в порты и работаю асмом (OUT/IN). Правда, с приемом нужно повозиться, но, думаю, FIFO приемника позволит без потерь принимать. Пока на стадии тестирования :)

На самом деле, это большой геморрой - закос PC под микроконтроллер да и еще под NT. Идет против всей идеологии :)


 
Verg   (2003-08-12 12:35) [7]


> с помощью драйверка разрешил писать в порты и работаю асмом
>


УУУУУУУУУууууууу......!

> Правда, с приемом нужно повозиться, но, думаю, FIFO приемника
> позволит без потерь принимать. Пока на стадии тестирования
> :)

При определенных условиях, выполнение которых тебе ни кто не сможет гарантировать (система не раельного времени).

Знаешь, проще сделать адаптер Pc/com-Master/Slave на какой-нибудь плюгавинькой pic-е, или z-ке, питающейса от того же com-а. Заодно получишь свой "Hasp" :))



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
1-74310
Besarion
2003-10-12 02:30
2003.10.23
Проблема с очисткой памяти


7-74484
Gepard
2003-08-08 11:56
2003.10.23
Serial port & nine-bit @NT


14-74428
ИМХО
2003-10-06 16:05
2003.10.23
Теория DBF


8-74335
Rust
2003-06-18 21:29
2003.10.23
JPEG


14-74455
Tahion2
2003-09-21 08:57
2003.10.23
Посоветойте Label с возможностью выравн. по ширине





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский