From windows I can communicate with a serial port device using following commands:
mode com1: baud=9600 data=8 parity=n stop=1
copy con com1
alt+18alt+2ctrl+z
Device starts the requested operation.
When I try to accomplish the same operation from a stand alone debian box or from a debian virtualbox instance of the same windows machine, I had no luck so far.
Here's equivalent linux commands(at least I think so)
stty -F /dev/ttyS0 speed 9600 cs8 -cstopb -parenb
echo '\x12\x02' > /dev/ttyS0
Nothing happens.
Can somebody please direct me to the right direction?
will not be interpreted, and will literally write the string
\x12\x02
(and append a newline) to the specified serial port. Instead usewhich you can construct on the command line by typing CtrlVCtrlR and CtrlVCtrlB. Or it is easier to use an editor to type into a script file.
The
stty
command should work, unless another program is interfering. A common culprit isgpsd
which looks for GPS devices being plugged in.If you want to use hex codes, you should add
-e
option to enable interpretation of backslash escapes by echo (but the result is the same as withecho
CtrlRCtrlB). And as wallyk said, you probably want to add-n
to prevent the output of a newline:Also make sure that
/dev/ttyS0
is the port you want.SCREEN:
NOTE: screen is actually not able to send hex, as far as I know. To do that, use
echo
orprintf
I was using the suggestions in this post to write to a serial port, then using the info from another post to read from the port, with mixed results. I found that using screen is an "easier" solution, since it opens a terminal session directly with that port. (I put easier in quotes, because screen has a really weird interface, IMO, and takes some further reading to figure it out.)
You can issue this command to open a screen session, then anything you type will be sent to the port, plus the return values will be printed below it:
(Change the above to fit your needs for speed, parity, stop bits, etc.) I realize screen isn't the "linux command line" as the post specifically asks for, but I think it's in the same spirit. Plus, you don't have to type echo and quotes every time.
ECHO:
Follow praetorian droid's answer. HOWEVER, this didn't work for me until I also used the cat command (
cat < /dev/ttyS0
) while I was sending the echo command.PRINTF:
I found that one can also use printf's '%x' command:
Again, for printf, start
cat < /dev/ttyS0
before sending the command.