Någon som kan linux eller förstår rs232?

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
vlad
Inlägg: 119
Blev medlem: 13 februari 2005, 16:28:47

Någon som kan linux eller förstår rs232?

Inlägg av vlad »

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.
Croaton
Inlägg: 137
Blev medlem: 23 november 2005, 10:06:26
Ort: Örnsköldsvik

Inlägg av Croaton »

/dev/usb/tts/0 ??

Har du någon form av USB till RS232 konverter?

cat /dev/ttyS0 kör i alla fall jag för att cat'a från COM1.

/Croaton
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

/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
:
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.
When 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.
http://www.linux.se/doc/HOWTO/Serial-HOWTO.html#toc12
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Varför inte använda en terminalemulator (t ex cu) istället för cat?
vlad
Inlägg: 119
Blev medlem: 13 februari 2005, 16:28:47

Inlägg av vlad »

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) /]$
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

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.

Kod: Markera allt

read foo < /dev/usb/tts/0
echo "Got line: $foo"
Användarvisningsbild
MadModder
Co Admin
Inlägg: 31457
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Inlägg av MadModder »

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.
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

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 :(
vlad
Inlägg: 119
Blev medlem: 13 februari 2005, 16:28:47

Inlägg av vlad »

Har provat det ni föreslagit utan framgång. När jag skriver: read foo < /dev/usb/tts/0 så får jag endast en blinkande markör som verkar stå och vänta på att ta emot något, men sedan händer inget... Kan det vara en bug i drivrutinen?
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

read foo < /dev/.... ska ta emot tecken tills dess att den tar mot ett enter. Då ska den returnera med de inlästa tecknena i variabeln $foo.
vlad
Inlägg: 119
Blev medlem: 13 februari 2005, 16:28:47

Inlägg av vlad »

Flashade om routern där jag kör linux och då funkade det med read kommandot som matseng tipsade om. Tack för hjälpen. :)
Skriv svar