Ubuntu 18.04でシリアル通信をする
Zynqの開発をすると,最初のうちはシリアル通信を使ってZynq上のプログラムを操作したり出力を確認したりする.
シリアル通信でよく使われるのがWindowsで動作するTera Termである.Zynqの開発をしているブログはWindowsを使っていて,Tera Termでシリアル通信をしているものが多い.
Linux kernelのビルドとかでどうせvirtual machineでLinux環境を入れないし最初っからLinux使えばいいか,ということで僕はUbuntuを使って開発をしている.シリアル通信のためにいちいちWindowsマシンを使わないといけないのは面倒だったので,Ubuntuでシリアル通信をすることにした.そのときに調べたメモ.
Zynq(とかシリアル通信したい機器)と開発PCをUSBケーブルで接続する.Linuxの場合デバイスをつなぐとシリアルポート番号が振られ,/dev
以下に見えるようになる.確認するには/dev/serial/by-id
を見る*1
.
$ ls -lrt /dev/serial/by-id/ total 0 lrwxrwxrwx 1 root root 13 Jan 28 2019 usb-Digilent_Digilent_Adept_USB_Device_210351A78404-if01-port0 -> ../../ttyUSB1 lrwxrwxrwx 1 root root 13 Jan 28 2019 usb-Digilent_Digilent_Adept_USB_Device_210351A78404-if00-port0 -> ../../ttyUSB0
今回は2個のポートが何故か割り振られていた.記事を書いていて思ったのだが,もしかして1つはシリアル受信用で残りがシリアル送信用とかだったりするんだろうか?
Terminal環境でシリアル通信をするコマンドはcu
やscreen
などがある.cu
コマンドを
sudo chmod 666 /dev/ttyUSB0 sudo cu -s 115200 -l /dev/ttyUSB0
のように試してみたところ,シリアル通信の出力が見れるようになった.しかしキー入力をしてもデバイス側で受け付けてもらえない,という不具合があった,
そこで,コマンドではなくUbuntuソフトウェアセンターで配布されているgtktermを使うことにした*2.
Ubuntuソフトウェアセンターでgtktermを検索してインストールするか,
sudo apt install gtkterm
としてインストールする.
インストール後にterminalで
sudo gtkterm
として起動すると,新しいウィンドウが開いて真っ暗な画面が現れる.
ConfigurationのPortをクリックして設定を開く.
シリアルポートとボーレートの設定などを行う.今回Zybo-Z7-20と接続するには画面のように設定する必要があった.
(/dev/ttyUSB0
をportにしていたところ何も表示されなかった.0と1のポートの違いは何だろうか?)
OKを押すとデバイスとのシリアル通信が開始される.