Zpozdeni na seriovem portu 16550A

Jan Kasprzak kas na informatics.muni.cz
Úterý Srpen 19 14:15:04 CEST 2003


	Dobry den,

mam zarizeni pripojene pres seriovy port (16550A), se kterym mi jest
komunikovati. Komunikace vypada tak, ze zarizeni posila urcite skupiny
bajtu (porad dokola) a kdyz chce neco pocitac, tak po skupine jistych ctyr
bajtu muze zacit vysilat. Problem je, ze mi to nefunguje (zarizeni se tvari,
jakoby od PC nic nedostalo). Zjistil jsem, ze zrejme je problem
v seriovem portu, ze se nekde neco bufferuje: pokud ve sve testovaci
aplikaci nejdriv zavolam

	system("setserial /dev/ttyS0 uart 16450");

tak to zacne fungovat. Pokud si pres gettimeofday() zjistuji, jak dlouho
trva nacteni konkretnich bajtu, tak s 16450 to vypada tak, ze bajty
prichazeji cca po 1ms (coz odpovida rychlosti 9600 bps) a v okamziku
kdy mam vysilat, je cca 20ms pauza. Zatimco pokud pres setserial
nastavim uart 16550A, tak prvni bajt prijde az treba po 10-20ms a dalsich
7 bajtu prijde po 9-11 mikrosekundach (cili jsou zrejme nekde nabufferovane).
Tim se asi pak stane, ze v okamziku, kdy se ke me dostane ten prislusny
blok dat, tak uz je pozde vysilat z me strany, protoze zarizeni uz zase
vysila dal.

	Zkousel jsem udelat "dirty trick", kdy po precteni prvnich tri
ze ctyr bajtu te synchronizacni sekvence zacnu natvrdo vysilat, a to
obcas projde i s 16550A. Ale je to nesystemove.

	Vite nekdo, jak v Linuxu vypnout FIFO na 16550A (nebo aspon
jak dosahnout toho, aby kdyz UART dostane nejaky bajt a nekdo na ten
bajt ceka (volam read(fd, buffer, 1), cili cekam jen na ten jeden bajt),
tak aby proste UART (nebo driver) ten bajt ihned predal?

	Tenhle problem jsem uz nekde videl, ale nemuzu se nejak
dogooglit jak se to presne resilo.

	Diky,

-Y.

-- 
| Jan "Yenya" Kasprzak  <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839      Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/   Czech Linux Homepage: http://www.linux.cz/ |
|  I actually have a lot of admiration and respect for the PATA knowledge  |
| embedded in drivers/ide. But I would never call it pretty:) -Jeff Garzik |


Další informace o konferenci Linux