Skip to content
Hlab edited this page Jul 24, 2013 · 21 revisions

Version Tracking

Version 1.3

  • Improved port finding on all platforms. Requires pyserial >= 2.6

Version 1.2

Changed the original serial_server_v1_1 found among provided LabRAD modules

  • support for both windows and linux
  • additional settings for flushing input and output

Troubleshooting

Port Names Keep Changing

Devices may get assigned a new port name (COM1 instead of COM0 or ttyUSB1 instead of ttyUSBO) if they are restarted while the port is open. This is the case, for instance, when the serial server and the device server are both running while the physical device is restarted. To avoid this issue, the device server has to be turned off before power cycling or disconnecting the device.

Alternatively, by defining udev rules, we can address each device using an alias regardless of which port it decides to connect to. Say, for example, that the deice is currently assigned to /dev/ttyUSB1. Using udevadm, we can determine complete information about the device attributes:

$ udevadm info -a --name /dev/ttyUSB1
...
    ATTRS{manufacturer}=="FTDI"
    ATTRS{product}=="USB Serial Converter"
    ATTRS{serial}=="FTF89AE9"
...

The combination of manufacturer, product, and serial should uniquely identify each device. We can use these attributes to assign a permanent alias. Create a .rules file in the /etc/udev/rules.d directory, e.g., /etc/udev/rules.d/assign-USB.rules.

ATTRS{serial}=="FTF89AE9",SYMLINK+="mydevice"

After triggering our new udev rule, the device will be accessible accessible via /dev/mydevice. One can also specify NAME ="ttyUSB10" to have a permanent reference.

$ udevadm trigger

Ubuntu Ports Not Found

On Linux, if no serial ports are found, make sure the user has the right permissions to open the serial ports.

ls -l /dev/

For instance, one can add the user to the group dialout

adduser username dialout

To make sure one can open the port, use the python serial library, i.e

import serial
ser = serial.Serial('/dev/ttyUSB0')