LoginSignup
2
0

RaspberryPiでttyポートを使う

Last updated at Posted at 2024-03-28

ttyポートに直接アクセスするプログラム

sudo apt -y install screen

コマンド終了は「Ctrl-A k」
参考 https://hirotaka-hachiya.hatenablog.com/entry/2016/05/13/133333

複数のFTDIシリアルポートを識別

$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Apr  1 20:55 /dev/ttyUSB0
$ lsusb -v
Bus 001 Device 004: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x0403 Future Technology Devices International, Ltd
  idProduct          0x6011 FT4232H Quad HS USB-UART/FIFO IC
  bcdDevice            8.00
  iManufacturer           1 FTDI
  iProduct                2 Quad RS232-HS
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0065
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
以下略
$ udevadm info -q all -n /dev/ttyUSB0
P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0
M: ttyUSB0
R: 0
U: tty
D: c 188:0
N: ttyUSB0
L: 0
S: serial/by-id/usb-FTDI_Quad_RS232-HS-if00-port0
S: ttyUSB-FTDI0
S: serial/by-path/platform-3f980000.usb-usb-0:1.2:1.0-port0
E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0
E: DEVNAME=/dev/ttyUSB0
E: MAJOR=188
E: MINOR=0
E: SUBSYSTEM=tty
E: USEC_INITIALIZED=24290823
E: ID_BUS=usb
E: ID_MODEL=Quad_RS232-HS
E: ID_MODEL_ENC=Quad\x20RS232-HS
E: ID_MODEL_ID=6011
E: ID_SERIAL=FTDI_Quad_RS232-HS
E: ID_VENDOR=FTDI
E: ID_VENDOR_ENC=FTDI
E: ID_VENDOR_ID=0403
E: ID_REVISION=0800
E: ID_TYPE=generic
E: ID_USB_MODEL=Quad_RS232-HS
E: ID_USB_MODEL_ENC=Quad\x20RS232-HS
E: ID_USB_MODEL_ID=6011
E: ID_USB_SERIAL=FTDI_Quad_RS232-HS
E: ID_USB_VENDOR=FTDI
E: ID_USB_VENDOR_ENC=FTDI
E: ID_USB_VENDOR_ID=0403
E: ID_USB_REVISION=0800
E: ID_USB_TYPE=generic
E: ID_USB_INTERFACES=:ffffff:
E: ID_USB_INTERFACE_NUM=00
以下略

ttyUSB?の別名デバイスを生成する /dev/ttyUSB-FTDI[0123]

$ sudo vi /etc/udev/rules.d/99-ftdi.rules
# FT4232
SUBSYSTEM=="tty",ENV{ID_VENDOR_ID}=="0403",ENV{ID_MODEL_ID}=="6011",ENV{ID_USB_INTERFACE_NUM}=="00",GROUP="dialout",MODE="0660",SYMLINK+="ttyUSB-FTDI0"
SUBSYSTEM=="tty",ENV{ID_VENDOR_ID}=="0403",ENV{ID_MODEL_ID}=="6011",ENV{ID_USB_INTERFACE_NUM}=="01",GROUP="dialout",MODE="0660",SYMLINK+="ttyUSB-FTDI1"
SUBSYSTEM=="tty",ENV{ID_VENDOR_ID}=="0403",ENV{ID_MODEL_ID}=="6011",ENV{ID_USB_INTERFACE_NUM}=="02",GROUP="dialout",MODE="0660",SYMLINK+="ttyUSB-FTDI2"
SUBSYSTEM=="tty",ENV{ID_VENDOR_ID}=="0403",ENV{ID_MODEL_ID}=="6011",ENV{ID_USB_INTERFACE_NUM}=="03",GROUP="dialout",MODE="0660",SYMLINK+="ttyUSB-FTDI3"

ルールを反映

sudo udevadm trigger
又は
sudo /etc/init.d/udev reload

参考

https://qiita.com/kiyonaga/items/182db6b8fc9afb33751c
https://qiita.com/rdonster/items/ecd335abb2d76eec943d

ttyポートのアクセス権

$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Apr  1 20:55 /dev/ttyUSB0
$ groups
raspi adm dialout cdrom sudo audio video plugdev games users input render netdev gpio i2c spi

ttyポートをプログラムで使う

struct ttyctrl {
	int fd;
	struct termios oldtio;
	struct termios newtio;
};
struct ttyctrl m_ttylist[4];
struct ttyctrl& tty = m_ttylist[i];
tty.fd = open(ttyary[i], O_RDWR);
if (0 <= tty.fd) {
	int err = 0;
	const int yes = 1;
	err = ioctl(tty.fd, FIONBIO, &yes);
	err = tcflush(tty.fd, TCIFLUSH);
	err = tcgetattr(tty.fd, &tty.oldtio);
	tty.newtio = tty.oldtio;
	cfmakeraw(&tty.newtio);
	err = cfsetspeed(&tty.newtio, B300);
	err = tcsetattr(tty.fd, TCSANOW, &tty.newtio);
	tty.writing = false;
 }

参考
https://mcommit.hatenadiary.com/entry/2017/07/09/210840
https://irobot.csse.muroran-it.ac.jp/html-corner/robotMaker/elements/outlineSerialCommProgramming/index.html
http://archive.linux.or.jp/JF/JFdocs/Serial-Programming-HOWTO-3.html
https://manpages.ubuntu.com/manpages/bionic/ja/man4/tty_ioctl.4.html

シリアルコンソール

参考
https://www.mikan-tech.net/entry/raspi-serial-console
https://toki-blog.com/pi-serial/
https://raspberrypi-japan.com/enable-port-serial-raspberry-pi-3/
https://scratchpad.jp/raspberry-pi-3-model-b-plus-5/
http://independence-sys.net/main/?p=6035

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0