Arduino Communications Device Naming with udev

From Combustory
(Difference between revisions)
Jump to: navigation, search
(udev)
 
(7 intermediate revisions by one user not shown)
Line 1: Line 1:
[[Category:Hardware detection and troubleshooting]]
+
<anyweb>http://combustory.com/wiki/ads/ad_rtc_1.html</anyweb>
 +
 
 +
{{default}}
 +
 
 +
__NOTOC__
 +
<anyweb>http://combustory.com/wiki/ads/ad_rtc_1.html</anyweb>
 
{{Article summary start}}
 
{{Article summary start}}
{{Article summary text|This article covers the installation and basic usage of the [http://code.google.com/p/the-bus-pirate/ Bus Pirate].}}
+
{{Article summary text|This article covers the configuration of udev for Arduino Communication.}}
 
{{Article summary end}}
 
{{Article summary end}}
  
The [http://code.google.com/p/the-bus-pirate/ Bus Pirate] is a versatile tool for communicating with various hardware.
+
==Summary==
 +
If you use more than one Arduino with USB or have other USB-to-Serial devices, then you may find it convenient to make the device have the same name every time you reboot or connect the Arduino. The technique here is shown for an FTDI device, but the same process can be used for just about any USB-to-Serial device that the system recognizes.
  
Interfacing a new microchip can be a hassle. Breadboarding a circuit, writing code, hauling out the programmer, or maybe even prototyping a PCB. We never seem to get it right on the first try.
+
==Assumptions==
 
+
* You are familiar with the Linux command line
The ‘Bus Pirate’ is a universal bus interface that talks to most chips from a PC serial terminal, eliminating a ton of early prototyping effort when working with new or unknown chips. Many serial protocols are supported at 0-5.5volts, more can be added. See more at the google code site for the [http://code.google.com/p/the-bus-pirate/ Bus Pirate].
+
* You understand basic text file configuration methods
 +
* You are familiar with serial communications in Linux
  
 
==Installation==
 
==Installation==
  
{{Note|All scripts will assume that there is a '{{ic|/dev/buspirate}}'.}}
+
{{Note|All scripts will assume that there is a '{{ic|/dev/arduino_1}}'.}}
  
 
The drivers for the FTDI chip is included in the kernel, so it should be detected as soon as it's plugged in, and assigned to device {{ic|/dev/ttyUSB[0-9]}}.
 
The drivers for the FTDI chip is included in the kernel, so it should be detected as soon as it's plugged in, and assigned to device {{ic|/dev/ttyUSB[0-9]}}.
 
To check where it got assigned, run:
 
To check where it got assigned, run:
  
   dmesg | tail
+
   dmesg | grep FTDI
  
 
The output will contain a line that looks something like this:
 
The output will contain a line that looks something like this:
Line 25: Line 32:
 
===udev===
 
===udev===
  
It can be annoying to have to look up what {{ic|/dev/ttyUSB[0-9]}} the device gets assigned, so it's a good idea to add a simple udev rule that creates the symlink '{{ic|/dev/buspirate}} -> {{ic|/dev/ttyUSB*}}' when it is plugged in.
+
It can be annoying to have to look up what {{ic|/dev/ttyUSB[0-9]}} the device gets assigned, so it's a good idea to add a simple udev rule that creates a link to the device when it is plugged in. It used to be possible to rename the device which would leave the ttyUSB[0-9] open for other devices. If you are using a linux kernel that is old enough you can rename the device. However, the linux community has determined the link is the proper method to track the device. Below I will show both methods.
  
First of all, you will need to find out the serial number of FTDI chip on the bus pirate. This can be achieved by running the following, assuming your device is plugged in and was assigned to {{ic|/dev/ttyUSB0}}:
+
First of all, you will need to find out the serial number of FTDI chip on the Arduino. This can be achieved by running the following, assuming your device is plugged in and was assigned to {{ic|/dev/ttyUSB0}}:
  
 
   udevadm info --attribute-walk -n /dev/ttyUSB0
 
   udevadm info --attribute-walk -n /dev/ttyUSB0
Line 33: Line 40:
 
Now add/create the following file:
 
Now add/create the following file:
  
{{hc|/etc/udev/rules.d/98-buspirate.rules|2=
+
  /etc/udev/rules.d/98-arduino.rules
<nowiki>
+
 
SUBSYSTEMS=="usb", ATTRS{serial}=="A700618T", ATTRS{product}=="FT232R USB UART", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", NAME="arduino_1"
+
For the old kernels put this in your file:
</nowiki>}}
+
 
 +
<pre><nowiki>
 +
SUBSYSTEMS=="usb", ATTRS{serial}=="XXXXXXXX", ATTRS{product}=="FT232R USB UART", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", NAME="arduino_1"
 +
</nowiki></pre>
 +
 
 +
For the new kernels put this in your file:
 +
 
 +
<pre><nowiki>
 +
SUBSYSTEMS=="usb", ATTRS{serial}=="XXXXXXXX", ATTRS{product}=="FT232R USB UART", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", SYMLINK+="arduino_1"
 +
</nowiki></pre>
  
 
Change 'ATTRS{serial}=="XXXXXXXX"' to the serial on your device and force udev to load the new rule:
 
Change 'ATTRS{serial}=="XXXXXXXX"' to the serial on your device and force udev to load the new rule:
Line 42: Line 58:
 
   udevadm control --reload-rules
 
   udevadm control --reload-rules
  
At this point, whenever you plug in the device, the symlink should be created.
+
At this point, whenever you plug in the device, the device should be renamed to {{ic|/dev/arduino_1}} or a link created. You can rename or link more by adding more lines to the rules file and extract the serial number for each device and of course name it what ever you like. The same process can be used for other USB-to-Serial devices as well.
  
 
==Communication==
 
==Communication==
Line 49: Line 65:
  
 
* {{ic|minicom}}
 
* {{ic|minicom}}
   minicom -b 115200 -8 -D /dev/buspirate
+
   minicom -b 115200 -8 -D /dev/arduino_1
 
* {{ic|screen}}
 
* {{ic|screen}}
   screen /dev/buspirate 115200 8N1
+
   screen /dev/arduino_1 115200 8N1
 
* {{ic|picocom}}
 
* {{ic|picocom}}
   picocom -b 115200 -p n -d 8 /dev/buspirate
+
   picocom -b 115200 -p n -d 8 /dev/arduino_1
 
+
* {{ic|putty}} - gui utility
Type '?' and press enter and the device should reply with a list of possible commands.
+
putty -serial /dev/arduino_1 -sercfg 115200,8,n,1,X
 +
* {{ic|plink}} - cli utility
 +
plink -serial /dev/arduino_1 -sercfg 115200,8,n,1,X

Latest revision as of 18:08, 4 March 2019

Welcome to Combustory


Any questions or comments:

  • Send them to - combustor@combustory.com

Contents


Summary
This article covers the configuration of udev for Arduino Communication.

Summary

If you use more than one Arduino with USB or have other USB-to-Serial devices, then you may find it convenient to make the device have the same name every time you reboot or connect the Arduino. The technique here is shown for an FTDI device, but the same process can be used for just about any USB-to-Serial device that the system recognizes.

Assumptions

  • You are familiar with the Linux command line
  • You understand basic text file configuration methods
  • You are familiar with serial communications in Linux

Installation

Note: All scripts will assume that there is a '/dev/arduino_1'.

The drivers for the FTDI chip is included in the kernel, so it should be detected as soon as it's plugged in, and assigned to device /dev/ttyUSB[0-9]. To check where it got assigned, run:

 dmesg | grep FTDI

The output will contain a line that looks something like this:

 usb 1-4.4: FTDI USB Serial Device converter now attached to ttyUSB0

udev

It can be annoying to have to look up what /dev/ttyUSB[0-9] the device gets assigned, so it's a good idea to add a simple udev rule that creates a link to the device when it is plugged in. It used to be possible to rename the device which would leave the ttyUSB[0-9] open for other devices. If you are using a linux kernel that is old enough you can rename the device. However, the linux community has determined the link is the proper method to track the device. Below I will show both methods.

First of all, you will need to find out the serial number of FTDI chip on the Arduino. This can be achieved by running the following, assuming your device is plugged in and was assigned to /dev/ttyUSB0:

 udevadm info --attribute-walk -n /dev/ttyUSB0

Now add/create the following file:

 /etc/udev/rules.d/98-arduino.rules

For the old kernels put this in your file:

SUBSYSTEMS=="usb", ATTRS{serial}=="XXXXXXXX", ATTRS{product}=="FT232R USB UART", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", NAME="arduino_1"

For the new kernels put this in your file:

SUBSYSTEMS=="usb", ATTRS{serial}=="XXXXXXXX", ATTRS{product}=="FT232R USB UART", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", SYMLINK+="arduino_1"

Change 'ATTRS{serial}=="XXXXXXXX"' to the serial on your device and force udev to load the new rule:

 udevadm control --reload-rules

At this point, whenever you plug in the device, the device should be renamed to /dev/arduino_1 or a link created. You can rename or link more by adding more lines to the rules file and extract the serial number for each device and of course name it what ever you like. The same process can be used for other USB-to-Serial devices as well.

Communication

To communicate with the device, you can use any of the following, to name a few:

  • minicom
 minicom -b 115200 -8 -D /dev/arduino_1
  • screen
 screen /dev/arduino_1 115200 8N1
  • picocom
 picocom -b 115200 -p n -d 8 /dev/arduino_1
  • putty - gui utility
putty -serial /dev/arduino_1 -sercfg 115200,8,n,1,X
  • plink - cli utility
plink -serial /dev/arduino_1 -sercfg 115200,8,n,1,X
Personal tools
Sponsers
Your Ad Here
Your Ad Here