Serial ports usage on Linux

From ArmadeusWiki
Revision as of 20:50, 12 December 2011 by JulienB (Talk | contribs) (Changing port parameters)

Jump to: navigation, search

How to use the APF's serial ports on Linux.

Generalities

On Linux all serial ports are driven the same way. Only their device nodes are changing to reflect the port type:

  • /dev/ttySMXN (kernels <= 2.6.29) or /dev/ttymxcN (kernels > 2.6.29) for i.MX processor internal ports
  • /dev/ttyUSBN for USB <-> serial converters
  • /dev/ttySnN for 16550 compatible FPGA's IP

Console port

  • Console port is the default serial port on which you can interact with the board (U-Boot and Linux).
    • It is port 0 (-> /dev/ttySMX0 or /dev/ttymxc0) on APF9328 & APF27
    • It is port 2 (-> /dev/ttymxc2) on APF51
  • So: without software modifications this port is not available to connect a MODEM or any other RS-232 device. If you want to use it as a normal serial port on Linux then:
    • be sure that your device won't send data back in response of U-Boot boot's sequence
    • change console=ttySMX0,115200 to console=ttySMXN,115200 in U-Boot bootargs variable (N=1 on APF9328 and N=2 on APF27)

Changing port parameters

  • To get current parameters (change serial port device name depending on your board):
# stty -F /dev/ttySMX0
speed 115200 baud;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ^J;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-brkint ixoff -imaxbel
-iexten -echoctl
  • To only get actual speed:
# stty -F /dev/ttySMX0 speed
115200
  • By default serial ports are configured as terminal emulator. If you want to use them as "raw" serial port you will have to do first (example for port 1):
# stty -F /dev/ttySMX1 raw
# stty -F /dev/ttySMX1 -echo -echoe -echok
  • To change baudrate of port 2 to 115200 :
# stty -F /dev/ttySMX2 115200

Sending/Receiving data

  • It is simple as opening the device as a file and writing data to it:
# echo "HELLO" > /dev/ttySMX0
  • To receive data (ASCII in that case):
# cat /dev/ttySMX0

Links