retrohacker
retrohacker

Reputation: 3224

Serial Comm Connection on Linux

I have a RedBee RFID Reader. Its user documentation is only for windows, and I am on ArchLinux. The only time I have ever done serial communication over a USB port was for an Arduino and that was through their GUI environment so I never was exposed to the metal. So I have this RFID reader that you interface with via serial communication across a USB port. The baud rate is 9600, the device is connected to /dev/bus/usb/004/004. The output of ls -l /dev/bus/usb/004/004 is:

crwxrwxrwx 1 root root 189, 387 Mar  8 19:14 /dev/bus/usb/004/004

The output of lsusb is

Bus 004 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-
Serial (UART) IC
Bus 004 Device 003: ID 0cf3:3005 Atheros Communications, Inc. AR3011 Bluetooth
...

The output of lsusb -s 004:004 -v is:

Bus 004 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x0403 Future Technology Devices International, Ltd
  idProduct          0x6001 FT232 USB-Serial (UART) IC
  bcdDevice            6.00
  iManufacturer           1 FTDI
  iProduct                2 FT232R USB UART
  iSerial                 3 A900DGX9
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower               90mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              2 FT232R USB UART
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
Device Status:     0x0000
  (Bus Powered)

Here is the output of dmsg | grep -i tty

[    0.000000] console [tty0] enabled
[    7.226118] systemd[1]: Starting system-getty.slice.
[    7.226397] systemd[1]: Created slice system-getty.slice.
[   10.535204] usb 4-1.7: FTDI USB Serial Device converter now attached to ttyUSB0
[ 6372.435916] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 7961.660760] usb 4-1.7: FTDI USB Serial Device converter now attached to ttyUSB0
[ 7964.716225] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 8282.582961] usb 4-1.7: FTDI USB Serial Device converter now attached to ttyUSB0

Things I have tried:

Upvotes: 2

Views: 5791

Answers (2)

Calin Vatavu
Calin Vatavu

Reputation: 11

This way you can automatically detect which device you should use (replace FT232R_USB_UART with model) :

   #!/bin/sh

   PORT=""

   for i in /dev/ttyUSB* ; do
       if [ "x`udevadm info $i | grep 'ID_MODEL=FT232R_USB_UART'`" != "x" ] ; then
           PORT=$i
       fi
   done

   if [ "x$PORT" = "x" ] ; then
       echo "No FT232R_USB_UART port found!" 1>&2
       exit 1
   fi

   echo "PORT = $PORT"

Upvotes: 0

retrohacker
retrohacker

Reputation: 3224

The solution is to use dmesg | grep -i tty to get the TTY the device has connected to. In my case I needed to connect to /dev/ttyUSB0 not /dev/bus/usb/004/004.

More Info

dmesg

Upvotes: 4

Related Questions