便所の落書き

電気の知識を赴くままに...

LinuxでRS232Cのシリアル通信

Evernoteからコピペ

 

Linuxでシリアル通信を実行しようと思っても,WindowsのTera Termと違って面倒なので備忘録を書いておくことに。

 
今回は,FT232RL系のモジュールを接続する例で考える。

 

 

まずLinuxにシリアル通信デバイス(今回はFT232RLモジュール)をPCに接続。

Linuxで端末を立ち上げて,

% dmesg

 

と入力してエンター。
すると,いっぱい表示されるが,その中で

FTDI USB Serial Device converter now attached to ttyUSB0

 

とかいう行がある。コレは「FTDI USBシリアル変換ICはttyUSB0で接続した」ということを示している。
(このttyUSB0とは,シリアルポート0であり,WindowsではCOM~にあたるもの)
したがって,接続するときは"ttyUSB0"を使用。
 
また,実際に接続する際には cu コマンドを使います(持ってない場合はインストール)。
使い方はこの場合,

% cu -s <baud reat> -l <device name>

 

となる。<baud reat>は通信速度,<device name>はこの場合,"ttyUSB0"と入力する。
早速これを使って通信を...といきたいところだが,待った,である。
ファイルにはパーミッションWindowsでは「属性」と呼ぶそうな。)がある。
通常,ttyUSB0のような/dev/内のファイルはそのままでは通信できない。
 
なぜか。
ユーザによってファイルの読み書き実行をできる権限が違うからだ。
例えば,
・そのファイルを保持しているユーザは読み書き実行できるが,その他のユーザはできない
・どのユーザでも読み書き実行ができる
などなど...
では,ttyUSB0のパーミッションを見てみよう。
端末で,

% ls -l /dev/ttyUSB0

 

と入力する。
すると,

crw-rw--- 1 root dialout 188, 0  2月 10 22:05 /dev/ttyUSB0

 と出る。

この出力は時と場合,端末によって変わることがあるが,この場合で書く。
重要なのは頭のあたりの
crw-rw----
であるが,この文字列は(1,3,3,3)文字で区切る。
頭1つ目の文字はファイルの種類を表しているが,ここでは触れないこととする(私がわかってないので...)。
さて,次の3つは,ファイル所有者のパーミッションを表している。
rw-となっているが,この場合,ファイルの所有者は読み書き(Read Write)ができる。
実行もできる場合は rwx。
次の3つはファイルを所有するユーザが所属するグループに属している全てのユーザに関するパーミッションだ。
その次は,その他のユーザである。
よく分かってないのだが,cuコマンドで通信する場合はその他のユーザからファイルにアクセスしていることになるらしい。
 
てなわけで,このパーミッション
crw-rw-rw-
にしてやらなければならない。
そこで,chmod コマンドを使う。

% sudo chmod 666 /dev/ttyUSB0

 

とすればおk。
chmodはスーパユーザでしか実行できない(多分...)ので,sudoで実行する。
すると,通る。
 
そろそろ接続していこう。

% cu -s 115200 -l /dev/ttyUSB0

 

と入力する(ボーレートとデバイス名は各自で合わせて欲しい)。
すると,成功の場合,

Connected.

 

と返してくる。これで通信確立。
もし,

Line in use

 

とか返してきた場合,パーミッションなどが間違っている可能性があるので,もう一度チェックすること。
 
切断の際は,

~.

 

と入力すると,数秒後に切断される。