Страница 1 из 1

Потеря данных при обмене по rs-232

Добавлено: 19 мар 2014, 20:05
vladsleping
Всем привет!
Собственно, задачка с прежними условиями (ком-порт 8N1, без контроля четности, 115200 бод). Железка обменивается данными с ПК. Смотрим картинку обмена на логическом анализаторе. Данные выдаю кодограммами из 12 байт ( write (fd, buf,12) ).
Иногда возникает ситуация, что при выдаче от ПК кодограмма из нескольких байт разрывается на части, интервалы между частями кодограммы варьируются от 100 мкс до 1,5 мс (на картинке эти разрывы показаны красными стрелками). Сигнал RTS при этом живет своей жизнью и сбрасывается значительно раньше (сброс RTS показан синей стрелкой).
C чем такое может быть связано? Или такие разрывы правомерны в работе порта?

Изображение

Код: Выделить всё

	ioctl ( fd, TIOCMGET, &status ); 
	status = TIOCM_RTS;
	ioctl ( fd, TIOCMBIS, &status );
	ioctl ( fd, TIOCMGET, &status );
	
	while ( !(status&TIOCM_CTS) && (cntWr < 10) )
	{
		cntWr++;
		status = TIOCM_RTS;
		ioctl ( fd, TIOCMBIS, &status );
 		ioctl ( fd, TIOCMGET, &status );
	}
	if ( !(status&TIOCM_CTS) ) return 1;
	

	write ( fd, buf, len );


	do       
    {
    	ioctl ( fd, TIOCSERGETLSR, &status );
    } while ( !(status & TIOCSER_TEMT) ); 

	status |= TIOCM_RTS;
	ioctl ( fd, TIOCMBIC, &status );

Re: Потеря данных при обмене по rs-232

Добавлено: 19 мар 2014, 21:18
Olej
vladsleping писал(а): Собственно, задачка с прежними условиями (ком-порт 8N1, без контроля четности, 115200 бод).
Иногда возникает ситуация, что при выдаче от ПК кодограмма из нескольких байт разрывается на части, интервалы между частями кодограммы варьируются от 100 мкс до 1,5 мс (на картинке эти разрывы показаны красными стрелками). Сигнал RTS при этом живет своей жизнью и сбрасывается значительно раньше (сброс RTS показан синей стрелкой).
C чем такое может быть связано? Или такие разрывы правомерны в работе порта?
По самому поверхностному взгляду (может там что глубже есть):
- передача RS-232 на скорости 115200 синхронная
- RTS и вообще протокол подтверждений - это асинхроные протоколы обмена...
- они испоьзуются в RS-232 на более низких скоростях - на каких? это уже зависит от конкретных чипов, что-то мне помнится такая скорость как 38ххх максимальная для чипов, применимых в стандартных компьютерах лет 7 назад.

Сделайте то же, что делаете, только снизьте скорость до синхронной.

Если вы всмомните, то нуль-модемные кабели по RS-232 делались по а). 3-х проводной схеме, б). 5-ти проводной схеме, в). 7-проводной схеме. Так вот у вас обмен идёт как по 3-х проводной схеме, независимо от того, сколько вы там проводов напаяете. ;-)

Re: Потеря данных при обмене по rs-232

Добавлено: 31 мар 2014, 22:30
tundra37
Прогресс не стоит на месте. Скорость 38ххх взялась от медленности микропроцессоров - они не успевали обрабатывать прерывания :-)
Микросхема UART 16550 выпускавшаяся в 90-е уже имела буфер 16 байт и макс. скорость асинхронной (!) передачи 115 Кбит.
А вот 8250 или ее модификации имели синхронный режим со скоростью 115 кбит(может меньше).
Синхронные микросхемы называются USART