Någon som kan linux eller förstår rs232?
Någon som kan linux eller förstår rs232?
Jag försöker läsa från serieporten på min dator i linux med commandot cat /dev/usb/tts/0. På serieporten sitter mitt javastamp. Problemet är att jag måste skicka ca 4000 tecken till serieporten från javastampet innnan något skrivs ut i linuxprompten. Har försökt skicka tecken som t.ex "\r" för att avbryta innan jag behövt skicka alla tecken. Vad är det som kännetecknar att en sändning till porten är till ända? Någon som har någon idé gällande mitt problem. Att skicka från linuxprompten till javastampet är annars inget problem.
- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
/dev/usb/tts/0 kan adressen bli om man använder udev eller devfs.
Serial-HOWTO innehåller en hel del intressant, som till exempel
:
Serial-HOWTO innehåller en hel del intressant, som till exempel
:
Software flow control uses the main receive and transmit wires to send the start and stop signals. It uses the ASCII control characters DC1 (start) and DC3 (stop) for this purpose. They are just inserted into the regular stream of data. Software flow control is not only slower in reacting but also does not allow the sending of binary data unless special precautions are taken. Since binary data will likely contain DC1 and DC3, special means must be taken to distinguish between a DC3 that means a flow control stop and a DC3 that is part of the binary code. Likewise for DC1.
http://www.linux.se/doc/HOWTO/Serial-HOWTO.html#toc12When the CPU takes some bytes out of the receive buffer of the hardware, it puts them into a much larger (say 8k-byte) receive buffer in main memory. Then a program that is getting bytes from the serial port takes the bytes it's receiving out of that large buffer (using a "read" statement in the program). A similar situation exists for bytes that are to be transmitted. When the CPU needs to fetch some bytes to be transmitted it takes them out of a large (8k-byte) transmit buffer in main memory and puts them into the small 16-byte transmit buffer in the hardware.
Ja jag använder en USB till RS232 konverter. Och terminalemulator kan nog bli lite jobbigt för det är min router som kör linux och då finns det ju lite begränsningar. Tack för svaren, tyvärr har jag inte hittat någon lösning. Mitt linux kommando vägrar att läsa från porten innan bufferten är helt full verkar det som. Jag undrar om det kan vara någon inställning för porten.
Här är mina inställningar. Det är lite av en djungel för mig så ni får gärna ta en titt på dom och komma med förslag.
[admin@(none) /]$ stty -F /dev/usb/tts/0 -a
speed 9600 baud; rows 0; columns 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
[admin@(none) /]$
Här är mina inställningar. Det är lite av en djungel för mig så ni får gärna ta en titt på dom och komma med förslag.
[admin@(none) /]$ stty -F /dev/usb/tts/0 -a
speed 9600 baud; rows 0; columns 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
[admin@(none) /]$
-
- Inlägg: 2360
- Blev medlem: 16 september 2003, 17:18:13
- Ort: Dubai, United Arab Emirates
- Kontakt:
Jag förmodar att du vill ha in det som javastampen skickar i en variabel - annar vore det ganska menlöst att bara lära data från en port ju.
Prova med det här istället. read är ett mer radbaserat kommando än cat.
Prova med det här istället. read är ett mer radbaserat kommando än cat.
Kod: Markera allt
read foo < /dev/usb/tts/0
echo "Got line: $foo"
- MadModder
- Co Admin
- Inlägg: 31457
- Blev medlem: 6 september 2003, 13:32:07
- Ort: MadLand (Enköping)
- Kontakt:
Det här har ju inget att göra med linux... men när jag försökte få in data på en serieport till ett DOS-program jag skrivit (stängt av allt vad flödeskontroll heter. endast RX) så var jag tvungen att skicka ascii 13 till datorn för att systemet skulle förstå att det kommit in något så att jag kunde få ut saker ur FIFO-bufferten till mitt program.
Väldigt skumt det där, för själva porten (hårdvaran) ska inte kräva något speciellt kommando för att skicka datan vidare till programmet. Tänk vad mycket hårdvara som inte hade fungerat om det var så. Jag skulle mer gissa på ett konstigt confat os eller ett skumt moderkort. Är det moderkortet som är konstigt kan det bli problem 
