Putty serial

Fórumok

Sziasztok!

Putty soros port segítségével adatot dumpolok: egérrel copy -> putty paste.
Az adat hexa értékeket tartalmazó, sorvégjellel (CR) lezárt változó hosszúságú (3..10 karakter) text sorokból áll. A sorok száma több ezer is lehet.

Az adatok nagyon lassan haladtak át a soros vonalon, ezért megnéztem mi is történik.
Az egyes sorok között érthetetlen módon véletlenszerűen 7..150ms szünetet látok. Nagy scroll buffert használtam, de ennek a változtatása sem adott más eredményt. A pontos protokoll 19200 8N1 xon/xoff, - de xon/xoff sem fordult elő az átvitel közben.

Ugyanez más terminál programmal képes teljes sebességgel működni.
Tud e valaki megoldást?

További antipozitív eredmény:
Az ellenállomás az echo kikapcsolása után a sorok között a szünet fix ~460ms értékre áll be.
Abszolút használhatatlan. :(

Hozzászólások

Minek a soros portjára írsz? Más progi talán nem veszi figyelembe a handshake-et, ha van.

Fordítva kell nézni! A putty dumpol(-na), ha nem állna meg közben. Ahhoz, hogy jogosan megálljon a vevőnek kellene xoff-ot adnia. De nem ad. Tehát a putty szünetelteti az adást a leírt intervallumra, azaz valamin gondolkodik.

A fizikai kapcsolat valódi soros port, az ellenség pedig egy pic18f14k22. A programot én írtam. A vevő buffer 16 karakter, a high watermark ugyan 12 karakter, de a karaktert vétel után 3.75..15us alatt feldolgozza. (Megmértem.) Mivel 19200 baud esetén a bit ideje ~53us, nyugodtan állíthatom, hogy a bufferben nagy ritkán előfordul egy-egy karakter. ;) Tehát xoff soha.

Ha a fentieket nem tudnánk, akkor is látnám az xoff-ot, mivel logikai analizátorral rögzítem a forgalmat.
Szóval, ha másik terminál emulátor működik teljes sebességgel, akkor a putty a ludas. Lecserélni meg nem szeretném megszokás, illetve egyéb paraméterezhetősege miatt.

Linux alól ser2net proxy nem jobb lenne neked?

Nem rossz ötlet! ;)
Szóval telneteljek be a saját gépemre(Windows XP), hogy a saját gépemen található soros portra kopipészteljek egy text filét? Ez azért nem ennyire bonyolult. Inkább írtam egy programot, amelynek a közepében kb. ilyen van:

Inchars=read(STDIN_FILENO, Buffer, sizeof(Buffer));
write(comport,Buffer,Inchars);

Használata:

sercopy /dev/ttyS0 < InputFile

Persze mindez cygwin alatt.
A sebesség 1918 char/s 19200baud esetén, az átvitel hibátlan.
Persze a java egyszerűbb lenne. :)))

Ha ez ennyire egyszerűen megoldható, akkor én egy két soros shell scriptet írnék:
- setserial --> sorosporti paraméterek beállítása
- cp --> másolás

Tudom, nem teljesen kerek, mert nincs lock ellenőrzés és a lockfile sem jön létre. Mondjuk úgy: lehet még csicsázni a scriptet! :-)

Ez tényleg jó, de... ;)
A két megoldás teljesen egyenértékű. Amivel nem szeretek foglalkozni az a cygwin-windows side effectek halmaza. A feladat lényege, hogy a szoftverfejlesztő kezébe kell adnom az inputokat (adatok, programok) és egy kőbaltát, amivel ezeket eljuttatja (akár Windows 10 alatt is!) a mikrokontrollerhez. A kopipészt egyszerűnek tűnt, de nem jött össze. A putty konfigurációs lehetőségeit is felhasználtam a kommunikáció megvalósításához, mert a mikrokontrollerre teszteléskor terminállal is lehet csatlakozni.
Az adatok betöltése mellett az automatikus formátum felismerés is bekerült a programba. Ha meg véletlenül a putty is kapcsolódik a portra, akkor úgy sem lehet megnyitni, tehát ezt is lekezei.
A script se lenne bonyolult, ha AIX vagy linux alatt írnám, de cygwin esetén az a biztos, ha shellt sem indítok. Különösen text feldolgozás esetén. :(