I use the Arduino IDE to upload sketches to my Arduino Uno. My OS is Linux Ubuntu 14.04 LTS. The Arduino IDE has two ports by default for communication with the Arduino Uno:

  1. What is the difference between these two ports ?
  2. What does "ACM0" and "S0" mean ?
  3. Are there configuration files somewhere in the OS folder structure that describe the parameters of these ports ?

I know that when I select /dev/ttyACM0, I am able to send data to my Arduino Uno. However it does not work when I select /dev/ttyS0.

I just want to better understand what these ports are exactly.


/dev/ttyACM0 is a USB communication device (CDC) of sub-type "abstract control model" (ACM). That is what the Arduino is.

/dev/ttyS0 is a hardware serial port - the (typically) 9-pin D connector on the back of your computer.

If you want to use /dev/ttyS0 (why would you?!) you will require a special cable that converts the RS-232 voltage signals from the 9-pin D connector into the right TTL level signals for the Ardiuno and wire it in to the right pins on the board.

| improve this answer | |

Some high-level languages (e.g. matlab) treat all serial ports as the /dev/ttyS# selecter. To interface with an Arduino with MATLAB you have to rename /dev/ttyACM0 as /dev/ttyS#.

This may also be an option in the Arduino IDE, and that is why those options exist.

| improve this answer | |
  • 1
    why would you rename it when a symlink could do the trick ? – PypeBros Sep 26 '16 at 15:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.